Why is `scope` planned for deprecation?

Paulo Pinto via Digitalmars-d digitalmars-d at puremagic.com
Tue Nov 18 12:53:36 PST 2014


On Tuesday, 18 November 2014 at 19:45:12 UTC, Walter Bright wrote:
> On 11/18/2014 3:15 AM, "Ola Fosheim Grøstad" 
> <ola.fosheim.grostad+dlang at gmail.com>" wrote:
>> On Tuesday, 18 November 2014 at 02:35:41 UTC, Walter Bright 
>> wrote:
>>> C is a brilliant language. That doesn't mean it hasn't made 
>>> serious mistakes
>>> in its design. The array decay and 0 strings have proven to 
>>> be very costly to
>>> programmers over the decades.
>>
>> I'd rather say that it is the industry that has 
>> misappropriated C, which in my
>> view basically was "typed portable assembly" with very little 
>> builtin
>> presumptions by design. This is important when getting control 
>> over layout, and
>> this transparency is a quality that only C gives me. BCPL 
>> might be considered to
>> have more presumptions (such as string length), being a 
>> minimal "bootstrapping
>> subset" of CPL.
>>
>> You always had the ability in C to implement arrays as a 
>> variable sized struct
>> with a length and a trailing data section, so I'd say that the 
>> C provided type
>> safe variable length arrays. Many people don't use it. Many 
>> people don't know
>> how to use it. Ok, but then they don't understand that they 
>> are programming in a
>> low level language and are responsible for creating their own 
>> environment. I
>> think C's standard lib mistakingly created an illusion of high 
>> level programming
>> that the language only partially supported.
>>
>> Adding the ability to transfer structs by value as a parameter 
>> was probably not
>> worth the implementation cost at the time… Having a "magic 
>> struct/tuple" that
>> transfer length or end pointer with the head pointer does not 
>> fit the C design.
>> If added it should have been done as a struct and to make that 
>> work you would
>> have to add operator overloading. There's an avalanche effect 
>> of features and
>> additional language design issues there.
>>
>> I think K&R deserves credit for being able to say no and stay 
>> minimal, I think
>> the Go team deserves the same credit. As you've experienced 
>> with D, saying no is
>> hard because there are often good arguments for features being 
>> useful and
>> difficult to say in advance with certainty what kind of 
>> avalanche effect adding
>> features have (in terms of semantics, special casing and new 
>> needs for
>> additional support/features, time to complete 
>> implementation/debugging). So
>> saying no until practice shows that a feature is sorely missed 
>> is a sign of good
>> language design practice.
>>
>> The industry wanted portability and high speed and insisted 
>> moving as a flock
>> after C and BLINDLY after C++. Seriously, the media frenzy 
>> around C++ was
>> hysterical despite C++ being a bad design from the start. The 
>> C++ media noise
>> was worse than with Java IIRC. Media are incredibly shallow 
>> when they are trying
>> to sell mags/books based on the "next big thing" and they can 
>> accelerate
>> adoption beyond merits. Which both C++ and Java are two good 
>> examples of.
>>
>> There were alternatives such as Turbo Pascal, Modula-2/3, 
>> Simula, Beta, ML,
>> Eiffel, Delphi and many more. Yet, programmers thought C was 
>> cool because it was
>> "portable assembly" and "industry standard" and "fast" and 
>> "safe bet". So they
>> were happy with it, because C compiler emitted fast code. And 
>> fast was more
>> important to them than safe. Well, they got what they 
>> deserved, right?
>>
>> Not adding additional features is not a design mistake if you 
>> try hard to stay
>> minimal and don't claim to support high level programming. The 
>> mistake is in
>> using a tool as if it supports something it does not.
>>
>> You might be right that K&R set the bar too high for adding 
>> extra features. Yet
>> others might be right that D has been too willing to add 
>> features. As you know,
>> the perfect balance is difficult to find and it is dependent 
>> on the use context,
>> so it materialize after the fact (after implementation). And 
>> C's use context has
>> expanded way beyond the original use context where people were 
>> not afraid to
>> write assembly.
>>
>> (But the incomprehensible typing notation for function 
>> pointers was a design
>> mistake since that was a feature of the language.)
>
> I'm sorry to say this, but these rationalizations as to why C 
> cannot add a trivial enhancement that takes nothing away and 
> solves most of the buffer overflow problems leaves me shaking 
> my head.
>
> (C has added useless enhancements, like VLAs.)

So useless that it became optional in C11.

https://groups.google.com/forum/#!topic/comp.std.c/AoB6LFHcd88


More information about the Digitalmars-d mailing list