How (not) to create a language specification for Perl 6

Video in TIB AV-Portal: How (not) to create a language specification for Perl 6

Formal Metadata

How (not) to create a language specification for Perl 6
Lessons learned
Alternative Title
Perl - Perl 6 Lang Spec Lessons Learned
Title of Series
CC Attribution 2.0 Belgium:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Release Date
Production Year

Content Metadata

Subject Area
Point (geometry) Presentation of a group Group action Variety (linguistics) Code Software developer Multiplication sign Direction (geometry) Reflection (mathematics) Bit Formal language Software bug Category of being Latent heat Mathematics Process (computing) Term (mathematics) Video game Flag Process (computing) Prozesssimulation Task (computing)
Standard deviation Context awareness Code 1 (number) Set (mathematics) Coma Berenices Formal language Data model Uniform resource locator Mathematics Radio-frequency identification Interpreter (computing) Data conversion Programming language Service (economics) Arm Software developer Bit Formal language Entire function Product (business) Process (computing) Internet service provider Order (biology) Natural number Software testing Right angle Resultant Implementation Pascal's triangle Markup language Heat transfer Rule of inference Hypertext Number Revision control Latent heat Term (mathematics) Profil (magazine) Software testing Implementation Form (programming) Standard deviation Suite (music) Computer-aided design Planning Word Personal digital assistant Revision control Interpreter (computing) Communications protocol
Slide rule Implementation Multiplication sign Direction (geometry) Execution unit Source code Set (mathematics) Mereology Perspective (visual) Formal language Number Latent heat Permanent Bit rate Radio-frequency identification Different (Kate Ryan album) Energy level Data conversion Implementation Physical system Addition Dependent and independent variables Mapping Software developer Projective plane Sequence Formal language Word Arithmetic mean Process (computing) Order (biology) System programming Right angle Energy level
Standard deviation Trail Implementation Existence Code Multiplication sign Similarity (geometry) Limit (category theory) Web browser Mereology Host Identity Protocol Formal language Independence (probability theory) Latent heat Internetworking Operator (mathematics) Office suite Implementation Extension (kinesiology) Descriptive statistics Area Operations research Standard deviation Electric generator Trail Kolmogorov complexity Software developer Code Independence (probability theory) Parallel port Bit Web browser Arithmetic mean Process (computing) Internetworking System programming Freezing
Logical constant Suite (music) Building Multiplication sign Source code 1 (number) Set (mathematics) Mereology Formal language Programmer (hardware) Mechanism design Radio-frequency identification Endliche Modelltheorie Data conversion Social class Programming language Logical constant Reflection (mathematics) Software developer Multitier architecture Term (mathematics) Time evolution Duality (mathematics) Right angle Modul <Datentyp> Ocean current Filter <Stochastik> Implementation Adaptive behavior Number Revision control Latent heat Term (mathematics) Operator (mathematics) Energy level Software testing Implementation Macro (computer science) Module (mathematics) Inheritance (object-oriented programming) Suite (music) Operator (mathematics) Evolute Cartesian coordinate system Limit (category theory) Domain-specific language Computer programming Compiler Mathematics Word Integrated development environment Personal digital assistant Revision control Interpreter (computing) Formal grammar
Standard deviation Suite (music) Code Multiplication sign Correspondence (mathematics) Set (mathematics) Numbering scheme Mereology Formal language Subset Optical disc drive Preprocessor Mechanism design Repository (publishing) Flag Information Series (mathematics) Descriptive statistics Fiber (mathematics) Physical system Bit Flow separation Proof theory Fluid statics Vector space Repository (publishing) Time evolution Chain Phase transition Software testing Right angle Pattern language Energy level Quicksort Cycle (graph theory) Arithmetic progression Row (database) Web page Point (geometry) Implementation Computer file Software developer Number Revision control Latent heat Independent set (graph theory) Flow separation Internetworking Energy level Software testing Implementation Traffic reporting Form (programming) Home page Addition Key (cryptography) Information Suite (music) Tesselation Artificial neural network Projective plane Planning Line (geometry) Evolute Software maintenance Compiler Similarity (geometry) Mathematics Word Personal digital assistant Sheaf (mathematics) Revision control
Module (mathematics) Implementation Standard deviation Concurrency (computer science) Code Multiplication sign Cellular automaton Mereology Distance Theory Formal language Revision control Latent heat Prototype Googol Core dump Authorization Video game Right angle Software testing Quicksort Computing platform
the and the only thing that will the the properties of the talk about this and the world and I had gone already the OK well thank you for coming and so did not really learning I everybody hear me OK Mac alright so my talk today is how to create a language specification for Perl 6 and you'll notice that very keyword not there so this is i lessons learned in my 10 years now of working with Perl 6 and when I say that resemble working with Perl 6 for 10 years it is making me I how what happened this decade my life and why is it taking so long and so forth as I go through my talk today please after often ask questions I don't expect that I will take the full 15 minutes that's been allotted so if any of you thinking how light at which I know on you can have some time to get some lunch and we will go from there so as I get my the land and so over the top I for small under talk a bit about like language specifications really are because when I was putting this talk together and this is the distillation of a lot of thinking about in the last 2 or 3 years on all I'll it became apparent to me that when we say language specification it's not always obvious what that means and so I'll talk about what our language specifications of talk about Perl 6 is design process and what i see i in retrospect as being some mistakes that were made in the design process on maybe 1 or 2 but that's all I some important features that I've learned for language specifications and where I hope that the process development team will be able to take things from here on a specific topic of language specifications I mean so how did I come up with this talk when I was invited to give a presentation here Poseidon them on I don't know what I would talk about if you have been following for 6 development then you know that for about the last 18 months maybe a little bit longer I have not been actively involved in it as I had been prior to that on the wide variety of reasons for this on and so I couldn't really talk about anything I've done recently in terms the code base and so I said well maybe I'll do a summer for our reflections on the language design process and this a a couple of topics that are really near and dear to me at this point because I think it's important that we make some directions that we make some changes you see those here on in particular when talking about the specifications it bugs me how much imprecision there is on the development team about the language spec and what that means and so I'm my crusade my my task are going forward from here is to try and get some precision back into the but in fact as we're talking about getting to a person 6 . 0 . 0 releases sometime in the near future might have to get a handle on what we mean by the language specification and so so these topics need to be discussed now on the opinions and if here are at this point just my opinion spies spotted them in small groups from time to time over the past couple of years and now I'm actually going public with it and saying I'm planting a flag here and these are things we need to do
so this a personal look at what's is meant by the whole term of language specification has the following inspections right you're wrong and because I you know I and think about it and so much of what comes up in this talk is is the result of conversations with people that had usually an answer to the question When will Perl 6 be released and that has led to a lot of thinking about how languages could develop so what is a language based
specification many languages have a data Pascal see that language specifications on many languages don't have them so 5 doesn't have a language specification not in any formal sense word certainly on PHP doesn't have of does now proprietor 2014 BH had no sense of a language specification and you can see that in the language I mean if you would appear to be you know it was specified anywhere right to be able to come up with us right but if you take anybody in a language that they work with whether it's any of these languages and you say what is the language specification that you use for your language what you'll discovers across languages in the form specification can be very very different so when we say what is the language specification for say they know there's a document there's a set of documents the very precisely and rigorously defined the Ada language whereas if you go and say what is the language specification for C 1 is language specification for may know this the other CAD 9 is 1 that is 99 the see 11 this can are as a whole bunch of them right the whole bunch of on and on if you go and look at like the language specification that we now know as K and R it was a very formal was very informal is basically a book on that comes to so the form in which a specification can take place will be different from 1 place to another and yet in the Perl 6 community we often talk about the language spec and what 1 person thinks of as being a language specification can be very different from 1 another person that's it talk about it is if it's this fixed well known entity when in reality it's not so this is back up the set of of our language specification what is a specification so I went looked on Wikipedia Wikipedians every on and it's of Wikipedia offered this which I thought was pretty so specification may refer to an explicit set of requirements to be satisfied and that was the key thing that I took away from this that if you talk about a language spec then it's an explicit set of requirements to be satisfied so specification should not be a plan should not be conjectural it should not be 0 we think it's going to be like this if you're talking about a specification that in many contexts on what you're looking at is requirements something that this absolutely needs in order to do things that a in which case we should call them speculations instead of specifications and that the we we have a lot of editing to do so with the word right but it would i'm specification in some context if you talk to somebody about where it wasn't it's the same we have a language specification which really saying is the use of the requirements of the language so again here some example ones I mentioned see already the C programming language originally from Kernighan and Ritchie in 1978 non-unity NCC which begins to excuse me see 89 com which became an ISO standard then became see 99 and see 11 so anomalous the Python is another 1 that doesn't really have a formal language specification on but they do have the paper from language reference that's kept up to date arm vibrated things in the Python language if I look at and I'd say 0 that's pretty close to a specification that describes the language but even if it admits that there are quite a few details that the left ambiguous to give some room to the various implementations of Python code to do things slightly differently even tho it's not what we would normally think of as a programming language certainly HTML we hypertext markup language has a specification to it and so it is in fact a language and it also has a formal specification that is maintained by w 3 c are the early versions of HTML were in fact cities on from the in our cities and just to know all along that theme little bit further we were talking about specifications are language specifications for the entire ROC process is itself a way of making specifications on whether in some examples for that would be like HTTP the hypertext and transfer Protocol or SMTP or you or else all of these things have documents that formally defined how they look and so we don't have to limit ourselves to programming languages when we are discussing language specification so what is the prior finally specification right House profiling when specified as it by the can will work or is it by an interpreter or is it by the test we were as a by a brick wall I mean by little anybody know I mean I know some people know there's the profile expensive this may of these days it's widely considered that it's the interpreter in the test the Perl 6 language specification and anybody who wants disagree with me on that you're probably right right but provide doesn't have a set doesn't have a separate written language specification the interpreter and its tests that defines Perl 5 so whatever the Perl 5 interpreter does that's the standard behavior right and I noticed that if done much with Perl and profile development or Perl 6 development you know the 2 and of the tools and provide development 1st rule number 1 is right no no there is always right and rule number to s the it where changes his mind he still write it occurred to me that Perl 5 spit language specification is the 2 rules whatever Perl 5 says it does is correct and it changes its mind that's correct right so there is no real standard specification there in terms of something that exists is that bro 5 changes its language definition with every release right so that's what that's kind of interesting way to go about doing things
so with Perl 5 4 or 5 was what brought us to wanting to create Perl 6 and so let's look at displaying would specification history for Perl 6 so this story's been told many many
times I'm Perl 6 was announced in July 2000 July 2000 that was 14 and a half years ago ouch rate and there are a number of our receives a request for comments commission Larry says that he expected to get about 20 of things that we might fix in Perl 5 in order to make it Perl 6 and he got 361 that were all over the map I'm Larry refine these into the Apocalypses and synapses in very early on it was decided that unlike the way Perl 5 had been developed where there was no language spec Perl 6 would start with the language spec and then we would implement but that's a very very different process Perl 6 will stop recreating what the language should look like and then we will implement it and my response to that is whoops the the I think that was a mistake I and I only think that now in retrospect the only thing that looking back on it and things that I've learned about language specification since then right in retrospect targeting the creation of a language specification before you do a lot of implementation is a mistake and it really confuses the units when you try to do that in preparing this talk In addition all of the conversations that I've had with people about why it's taken so long for Perl 6 to be developed and all the details about the language spec I found out some interesting things 1st of all if the top it is a were going to create the language specification at the outset that word specification is too loaded with meaning because going back to the Wikipedia definition I gave earlier specification implies a set of of of requirements that have to be met and it implies some level of rigidity impermanence that you don't want at the beginning of a project you don't want there to be all that permanence you want there to be room for experimentation so just the name just by going through and saying we would create start by creating a specification kind of through things in the wrong direction so do we have a design clincher to recall them synapses yes that would be fine but by saying that we would start with a specification at that has led to a lot of confusion about how Perl 6 would develop and how it should be developed so this next slide is a summary of quotes but I had to deal with over 10 years of working with Perl 6 that really illustrate the confusion part of the give you know there are other sources right like the number 1 question I always hear when talking to somebody outside the Perl 6 community about Perl 6 is will be ready right you still this little Perl 6 be ready and you can go and you say well working on it and you're you know we're busy putting together a specification were still trip figuring out the design was to working on the implementation and the next question that comes up by somebody trying to be very very helpful as will have the least Minister the specification right on April 6 developers of her the sequence right right it have you is that if the specification and so then we get into a discussion of well we're still working on figuring out what the specification should have been so that becomes will no wonder it's taking so long if you can't even figure out what the perspectives 1st right and if you don't I'm beginning to decide on the specification this and there's no way you'll ever get to an implementation and it comes to my least favorite question in talking about Perl 6 or comment is that I will hear from some people say Perl 6 needs to freeze the specification right now implement that and then release 2 is my answer is no that would be the wrong approach but I cannot tell you how many times I've heard this in conversations about Perl 6 where very well-meaning people will say the answer is to freeze a spec implemented release that and that all of our problems will be solved all of this I think comes down to the notion that we have supported that we have encouraged in our own discussions on the idea that specification leads develop development but that's not really what happens right so many people really assume that specification proceeds the implementation but and and as I said common we reinforced it in our own discussions of Perl 6 their own ways of saying how things will happen but the reality that I didn't realize until probably about 5 years ago successful languages if you take any successful language or system that we have today they almost always started with an implementation that was later converted into a specification so the and Perl 5 or if or may not even have a specification so profile clearly successful it doesn't have as language specification you can create a successful language without having a specification the know PHP didn't have a specification until 2014 Ruby HTML ht http all of these different systems that we use every day that it would be held up as the primary on systems that we
use that have been very very successful all started out with an implementation 1st and then was later converted into the specification so that's 1 of the big mistakes I think was there on there some striking examples of specifications going wrong how many people have ever heard of HTML + right the assume 0 plus how many people have seen a browser that implements HTML + never happen so in the early days of the Internet HTML came out html came out in 1990 the 1st specification for HTML came out about 1982 again another example of an implementation preceding specifications and right after that they said HTML need some extensions and so there was widely published this document called HTML plus that would define the next generation of HTML and what would have it and it was never implemented and as far as I'm concerned the existence of this document basically delayed development on HTML because nobody could implement this specification nobody had the time resources or whatever to implement that but since it was a specification nobody wanted to do anything that was outside of it they wanted to stay within that specification before going on on doing research for the stock and see 99 but cannot 1999 and after that when they were coming up with see 11 which is the 2011 a standard for seed but after that the C Standards Committee adopted new guidelines and the new guidelines were specifically to overcome the problems that showed up and 99 where things went into the specification but there were no implementations of the and so on and nobody was bothering implementing implement them it was actually making it very hard to implement so they reversed their standards to say that they would not adopt new features in the specification until they had been tested by implementations I was kind of neat to to discover and then we can see again if you go look at the article 1 language specification Wikipedia that has this very nice little quote here which I will just read out loud writing specification before and implementation has largely been avoided since our goal of 1968 what we I didn't know this and and why do you do it because of unexpected difficulties in implementation when implementation is deferred this is exactly the experience we had with many parts of Perl 6 that we would create a specification and we would go in implemented sometime later and also we discovered all of that was wrong start over come up with something quite a bit better but apparently this has been known for some time the so the lesson I learned about language specification and more lessons coming up but 1st of all specification freezes are not anything like a freeze when you freeze the specification when used to declare something as a specification that on needs to be something that is retrospective needs to say we're codifying what already happened so as opposed to work codifying what should happen next so and specification releases are really like code releases the there may be a lot of similarities but my lesson here at least uh going forward is that if you're going to release a specification for a language on it's not exactly the same as a code release and specification should be very retrospective an interesting parallel when I discuss about the specification process for languages and people say 0 you should have a spec and then implement the language is to look at how things happen in the Internet world so Internet standards on 1st of all the RFC process that has to be considered highly successful it has worked really really well for many many decades In the Internet standards process of proposals starts out as something called the Internet draft and this is a working document the people working on that particular area of the Internet on kind of agree on and eventually it graduates to become what's known as an RFC referred a request for comments and that is kind of a formal description of whatever part of the Internet is being proposed to be changed for the adopted on and those are seized can go on to something called standard track as a proposed standard and that's where many are a season of living for yeah mean for a very long time is is just a proposed standard they don't become Internet Standards until 4 things have to happen and the interesting part about that is that the 1st thing that has to happen is there have to be 2 independent operating implementations of the standard and this again is different from this notion of start with the specification and then implement on n the Internet world you start with implementations and what you have that then you can declare a specification the implementations must come 1st and some other things they have to go into that standard but the big 1 that has always struck me is that Internet standards are always developed after the implementation is largely considered to be complete so that's 1 big
mistake I'm Office of what about that was good it's in a language designed the so another lesson that i've
learned in working on Perl 6 is that a programming language is never frozen must languages that right the language is always of all 1 of the things that Perl 6 gets very right is to explicitly recognize that evolution will happen in your language and to prepare for being able to deal with it and so a lot of features have gone into Perl 6 the basically future the language for the days when the language evolves so that includes the things like if you modify the Perl 6 language which you can do as a user as a programmer then your modifications are lexically scoped on the specification for modules and for the Perl 6 language you have using oral version the version numbers refer to the language versions on we've course have features to replacing get rid of the evil that is source filters so now we have macros we have the ability to custom build operators you can define your own operators in Perl 6 which means you are modifying the grammar as you go you're actually modifying the Perl 6 grammar on so we have domain specific languages we have slayings which again allow you to modify the grammar of the language that you there we have the ability to augment classes you can take the base level classes that are in Perl 6 and you can add new methods into them on but if you do that you have to declare that you're doing evil by saying you're doing monkey typing on but you can go and modify the base level classes on classes in Perl 6 are never finalized well actually the application is allowed to but a class cannot say I'm final and no inheritance no of things like that there's is not a way to do that Perl 6 again explicitly recognizing that what we might think of as being the final word today may not be that way in the future so i'm evolution is a constant part of languages in your specification needs to be able to accept that on another part of language design of Perl 6 gets correct is that we're making unlike a lot of other places a sharp distinction between our specification in our implementation so the term Perl 6 always refers to the language it never refers to the compiler right and that again is different from Perl 5 but and this question came up a dinner last night's where we're having dinner and a lot of people there said on whenever whenever I was talking about the compiler I would always say Rakudo Perl which is the compiler that highly development for on and finally won the people there to dinner said I said why do you always say Rakudo Perl 6 instead of just Perl 6 major was pro 6 is the language it's this specification were working on and the compiler has to be something different another thing that we get right is that there's no official implementation of Perl 6 so there is a language spec but there's not a compiler that will be considered to be the official Perl 6 and it's important and and that has always been something that's important to me even though I'm working on 1 of the implementations I mean there there could be a desire to make Rakudo Perl 6 into that Perl 6 standard and that everybody else then becomes the 2nd tier but I think that's bad for the ecosystem I think it's bad for the language as a whole because we have to be able to adapt and the way to jab adapters you have multiple individuals you have evolution you have the ability to evolve and so on declaring or creating or anointing a single implementation is being the official 1 it's probably not a good idea yes you want to do that the of you you know what you were the I'm I'm fine if people think that I think that working with her Ricardo's OK you of the the that the yeah I'm not sure I can solve that problem so the question was how do you prevent people from thinking of of Rakudo Perl as being the official Pearl and on the way the way I always get around it is to say which compilers the official right and is use as you correctly point out some people think GCC is the official C but those of us have been around no that's not the case and so on all all generally say just as there's not really just a single C-compiler there should not be in a single Perl 6 compiler and then people can get it on to be little to work on it you so multiple implementations are key to the long-term evolution of this language on the back the question came up last nite on Rakudo currently runs on top of parent and the JVM and on top of more via and the question him up 1 understood Javier why have all these other ones in the answer is multiple environments gives us capabilities and the ability to try things to test things on to overcome limitations that would be insurmountable if we picked only 1 and so this is a case of there's more than 1 way to do it I mean it really is the Perl 6 model in many many ways another lesson and this is another 1 of my rants Is that what we know is the synapses which are designed documents those should not be the specification and we need to stop referring to them as if they ever were so it we need to get that notion that duality of synapses aspect out of the conversation on I think it caused a lot of confusion both within the developer community within the Perl 6 bubble but more importantly outside the bubble when people say where's the Perl 6 specification we point to the synapses as the specification and it's confusing it's difficult to work with on the synapses and worse they change a lot on there's a reason for the synapses changing and that is because they're not a prescriptive specifications they are a reflection of our current understanding of Perl 6 of what Perl 6 should be and there are many times where the implementation leads those documents where the implementation brought Rakudo Perl 6 or natural or ponds will be doing things that were trying out features but it's not reflected in the synapses and there are places where the synapses kind of articulate where we think Perl 6 will go but we don't have any implementations that implement that and so we need to get rid of this notion of synapses as being a specification document I'm fine calling design document on vinyl calling synapses on but I think we need we eliminate the specification on because they change so frequently whereas we think of specifications as being more rigid on that's another reason why the synapses should not be equated with being a specification on it is difficult to version them just that the mechanics of making versions of synapses is hard of this was recognized sometime around 2008 are in synapsis 1 hour prior to that it was kind of well understood within the community the synapses were working set of specification documents in 2008 snaps 1 was changed to explicitly say that Perl 6 is anything that passes the official test we that is the test suite becomes our specifications or whatever so tests are there if you can create a compiler or interpreter or something that passes the official test we then you have something that you can call it a Perl 6 implementation I so
where should we go from here right 1st all there's
a been saying throughout the talk we need more precision in our description what we are working to establish and release Perl 6 . 0 . 0 this been a goal for the last 3 or 4 years at least and the on-court contributors for Rakudo Perl 6 in Perl 6 in general so are all pretty much in agreement that we're getting really really close to the time when we can say this is Perl 6 . 0 . 0 and to be able to make that release but before we can do that in addition to all of the code level things that have been identified I think we need to have a much better understanding of exactly what we mean and say when we talk about the Perl 6 specification and there needs to be of better understanding in our community that specifications follow implementations they don't perceive them on and for Perl 6 we've already declared in synopsis 1 but we have not made this widely known as much as we should that our specification is a set of tests is not a set of designed or right now this means you really need a good test I mean if you really want to test all the features of a language you gotta make sure that you test suite on tests all the different features of a language and I suspect that the 1st couple of of releases of Perl 6 language on there may be some holes in the testsuite but those will be rapidly closed but we need to get rid of all the false references to synapses as official Perl 6 specification on either by making it clear in the documents produce going forward or in some cases going back and annotating what already exists to indicate that on the synapses really or are no longer our specification document and and you know just doing a couple of them from Google searches where I would do Perl 6 language specification brought up pages words as the synapses or artificial Perl 6 language specification in vector last year the Austrian Pearl workshop I finally got fed up with the Perl 6 homepage for the synapses on Perl 6 that award started out by saying the synapses the official specification of oral sex and so I just finally committed a pattern set I'm done with that we need to start doing that I have another nit to pick with that I get help repository the whole of the synapses is currently called specs but I'm fine with that if that were generally understood but most people are delegates backs and say 0 these are the specification documents so to all my Perl 6 compadres fair warning I will change this I don't know when I'm going to go renamed the repository to something else you have a preferred name but the line is fine with me about just how much a synapses right I mean you know I can use synapses but specs has got to go is wrong and it's confusing for people so I will do it I'm not going to give any more advanced warning when I'm doing it and if you don't like it will forgiveness is better than permission so it's going to happen that you can revert my commit if you like but it's just going to happen right because this is but this is actually been bugging me for about 4 years and I keep saying we need to change the name of that repository hoping to get a groundswell report of support for people saying we should do it and I'm tired of waiting for that so I'm just going to do it I I I all know right I'm the Rakudo Perl pump king from the leader for the compiler that doesn't make me the leader for the Perl 6 specification which is why I had a little reluctant to do that before you but I really don't that forgiveness by the Commission I where were going I think we need to consider and look at the details of what our tool chain is going to look like for the Perl 6 specification because I'm if the Perl 6 language spec is a set of tests we already have a pretty robust has to be Tom roast probably should be called specs but I is called rose but I'm sorry by test is the also really what it was the ROI 0 backward in backward overhead backronym ahead the careful it and the of then all it and so and I did go put that in the really that way we'll find some other things so the current tessellate that the specification will be fined by the tests we but I don't think we should just snapshot the test suite as it exists and say that's Perl 6 . 0 . 0 because the language is evolving inside the test suite there are things that we would consider to be on a solid part of the specification and there are things that we would consider to be very conjectural that are being implemented that they need tests but they are not really part of the specifications so there's always going to be some extra tests in there so what I'd like to see us develop over the next and you months to a year is some sort of mechanisms to extract the part of the test suite that is our consideration of being the Perl 6 specification and we can do a couple of dry runs in this before on beforehand on a lot of people will often say well it's already India hubs just user get tag to tag the version of the specification I think this useful but not sufficient we need something a little bit more than that I'm 1 of the nice things about roast or the official test we is that on it already has a subsetting capability built in so if you have a common set of tests that are being used by multiple implementations right what are the odds that every implementation passed every single test in exactly the exactly the same set of tests and the answer is it doesn't happen at all some implementations need to mark tests as to do and other implementations mark some testis get but those don't always match so many years ago but there was a tool created called fudge was destined for Larry the 5th and then everyday specified drag on flags cheating well that's what we do we have we have is is is still cheating if it becomes an official part of the way you do things on the on some of you have so note that the In other words they would have and you think about the right and the 1st thing and that is the correct correct so right so I inside of the test file there are lines that look like this these are to do workers and there's things like to do in skip and the like and
fibers will take the official test file and preprocess at into producing only those tests are needed for your particular implementation so for example if this line appears before a test line on inside a z of a test file then finds on if it knows that the test is about to be run under the more version of Rakudo then it will marketers to do just for that particular excuse me implementation but the rest the time is considered a comment line so still valid Perl 6 but the some preprocessing so the idea I have is we'll do that Perl 6 versions that the rows to sweet repository of all tests I would also be able to have markers in it the either declare these are the tests part of Perl 6 . 0 portal or declare these tests are not part of 6 . 0 . 0 I don't know which way it will be but using Feige we could then run it on this large superset of tests to produce exactly the set of test needed for a given version of Perl 6 on so we need to work on a toolchain quite a bit I think we also need to explicitly recognize the features have lifetimes in a language I and that a feature may start out as being conjectural 10 minutes got thank you a feature may start at being conjectural and then it may or it may they moved to then being a work in progress for people trying things on eventually it may come to a point where it adopted it's officially part of the language on and then of course we have the the declining side of a future there may be a point at which well it's still there but we don't recommend you use it words discouraged on all the way down to the form of deprecated which is where we say well it's still there but it's going to go away in and then retired which is what it's officially removed come and but I don't know I've never seen this sort of notion of language teachers having lifetimes where you have identified the phases that they go to not for the language as a whole before individual features on and it might be nice of our specification could do something like this is well go down the individual features or individual tests and identify what stage they happen to be in you the right and so so you know perhaps we should explicitly recognize the somehow so we need some guidelines on version I mean the the buyers and within the community and that we expect to have is all about 6 . 0 . 0 but what defines 6 . 0 . 1 what define 6 . 1 . 0 how do we decide after we get the 6 . 0 . 0 where do we go from there on and I know from dealing with version numbers in parrots and in Rakudo and in various other projects getting the version numbers right is a pain so the version numbers in Rakudo the middle the version numbers on record Our 1st release was released 0 for sector release was released 1 Her next release was released to and that's it right now we do releases on a monthly cycle so there are also month numbers that go along with it and they are a four-digit year followed by a two-digit month right but really sequencing is just a sequential number we didn't put any of of the major minor specifics in there and that was a direct reaction on my part to the bizarre numbering scheme that parrot adopted on was also a reaction to the very nice versioning scheme that I like from the to series of versions the moon to always does there's as being a year month release naming scheme that makes it very very easy to work with on certain that Perl 6 version numbers will be 6 . minor number of but thought you know some of the major . minor or something like that but at some point we're going to decide how do we decide what constitutes a new major version and a new minor version and maybe Larry already knows but it's so I don't know so and the other thing that occurred to me is that in Rakudo in Paris and in all my projects that I do now with the time base releases that is a very very useful mechanism for making sure that progress is made and I don't even think about doing projects now without considering time releases on should we have something equivalent to time these releases for the spec I'm not sure I would do it monthly but maybe every 6 months like a winter or once a year or this probably not often enough but a time-based release system might be something worth considering the on and then what kind of started me down this path was several years ago and people were asking when the synapse when the synapses were largely considered respect they said can we get just a version of the synopses that has only the parts that work now as opposed to what might work in the future because of you reading this documents it'll say hey here's a cool feature and you tried Rakudo recruit comes back this is not yet implemented but kind of you know annoying on so I would like to find a way to tag the synapses documents with language version information and the idea I had was doing it at the paragraph level of in a couple of years ago and I wanted to write a tool a proof of concept tool it is never got around to it on the nice thing about doing this is that we could then extract the synapses and say this up this subset of the synapses on corresponds to this version of Perl 6 and you can kind of see on the correspondence there without all of the extra about where we're planning to go and hopefully without the extra of where we been on but just the parts that you would need to know of the nice thing about this is that unlike a specification of the synapses could actually go back and rewrite history to make more sense to people on because you know we could go back and say 0 a better way of describing history would have been this so that would be something nice to so we can and again in thinking about language specifications also then discovered that within many communities this is widespread misconception that specifications proceed got 5 Presedo implementation on and I think specifications work best when they are historical workers what has been done but snapshot that let's make beneficial certainly that's the way the internet has done on the next and language design needs to recognize that languages evolve that's very important it's key and I think it's something that sets Perl 6 of from all and most other languages that developed is how much effort has gone into handling the multi-decade evolution that we hope Perl 6 will begin on so Perl 6 has robust features for that and I think is very key that we seperate specification and implementation and maintain that separation on I like very much that we're doing on test based specification and I really think we need to come up with language and specification and so with that I will take questions
there are the but yes to 1 of stuff and that of your and his life and was the authorities things would be the the thing the the I can see several patents and I don't know I can't speak for the language so much but see several paths certainly they're going to be features that we would consider to be good candidates for the language that we would like to see on 1st implemented as modules so as opposed to and part of Perl 6 design is that you can create modules to customize the language however you want and so you could start by creating a module that would add that particular feature and then if if everybody says 0 yeah that really should be part of the core language than it would be relatively easy to put it in it's a feature that can be done that way or it is something that so obviously needs to be part of the core on then gas and you could prototype of implementation and I wouldn't necessarily have a problem with the going the code base so if there's some sort of general agreement that this is something we should start there are places where we do that now concurrency being a big 1 that there was no specification for concurrency and the reason there was is because we felt like it was definitely pre-mature do a specification for cancer currency let's do some implementations 1st see how we like it and then I was ah what yes exactly so on if that's something that really needs to be in there certainly see how much trouble it is to put in and then we can start to consider those kind of things that but yes I would like again the idea is is that so let's build a platform that makes it easy for people to experiment and we can adopt and things we like on the yeah the challenge is let's be careful about adopting things before were sure that's what we want because Perl 6 history is replete with examples of us adopting approaches and going to good ways down that path and discovering books that was a mistake we really need something radical the other way and so on that's another reason why standards need to follow implementation and at some distance and questions yes thinking about the use of the euro yes theories of has to I I think our intent is that we will have again specifications should be all along with implementations so we will probably declare i Perl 6 . 0 . 0 as a test we I would expect there would be some data is a release candidates leading up to it on corresponding at the same time there will probably a version of Rakudo that we will declare to be meets the 6 . 0 . 0 spec the cell right Larry what it actually for more details see Larry's talk tomorrow in a way the they I could if I knew it was had I this like that of the that find the the the I and I would agree with that time they the the of here we might have right to and I'm sure my time is up yet there at the any more questions I'm here on today and tomorrow I'll be glad that thank you all very much of a few