| Thoughts as I read: 1. "uninitialized var usage is error": unfortunately impossible without at least one of the following compromises: Automatically initialize variables (wastes CPU); False alarms (see Java); Built-in formal proof system; or, Require compilers to solve the halting problem. 2. Removed keyword "static": kills one of my favorite tricks, "self-init'ing functions". 3. New keyword "as": A good invention in Pythonland. Good call to bring this in. 4. New keyword "nil": Redundant with NULL? 5. Example - Base Types: Uses uint8 in place of char. This obscures intent and makes code less readable. Compare:
int library_fnc(char asterisk errmsg)
versus
int library_fnc(uint8 asterisk errmsg). (HN wants to turn my asterisks into italics...)
In the former it's clear errmsg is a string, in the latter it's not clear (it could be a pointer to a flag). 6. Example - function types. Doesn't one usually typedef the function pointer, rather than the function itself? So making that require two lines is annoying. Aside that, the author is right that C has confusing function pointer typedef syntax. 7. Multi-part array initialization: Encourages unmaintainable code. Depending on what's in those "..."'s, might require compiler to solve halting problem? 8. Multi-pass parsing: Trades maintainability for instant gratification. 9. Symbol accessibility: The author makes "public" (and implicit "private") modify entire structs rather than individual fields... 10. Multi-file module: May lead to unmaintainable code 11. I'm worried about the language arbitrarily defining things like "the results of building are stored in the 'output' directory". OTOH the recipe.txt idea could help standardize what amounts to a lot of ad hoc Makefile programming. 12. Build process difference: Theoretically could speed up compilation. I'm worried for social reasons. In module-based languages, we tend to fall into module hell: one symptom being the infamous 20-page stacktrace (see: Java, Clojure, etc.) The nature of C's #include incentivizes shallow dependency trees (a very good thing). 13. "Language scope": trades portability for convenience 14. Tooling: This shouldn't be part of the language, it should be separate. |
You can always typedef it if you want it. The point is that naming a basic numeric type "char" is not only confusing, but also wrong in the world that's no longer all ASCII.