Lanarcam said:
Le 27/04/2012 12:31, James Kuyper a écrit :
On 04/26/2012 10:32 PM, Eric Sosman wrote: [...]
If you're looking for a language with seat belts, training
wheels, airbags, and padded walls, C shouldn't be your first
choice, and restrictions on arithmetic wouldn't change matters.
A C-like language with few more barriers between conceptually distinct
things like numbers, characters, and bools than C has, would make it
slightly easier to avoid writing nonsense. Those barriers wouldn't cause
the loss of any truly valuable characteristic of C.
I think you mean ADA.
I think *you* mean Ada (the name is not an acronym).
But one could have a C-like language with fewer implicit conversions
without going as far as Ada, which doesn't even have implicit
conversions between otherwise identical integer types.
I can imagine a C-like language with, say, the following features:
- C-like implicit conversions among all numeric types, signed, unsigned,
and floating-point -- or maybe only allow implicit conversions within
each of the three kinds of numeric types (yes, I'm ignoring _Complex
for now)
- bool is treated as a scalar but non-numeric type
- Each enumerated type is treated as a scalar but non-numeric type
(bool could be a special-case enumerated type, with false and true as
enumerated constants)
- No implicit conversions between numeric and non-numeric types (but
casts work as in C)
- 0 is not a null pointer constant; instead, there's a keyword (say,
"nil") that is the language's *only* null pointer constant
- Relational and equality operators yield bool results
- Contexts that require conditions (if, for, while, do-while, !,&&, ||,
?:, and whatever else I've forgotten) require a bool expression
Some implications:
- The NULL macro is unnecessary, and is replaced by the nil keyword.
- You'd have to write "if (num != 0)" rather than "if (num)".
- You'd have to write "if (ptr != nil)" rather than "if (ptr)".
- There are undoubtedly more implications that would have to be worked
out.
This hypothetical language would be closer to Ada than C is, but
it's still much closer to C than it is to Ada. Think of a scale
with C at 0, Ada at 1, and this language at perhaps 0.05 or 0.1.
I do not suggest for a moment that C itself should be changed like this.
It would break almost all existing C code, and that's clearly unacceptable.
But personally, I think I'd like it a little better than I like C. (And
if I ever actually invented such a thing, I'd probably also clean up the
treatment of arrays and pointers.)