I feel proponents of any programming language put a lot of spin around what isolated aspects it is good for, but fail to illustrate what a programmer in even one target domain gains from using it.
Are there programming language implementations unlike what is described above, that you feel back up their marketing?
So, I enjoy creating front ends to automatically generate cadd drawings for me. It’s like a lucrative hobby. I started doing it in the early 2000’s using Visual Basic 3, Microsoft Access and AutoLISP. Not cartoons, mind you. Anyone can distribute a generic drawing with notes. That’s not what I’m talking about. A front end so that anyone without cadd knowledge can create a fully vectorized 2D drawing made in seconds and accurate to eight decimal places. I have hundreds of front ends that I use when I need to. I can surely feed it bad data, but it’s faster and never forgets to carry the two. It’s such low-technology, any version of Autocad will do. I still use my version 2010 at home, but they all work with version 2023.
Here is part of a video showing one of the front ends in action (though the audio had to be removed). This is a custom front end in Visual Studio 2007 (with my ultra nerdy paint dotnet/autocad graphics because they refused to give me photoshop) that accepts user inputs for a finished drawing of a self-supported brick dome. The calculations for these domes, if doing manually, takes about an hour per course and domes would tend to average about twenty courses. This required three days worth of math you had to write out for your checker, and then one more to actually make the drawing and bills of material. Checking took another day in most cases, so essentially a week to get a quote out. I changed that process to seconds.
In the video, you see the data entry for the dome geometry and skew line (the base the bricks rest upon) Then, the brick shapes permitted to be used are defined by their chords. In this case, it was a 9x4.5x3 series set of up to five arches and wedges in each of two keys. When used as intended, they create a 9" thick spherical dome. It calculates the best fitting key (4.5"-4.5" or 4.5"-4") and then calculates a three piece combination of arches (3" on the outside tapering to up to 2" on the outside) and wedges (also 3" on the outside tapering but up to 2" on the inside) in a ratio that best forces the ring to close. It then iterates over the courses from a specified starting end until it completes naturally or the geometry becomes a mismatch for the bricks turning potential at a certain spherical radius.
It then creates two reports, a count report and a math report (all engineering documents required checking at the time.). BUT (here’s the nerd coolness) it remembers ALL that glorious data it did during the calculations, and builds a custom lisp file with it, which can then be run on an empty drawing to generate the full vector content, as you notice, pretty quickly. To fully check it, I had it generate a top, front and bottom view as well as the brick count in a handy dandy lil chart. It overwhelms the lil laptop I had to use as it draws EVERYTHING except dimensions (though I would eventually nail that down too). I perform the generation process twice, slightly changing the skew to achieve a different combination.
As a note, the drawing portion became the actual check. You will clearly tell if there is a problem with tilts and closure by just looking at the finished cadd vectors since they do capture the bricks real world symmetrical posture. The math report itself generates a series of checks to ensure the count is appropriate. Volume check, four-point circumference check, key checks, anti-straight checks, negative quantities. Lot’s of crazy things happen in the formula when the bricks aren’t able to find a valid solution to the geometry.
So, I think I make a valid argument that when used properly, AutoLISP is possibly one the best tools an Autocad designer can employ, and it has the potential to outperform any modern cadd program that’s packed with features you’re paying for but never using. In the time it took you to read this, CREO and Inventor are likely still booting up, and Solidworks is having license issues again.
What “spin” are you talking about?
Who is marketing C++?
Big C. That’s why it’s got the ++.
I don’t fully understand the question, to be honest, but would a purpose-built language like ActionScript qualify? It served only one purpose, and (debatably - AS3 was alright) served it well.
Otherwise, every general purpose language attempts to serve all its uses at once, which means they rarely specialize heavily into one particular domain. For example, while Rust’s stdlib devs could build a HTTP library, many Rust users don’t need one, good community-maintained libraries exist, and the stdlib devs don’t want to sacrifice stability with something that requires as much churn as a HTTP library needs. It serves their goal of stability really well, but requires extra steps from users who need that.
Of course, Python. Just look at the TIOBE language popularity index. The top languages all have some rational for use. Not so popular have less reasons to use or just narrower application range. See https://www.tiobe.com/tiobe-index/ .
Python is easy to learn. C and C++ when Python is too slow. I often find Python slow.
Probably rust for the later these days
Python is slow often 1% of the speed of a fully parallelized and vectorized C app compiled specifically for your architecture. There are ways to improve speed like libraries, PyPy, numba, etc of course but often theٌse are application specific and do not always give the performance you might think. I love Python, but for speed it is not the best.
Interesting. What is useful in Python other than the effort put into the bindings to fast libraries? I thought alternatives like Go, Julia and Ruby are appreciated over Python for programming utility.
There are many easy-to-learn languages, and others actually have useful software development ideas (immutable by default, for example). I understand if expectations are lower, though, from the language talk, and if any language with the required libraries is fine.
Inane features a language happens to have, like object-orientation, are marketed that are not backed up by any argument or example beyond homework-level code.
What language features do users say helped them? Existence of libraries didn’t make C a good language, and providing a binding to those libraries does not make Python a good language. Hard work must go into bindings, whether for Python or for Ruby or for Lua, but Ruby and Lua make convincing cases for themselves.
What language features do users say helped them? Existence of libraries didn’t make C a good language
Hm, except in the way that being able to call into library functions “relatively easily” from the base language was a good way for others to create a bajillion handy libraries.
And once you’ve got those available to extend your language in any direction you want, you’re well on your way to ubiquitousness.
I used Lua as a scripting language directly tied to C. It is useful for allowing scripts to interact directly with compiled code. The compiled code is still the focus, but the scripts allow changes without a recompile.
I used to like C#, but dotnet didn’t become as portable as I hoped it would.
I use C (embedded), C++ (everything), Python (data manipulation), PowerShell (pipelines) and bash (pipelines).
I hope you can find a non-homework job to use whatever skillset you are developing.
Dunno. If it fits the purpose and you get a lot of libraries and tooling around your specific domain… Why not make use of it? Python is easy to learn and has a lot of nice stuff for data science. Or R for statistics… Considering the absence of other complete frameworks when doing embedded programming… wouldn’t you just use C++?
Maybe I don’t the question. Programming languages are never perfect. Nor good for one specific and confined task… They all grew, picked up quirks. Or inherited burdens. People are trying to do 5 million different things with them at the same time… I think I’m more concerned with their usefulness and actual application, than their marketing material.
And some of the stuff they did in the 50s, 70s, 80s and 90s, when these programming languages were designed, is just a bit weird by today’s standards.
Embedded is probably C.
You are right Python and C++ have a huge amount of collateral available going for them. But is the utility of their language features backed up by any examples or explanations? Rigid object-orientedness as seen in Python, C++, Java, modern Javascript is not conducive to good software in practice, and we are just muddling along.
Object-oriented is a design pattern that the language can facilitate. Just because a language supports “is a” doesn’t mean “has a” does not exist. There are a lot of design patterns. Use the best language and design patterns for your team.
Counterexamples.
A simple language like Lua, whose advantages in actually building software rather than homework-level coding are well-documented, and borne out by well-received web servers, editor extensions, network software like Snabb (and Adobe something).
A platform language like Erlang that is not just simple to code in, but also has a mighty capable runtime. Demonstrating the value of that combination are the impressive networking and storage apps shipped with the platform, apart from actual software wins in the wild like ejabberd, Pleroma/Akkoma, etc.
An idea like Objective Smalltalk, which tackles software architecture head-on. https://objective.st/
Ditto for Smalltalk and Lisp.
Squeak Smalltalk and its evolutions, Pharo and Cuis, get talked up for being easy to program and re-program, but the closest to being a useful app is recent: the DrGeo rewrite. Others like Glamorous Toolkit and various proprietary developments with Cuis don’t lead to any useful outcome.
Lisp with its macrology is deified, but its most used variant, Elisp in Emacs, is confounding in terms of comprehending the runtime behaviour of features and in the debugging of what doesn’t work. Guile Scheme has so much written about it, but Guix is just about its only success.
Just as an example, neither the C++ documentation nor its sagely bloggers have ever shown why it is a good fit for, say, systems programming. A really neat way of handling bit-level data is actually in Erlang’s bit syntax.
Separately, I spluttered when I realized that Boost includes 2 statechart libraries which proclaim the approach is widely useful, but nothing else in Boost uses it - not asio or its ilk, not the parser libraries, not the graph library.
Just as an example, neither the C++ documentation nor its sagely bloggers have ever shown why it is a good fit for, say, systems programming. A really neat way of handling bit-level data is actually in Erlang’s bit syntax.
Erlang requires a runtime environment, which disqualifies it for situations where you don’t have a filesystem to load the runtime from, like developing a kernel or for microcontrollers.
Of the popular languages, your choices are virtually just C, C++ and Rust for that.More towards your general question: Not needing a runtime environment also means you can use C, C++ and Rust for cross-language libraries. For example, SQLite and OpenSSL have just been implemented once in C, and then you simply have a thin wrapper for Java, Python etc…
If you are looking to build a library that can be used by as many devs as possible, that’s a selling point which is hard to ignore.Boost is too monolithic to be useful. I am not surprised it has redundant functionality. Get the great parts of Boost like asio separately.



