I know PM does not like the word 'stability' for language development, and I have just posted a response to Wendell Hatcher's question justifying Patrick's approach.

However, some other questions arose when I was considering 'usability', which Patrick sets as a goal for Rakudo *, as opposed for 'stability'.

I have already written an application in Rakudo (alpha) to process data in my commercial field and to indirectly obtain graphical output, and the results were published in a banking journal (in Russian). So in a sense, Rakudo alpha was usable.

The problem is that each time I want to reuse the program, I need to tweak some part to handle changes in spec.

I want to be able to re-run the application each month to handle incremental data, but before I can hand this off to the operations people, there needs to be some form of stability in the areas that are utilised in the application.

This is a very small real-world application. But in order for more real-world applications to be written, there has to be some assurance that once the code is working and tested, it can be left unattended for some reasonable period of time, eg., a year. Without some form of assurance about the type of maintenance, it is not possible to justify allocating resources to 'real-world' applications, and thereby provide the feed-back needed by language designers.

Suppose we define a domain of stability as syntax/functionality/features that will not be changed until a milestone is reached, with the guarantee that if the language specification changes before then, backwards compatibility will be retained so that the syntax/feature/functionality will continue to function without a need to change it or the surrounding code.

Perhaps different levels of stability could be defined for different domains, eg., 'fossilized' : syntax/functionality/features set in stone for the lifetime of the language, eg., until perl7. 'stable': syntax/functionality/features are stable until the next major review, eg., perl6.1 'organic': ... may change but modifications will be flagged with a deprecation notice and a deadline after which syntax/feature/functionality will not be supported in current form. 'experimental': subject to change at will, to be avoided if 'stable' code is needed.

In this way, subsets of the language can be defined to have different levels of stability, thus allowing developers to choose how to write code and to know what level of maintainability will be needed.

It seems to me this sort of approach is consistent with the whirlpool / strange attractor concept of language design, whilst addressing the desire of commercial developers to be able to predict the resources needed to write and maintain code.


Reply via email to