Fri Oct 05, 2018 5:23 pm
Perhaps the less obvious answer is to select the language that gets your job done in the most simple and efficient manner. Use the right tool for the job as it were.
Of course we can debate what we mean by "simple" and "efficient". Perhaps quick and easy development time is important to you. Perhaps your task requires the utmost in run time performance. Perhaps support on many platforms is important to you, or not. You decide.
And of course it's hard to make such evaluation and selection unless one has already learned and tried a variety of languages already.
My current selections look like this:
C/C++ for anything that needs to be small, have a simple run time and/or achieve maximal run time performance. C/C++ are standardized, have good support at the the ultimate in cross-platform usability. The price for all that is development complexity.
Javascript. For anything in the browser of course, but also running under node.js for anything that is a web server, deals with networking of any kind, or generally has to juggle lots of events from multiple sources. JS is well standardized, has excellent support and is usable across many platforms including micro-controllers. Performance is very good as well.
Scala. Normally I would not be interested in some new fangled language that relies on the Java virtual machine but in this case I make an exception because Scala and the SpinalHDL library make an excellent way to design logic for FPGA. All the type checking, ease of development and luxury of a high level language but producing as tight a Verilog code as one can create by hand.
Python might be of use if I ever need to do a lot of work with big integers, which it supports naturally. Or perhaps if I needed to make use of some functionality that is available as a Python module but not elsewhere. So far this has not happened.
Most other languages I got to know well are seriously obsolete. Algol, Ada, Coral, PLM, BASIC, Lucol. Lost to history.
I strive to use languages that are properly standardized and in common use. Not dependent on a single vendor. Top marks for good cross-platform support, you never know when you need a change of OS or hardware.
Memory in C++ is a leaky abstraction .