[Edited2]
[Edited2]
Hey guys,
In honor of Allen Bauer, his list of desired new language features (in no order of priority), I don't want to start a war here :D, just keep his list in a more visible and easy to find place, it was in a comment of an old post, pretty hard to access.
Some of these language features were mapped to new feature requests on Quality Portal.
My intention here is also encourage you to fill a New Feature request on Quality Portal if you miss it here, once I was not able to find some of them :D
(RSP-13339) Better anonymous method syntax (aka. true Lambda style syntax)
2. Better type-inferencing (anonymous types, better implicit type selection for generics).
(RSP-12767)(RSP-13026) Better generic constraints (such as requiring certain operators to be supported).
(RSP-13305) Nullable types with full operator hoisting and null-propagation
(RSP-13322) Attribute constraints (Attributes which can only be used for certain language elements)
6. Fully rooted type system (will require a minor internal structural change to class types). Enables a host of really interesting things.
7. Link-time code generation (better DCU resiliency across versions)
(RSP-13340)(RSP-10336)(RSP-13736) Expanded helpers (possibly inheritance and/or multiple helpers) now also includes interface and generic support
(RSP-13341) Iterators (aka. yield)
(RSP-13293) ARC everywhere
(RSP-13293) Auto reference cycle detection and cleanup (ARC) (see Bacon, et. al. http://researcher.watson.ibm.com/researcher/files/us-bacon/Bacon01Concurrent.pdf for a good write up) new
12. [Weak] references for interfaces in non-ARC compiler. NOTE: this will only work when said interface is implemented by a Delphi object. External COM objects will throw exceptions when assigned to a [Weak] variable/field. It works today for ARC because interfaces aren't available from external sources on the platforms which support ARC.
Non Compiler related items (RTL stuff)
(RSP-13286)(RSP-12920) Full Continuation support in Parallel library
(RSP-13286) Cancellation token support in Parallel library and Async
3. Push an abstract TCustomApplication and TCustomScreen into System.UITypes. Using both inheritance and delegation, create descendants in VCL and FMX. Share one message loop on Windows. Only one Application instance shared between FMX and VCL.
4. Windows Runtime support. Meta-data import initially, generation eventually depending on the overall demand. (Note: VCL is incompatible with Windows Runtime; The traditional Windows programming model on which VCL is built, is no longer supported).
:D
Hey guys,
In honor of Allen Bauer, his list of desired new language features (in no order of priority), I don't want to start a war here :D, just keep his list in a more visible and easy to find place, it was in a comment of an old post, pretty hard to access.
Some of these language features were mapped to new feature requests on Quality Portal.
My intention here is also encourage you to fill a New Feature request on Quality Portal if you miss it here, once I was not able to find some of them :D
(RSP-13339) Better anonymous method syntax (aka. true Lambda style syntax)
2. Better type-inferencing (anonymous types, better implicit type selection for generics).
(RSP-12767)(RSP-13026) Better generic constraints (such as requiring certain operators to be supported).
(RSP-13305) Nullable types with full operator hoisting and null-propagation
(RSP-13322) Attribute constraints (Attributes which can only be used for certain language elements)
6. Fully rooted type system (will require a minor internal structural change to class types). Enables a host of really interesting things.
7. Link-time code generation (better DCU resiliency across versions)
(RSP-13340)(RSP-10336)(RSP-13736) Expanded helpers (possibly inheritance and/or multiple helpers) now also includes interface and generic support
(RSP-13341) Iterators (aka. yield)
(RSP-13293) ARC everywhere
(RSP-13293) Auto reference cycle detection and cleanup (ARC) (see Bacon, et. al. http://researcher.watson.ibm.com/researcher/files/us-bacon/Bacon01Concurrent.pdf for a good write up) new
12. [Weak] references for interfaces in non-ARC compiler. NOTE: this will only work when said interface is implemented by a Delphi object. External COM objects will throw exceptions when assigned to a [Weak] variable/field. It works today for ARC because interfaces aren't available from external sources on the platforms which support ARC.
Non Compiler related items (RTL stuff)
(RSP-13286)(RSP-12920) Full Continuation support in Parallel library
(RSP-13286) Cancellation token support in Parallel library and Async
3. Push an abstract TCustomApplication and TCustomScreen into System.UITypes. Using both inheritance and delegation, create descendants in VCL and FMX. Share one message loop on Windows. Only one Application instance shared between FMX and VCL.
4. Windows Runtime support. Meta-data import initially, generation eventually depending on the overall demand. (Note: VCL is incompatible with Windows Runtime; The traditional Windows programming model on which VCL is built, is no longer supported).
:D
Uh... I'm not dead (yet).... :-)
ReplyDeleteAllen Bauer your list here too :D Sorry for any incovenience.
ReplyDeleteSorry sorry Allen Bauer, I am not good at English, just changed the text :D I would mean "in honor" instead of "in memory".
ReplyDeleteHorácio Filho It's no problem. I think it is a good list :-)
ReplyDeleteAllen Bauer All rights reserved for you :-)
ReplyDeleteAllen Bauer Well, not only that you are not dead, but also I can now confirm my observation - you've been more active in the community since your leave!
ReplyDeleteOne item on the list might become true soon ;)
ReplyDeleteHorácio Filho Maybe better is to create similar list for FPC/Lazarus. -,- I don't get your engagement in expensive commercial and declining product like Delphi.
ReplyDeleteMaciej Izak If you have no interest in Delphi discussions - stay out of them. First and final warning.
ReplyDeleteHorácio Filho I have just spent an hour changing my interface based fluent hierarchy to be class based because I need to use class helpers. And then I bumped into a Highlander problem (there can only be one)... so you absolutely have my vote for RSP-13340
ReplyDeleteAnd the rest of the list is pretty good, too :)
I cannot seem to find QP for interface helpers. Is there one? Stefan Glienke
Allen Bauer that Windows ARC compiler you mentioned once (working prototype), is it LLVM based or is this modification made on old compiler?
ReplyDeleteIn other words, if we would get Windows ARC compiler, one fine day, which one would it be?
/sub
ReplyDeleteAbout "12. [Weak] references for interfaces in non-ARC compiler". I'm not sure there is not a confusion here. Interfaces do not use ARC, even on the ARC compiler. They are reference counted. So this would benefit on all compilers, ARC or non ARC. And this features would also benefit from COM objects, if needed.
ReplyDeleteAdding [Weak] references for interfaces may be indeed a very good idea, especially if it is implemented as zeroing weak references. Up to now, we have to rely on tricks like http://blog.synopse.info/post/2012/06/18/Circular-reference-and-zeroing-weak-pointers - BTW our implementation has a better performance than the current RTL version of [weak], since we use a per-class list and lock.
Most of the list can be reduced to "Look at C#/.net" :o)
ReplyDeleteHorácio Filho Nice list, the ones without QP issue numbers, does that just mean you didn't find any? Cause I'd like to make sure I've voted for some of them.
ReplyDeleteDalija Prasnikar Although interface helpers are only mentioned in the comment (maybe Horácio Filho may edit the description accordingly) this is the one: https://quality.embarcadero.com/browse/RSP-10336
ReplyDeleteA. Bouchez "Interfaces do not use ARC, even on the ARC compiler. They are reference counted."
Eh? The last time I checked ARC stands for automatic reference counting...
Lars Fosdal I am Delphi user too. My interest in Delphi is to perform safe escape way from Delphi, by using and improving OpenSource FPC/Lazarus solution. If you don't like my approach/opinion just ban me now.
ReplyDeleteI really miss a feature in Delphi to restrict language features, so that you can increase the knowledge about how your code is organized. For instance, if you want to verify, that the source code is organized according to plan, it may include things like "procedure A" may never affect "procedure B". That is quite hard today.
ReplyDeleteLars Dybdahl Isn't that subject of static code analysis? Imo that has nothing to do with language features.
ReplyDeleteMaciej Izak You are doing FPC/Lazarus a disservice by writing irrelevant suggestions on posts made by people that are interested in using Delphi.
ReplyDeleteThat YOU want to do a safe escape from Delphi to FPC/Lazarus is NOT the focus of this group - and the comments you have made lately in several threads, are out of context and out of order.
It can be compared to you as a Volkswagen owner, commenting "use Volkswagen instead" in a forum for Audi users. It's irrelevant, immature, and annoying.
Stefan: Basically, yes - but if the language allows too much, analysis can be really, really hard, and it may easily take more than a few seconds to verify a requirement. For instance, if you have a requirement, that floating point data types may not be used in a module, you can search the module for floating point data type names. But it will be harder, if the module calls another module, that uses floating point. Similar for pure functions, disallowing transaction start/stop outside event handlers etc.
ReplyDeleteLars Dybdahl Other way more complex languages have powerful tools for code analysis that can do things most Delphi developers don't even dream of. So that can hardly be a reason. A code analyzer and a compiler share a fair amount of functionality so when extending the language this does not necessarily make anything harder for the analyzer (see Roslyn for example).
ReplyDeleteStefan Glienke: It helps the programmer, when you can specify a restriction directly into the programming language. For instance, specifying integer as data type, will make the compiler complain, if you assign a floating point value to it. Similarly, if a function is pure, adding non-pure stuff into a pure function should make the compiler complain about that, so that you don't have to run external code analysis tools before you realize, that you have to refactor everything.
ReplyDeleteLars Dybdahl While there are programming languages that support design by contract directly others don't but have a good enough tooling and libraries (code contracts from MS comes into mind) that make this possible.
ReplyDeleteEven an external solution with a proper IDE and compiler integration would be a huge improvement, even without directly built into the language/compiler.
Maciej Izak Oh guy, sorry my bad, I know nothing about Embarcadero prices, sorry for any inconvenience. I am just a Delphi enthusiastic, I love it and cheer for its evolution and success :D
ReplyDeleteDalija Prasnikar Stefan Glienke Thanks a lot :D I have updated the post :D
ReplyDeleteAsbjørn Heid The ones without QP issue numbers meant I was not able to find it :( I have updated the post with some new QP entries :D
ReplyDeleteWish 3 might require 6, for example to constraint on types that are "numeric" that will include ordinals and floats. Or, wish 3 constraints might allow specifying a union set of types but then they have to be checked for orthogonality when using an operator (ie you can mix Integer and Double if you use "+", but if you mix an intrinsic and a class or record then "+" should be evaluated against implicit)
ReplyDelete/sub
ReplyDeleteHorácio Filho
ReplyDeletehttps://quality.embarcadero.com/browse/RSP-12767
Generics constraint for enumeration (IEnumerable, IEnumerable)
Somewhat related,
https://quality.embarcadero.com/browse/RSP-13026
Thanks a lot Lars Fosdal :-)
ReplyDeleteHorácio Filho and others: am I wrong about my concerns about point 12? (see above)
ReplyDeleteA. Bouchez From I know, I can be wrong :D, on ARC-enabled targets TInterfacedObject relays on the default ARC mechanism. But outside ARC world, TInterfacedObject implements its own ARC model that has limitations.
ReplyDeleteHorácio Filho You are right: TInterfacedOjbect relies on plain TObject.RefCount/ARC. So it features the [weak] ARC support.
ReplyDelete