Silicon Valley D Meetup - April 15, 2021 - "Compile Time Function Execution (CTFE)"

Ola Fosheim Grøstad ola.fosheim.grostad at gmail.com
Mon Apr 19 09:35:33 UTC 2021


On Monday, 19 April 2021 at 09:06:17 UTC, FeepingCreature wrote:
> Right, I agree with all of this. I just think the way to get to 
> it is to first allow everything, and then in a second step pare 
> it down to something that does what people need while also 
> being monitorable. This is as "simple" as merging every IO call 
> the program does into its state count.

I am not saying it is wrong for a new language to try out this 
philosophy, assuming you are willing to go through a series of 
major revisions of the language. But I think for a language where 
"breaking changes" is a made a big deal of, you want to stay 
conservative.

In that regard, I agree it would be social, as in, if you clearly 
state upfront that your new language will come in major versions 
with major breakage at regular intervals then you should have 
more freedom to explore and end up with something much better. 
Which is not necessarily a deal breaker if you also support 
stable versions with some clear time window, like "version 2 is 
supported until 2030".

So, yeah, it is possible. But you have to teach the programmers 
of your philosophy and make them understand that some versions of 
the language has a long support window and other versions are 
more short-lived. Maybe make it clear in the versioning 
naming-scheme perhaps.

D's problem is that there is only one stable version, and that is 
the most recent one... that makes changes more difficult. Also, 
there are not enough users to get significant experience with 
"experimental features". What works for C++ when providing 
experimental features, might not work for smaller languages.


> - or if not, if D can make it work. At any rate, with a lot of 
> features like implicit conversions, I think people would find 
> that they're harmless and highly useful if they'd just try them 
> for a while.

A lot of features are harmless on a small scale. Python is a very 
flexible language and you can do a lot of stuff in it that you 
should not do. Despite this it works very well on a small scale. 
However, for Python to work on a larger scale it takes a lot of 
discipline (social constraints in place of technical constraints) 
and carefully chosen libraries etc. The use context matters, when 
discussing what is acceptable and what isn't. As such, people 
might have different views on language features and there might 
be no right/wrong solution.

Implicit conversions is good for custom ADTs, but the interaction 
with overloading can be problematic, so it takes a lot of 
foresight to get it right. A geometry library can benefit greatly 
from implicit conversions, but you can run into problems when 
mixing libraries that overuse implicit conversions... So, it 
isn't only a question of whether implicit conversions is a bad 
thing or not, but how the language limits "chains of conversion" 
and overloads and makes it easy to predict for the programmer 
when looking a piece of code.






More information about the Digitalmars-d-announce mailing list