vs activity on StackOverflow: https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved
there is a saying “never trust a chart, that you did not fake yourself” X-D
it would be great of the developers of a language to state their mission goal, because then it becomes clear for what purpose the language was build… and it becomes test-able if the lang serves that purpose well or not.
mission statements of languages:
- write fast small programs without gui that do one thing but do it well (tools for operating systems (GNU Linux command line tools))
- write operating systems
- write other languages
- write websites that “can do stuff” (interactive like wordpress-cms or webshop)
- write Business applications
- write games
- almost as fast as C but more secure
- OS administration: automate OS stuff like (“rsync this to that; then poweroff;”)
- make scripts that combine binary programs to realize new use-cases
- not exactly a programming language but yes, a very clever use can even write TETRIS IN IT! (holy crap)
- be the better Perl X-D
dev-philosophy: humans make mistakes – only god writes perfect software – and nobody is god – nobody wants to be nobody.
so mankind needs a lot of error-correction methods and systems in place for things to not fall apart (and users complaining that it fell apart)
the guts are:
- have a list of (in the best case automatic) testable cases that the software should be able to perform in v1 and v2 and v3 and what is nice to have but can come much later
- test them before every release
- new to a language?
- run tech-test “makeable” tests if the language can actually handle the tasks (like modifying 1 million database entries… or does it stall? timeout?)
- alone or in teams?
imho while Linus Torvalds considers anything but c “bullshit”, if a software works or not, probably depends on more factors ( a lot of languages are written in c, so to understand those languages (look under the hood (of Open Source) in the detail, knowledge of c is still needed).
why is this approach not taken by other languages?
have a meta-language that then compiles to Java, PHP, C, C# or what the user wants. ( https://www.sparxsystems.com/ this expensive tool for Unified Modeling Language called Enterprise Architect. can compile diagrams to many languages)
in the end the idea is:
- algorithm “meta-circ”: “how to draw a circle” is designed and tested in many many cases and worked (upload it with Open Source licence to a central server for all users of mankind to use)
- algorithm “meta-circ”: then can be compiled to all languages that can actually draw circles (support the feature “graphical output”, c will have to draw in ascii, that’s fine 🙂
- advantage of this approach:
- never ever again will have brain-power-and-time go to the task of “how to draw a circle” (unless there is something wrong with the algorithm “meta-circ”) so this problem can be accepted as “solved forever” “does not have to be re-done from scratch (even that is fun) whenever something changes” (new language)
ok actually it is, C is basically a meta-language (translates into) Assembler.
Almost nobody develops software in assembler directly, because it is so humane-brain-incompatible language, so C is the “meta” language that compiles into Assembler.
If another meta-langauge is added it would look like this: meta-language -compiles-to-> C -compiles-to-> Assembler
the problem with this approach is that a lot of software (with errors) is involved and unless all errors are found in all layers the product might be a unusable binary. (crashes… behaves weird in an undebuggable way… what is known from C++ an Win95 X-D)
so what is needed (AGAIN)
- a set of automatic run test-tech-cases:
- “is output of compiler X good (stable, working) in case A, yes?, good, proceed
- “is output of compiler X good (stable, working) in case B, yes?, good, proceed
- now the internet exists, this means the users of a language and the developers of a language can cooperate in way closer manner
- the user X at the other side of the world is testing a never-before case X, it fails… -> immediately contact the mothership to report the testcase… if the developers of the language fixed the error -> a message is send to “change.log” and also to user X “please update and recompile, should work now”