> - '=' is for equality only - assignment is ':=' which is the next best symbol you can find in math for that purpose
That is just syntax. I am not so sure if it is better or worse or not, but there it is.
Different programming languages do have different syntax, and sometimes that can be helpful if their structure is different. However, what I think is that the syntax for types in C is confusing (when you are making types combining by e.g. function of array of integer, or whatever).
> numeric data types are 'integer' and 'real', no single/double nonsense
It is helpful to be able to specify how many bits you want. (In the case of integers, range types (as you also mention) might help, though.)
> 'functions' are for returning values, 'procedures' for side effects
It is useful in C to be able to have side effects and return values, and to be able to ignore return values sometimes. (BASIC doesn't have and that sometimes annoys me)
> Function and procedure definitions can be nested. I can't tell you what shock it was for me to discover that's not a thing in C.
In GNU C you can do that, although a function that refers to stuff in the function it is inside of is only valid before the outer function returns. (And, you are not allowed to declare the inner function as "static" to allow it to work even after it returns in case it does not access stuff that is only valid before the outer function returns.)
> Array indexing is your choice. Start at 0? Start at 1? Start at 100? It's up to you.
That is good, and it is useful. Usually I think starting at zero makes sense, but sometimes there is sense to start at any integer, including positive and negative numbers, so it is good to be able to specify any number.
That is just syntax. I am not so sure if it is better or worse or not, but there it is.
Different programming languages do have different syntax, and sometimes that can be helpful if their structure is different. However, what I think is that the syntax for types in C is confusing (when you are making types combining by e.g. function of array of integer, or whatever).
> numeric data types are 'integer' and 'real', no single/double nonsense
It is helpful to be able to specify how many bits you want. (In the case of integers, range types (as you also mention) might help, though.)
> 'functions' are for returning values, 'procedures' for side effects
It is useful in C to be able to have side effects and return values, and to be able to ignore return values sometimes. (BASIC doesn't have and that sometimes annoys me)
> Function and procedure definitions can be nested. I can't tell you what shock it was for me to discover that's not a thing in C.
In GNU C you can do that, although a function that refers to stuff in the function it is inside of is only valid before the outer function returns. (And, you are not allowed to declare the inner function as "static" to allow it to work even after it returns in case it does not access stuff that is only valid before the outer function returns.)
> Array indexing is your choice. Start at 0? Start at 1? Start at 100? It's up to you.
That is good, and it is useful. Usually I think starting at zero makes sense, but sometimes there is sense to start at any integer, including positive and negative numbers, so it is good to be able to specify any number.