About vaporware and memory management
Michel Fortin posted an answer to this post about "values" in C3 from my wife. I was aware of most of the points made by Michel before his post but I guess I could say some words to clarify.
Is C3 vaporware? Yes, right now, it is. I was aware that C3 would be labeled like that when we decided to talk about it before writing a single line of compiler code (I did make a prototype parser in 2003 but nothing I can use in a real compiler). This is a great departure from the way I'm used to do things. I usually make sure that I show only finished and tested work. My wife and I decided that it was better to start a conversation with the developer community to have feedback as soon as possible. I'm still worried that the "vaporware" label will stick but I hope you will understand the dilemma.
I am a slow writer in english and I don't have much time. I decided it was better to spend my time actually coding the compiler (and necessary utilities) and refining the language specification. When my wife decided she wanted to help me in this project, her enthusiasm to document our experiment in an online journal was very welcome. Please keep in mind that she is trying to vulgarize this stuff. I could probably explain some details more thoroughly but that's not the point of her own blog posts. I will do from time to time (very rarely) in "husband's notes". The recurring pattern of these articles will be that they all contain C3 code (if the grammar change, I will go back and revise these examples). If I just want to talk about me or express opinions, I will do it here.
About RAII and garbage collection, optimizations that use garbage collection algorithms when we can afford delays in the release of resources will be possible in C3. However, the basic constructs of the language won't be dependant on garbage collection like Java, C# and D. I want to thank Michel for the explanation about the leaks in garbage collected programs and about the garbage collection techniques used in different languages. C3 is a meta-language which aim to ultimately support all these strategies and learning the details help me build the right abstractions in the language.
C3 will have the widest possible range of levels of abstraction. It will be both very low-level and high-level. That means that raw pointers that can point anywhere (including heap and stack objects) will exist in C3. They will be used as an implementation detail of other types of pointers but their usage won't appear more "integrated in the language" than smarter pointers. Their use in application-level software will be limited and not recommended but C3 will do as C do: trust the programmer.
To answer the last Michel question, I think that a non-managing weak pointer that becomes NULL when the object goes out of scope would be a good idea and would fit the requirement for a stack object pointer.
Thanks a lot to Michel for the feedback!
