Interesting Programming Languages
btbytes.com
btbytes.com
APL (Dyalog), J, Prolog, Rebol (Red is on the list), PicoLisp, Racket, Factor, 8th (Reva was mentioned and that was the creator's prior project), and Haskell.
Maybe most of the above are too mainstream for the list.
At the least, I've installed and played with them all at one time.
Great list, thanks!
I like PicoLisp and wish it was more popular. There are some decent resources on it and the mailing list is pretty active.
I kinda disagree with the primary author's "need for speed" article on why performance doesn't matter anymore. I think there is definitely the majority of common uses in the business where he is right, but we're getting to a point (think data science) where faster is better and necessary. Using C++ is still too painful for most (pointers anyone), so I'm betting languages like Nim, Rust, and D will continue to grow in popularity to some degree.
I've read a little on Picat.
The above are all pretty cool though and each (as Larry Wall would put it) are the perfect examples of modernism. Each one takes a single idea to a fault.
Lisp => lists, Haskell => functions, Scheme => lists and recursion, Prolog => logic, Smalltalk => objects, Forth => concatenative and extreme minimalism, and APL => arrays.
Most post-modern languages combine many of the above in more practical and less elegant ways. Python is OO at heart, but can be written in a functional style, and can do array programming with Numpy.
So there is value (I think) to looking back at those languages from an educational point of view even if you're not using them in your personal projects or production.
The more novel ones that the author posted are probably also educational in their own way, but probably don't ram just one idea home. I think we're mostly past that now as Wall has stated. Perl6 might not run very fast or be very mature or popular, but it is a very interesting language that does a good job showing the post modern system. It pulls what the language designers felt were the best features from all the past languages (Perl5, Python, APL, Haskell, Smalltalk, Awk, Java, C#...etc).
Perl is an interesting language (and I defended Perl's merits in a language forum within the last year [1]). But people who've mostly done Perl for a long time might want to question cute sayings about other languages, and discover that, today, for example, the evolution of Scheme (especially Racket) has different ways of doing those best features from other languages that you list for Perl6.
[1] https://www.mail-archive.com/racket-users@googlegroups.com/m...
Take it with a grain of salt of course. Smalltalk is amazing, but the way you store code in an image isn't for s everyone.
I don't understand your last paragraph...can you please elaborate? What cute sayings are you referring to?
I agree about Prolog being logic-only. (Though it was once included as the query language of the complex data model of a commercial CAD-like system I worked on.)
Now Scheme (not lists and recursion to a fault) and other languages have logic programming as library or language extension: https://en.wikipedia.org/wiki/MiniKanren
Incidentally, I don't want to sound dismissmive Prolog. It's worth learning a bit, such as with now-free books like: https://mitpress.mit.edu/books/art-prolog
* I already use nim and I'm very productive in it. * Would like to use Zig for "system programming" when and if something like Nim (and D) are inadequate. * Red because its a REBOL and it can be a mind blowing experience to read some clever REBOL/Red code.
While an interesting language may be obscure, an obscure language is not necessarily interesting. In many cases, being relatively well known is a benefit simply because it offers more exposure to new ideas.
I have found languages such as Forth, Racket, and Smalltalk far more valuable primarily because they are sufficiently accessible to be practical learning tools.
I'd agree with Haskell and Prolog, and probably people could guess based on the "Lisp" part of PicoLisp, but having experience with Rebol - no one I've mentioned it to has heard of it. I don't think it's mainstream at all.
What makes Icon interesting is that its functions ("procedures" in Icon terminology) are essentially generators in that they can "fail" (prune, produce no [further] results), or "suspend" results as many times as desired. "Failure" drives backtracking. So it's Prolog-like, but with Algol-family syntax.
Not surprising then that I find jq interesting too: it has pervasive generators and backtracking, just like Icon, though with a fundamentally different syntax, and very limited type system.
So I rolled my own, (https://wrapl.github.io), combining Icon's goal directed evaluation with modules, classes, and lots of C library bindings. Unfortunately I wrote a lot of it in 32 bit x86 assembly, so it's due a proper rewrite but I still use it for prototyping and text / data processing today.
Here's a small example of a smaller ETL script a wrote a while ago for stats collection over scm repos: https://gist.github.com/turbo/36e87947a56cfaacec9d0356b3e521...
As you can see it loads data from vars, fed by other jq scripts. Don't try to put everything in one script. Each script should basically just reduce and normalize.
I "like" it the same way that I "like" writing XSLs: I thank my lucky stars that jq and XSLT/XPath exist, but if I didn't have to deal with JSON/XML I wouldn't use jq/XSLT. That reasoning seems circular, but at least jq is significantly more general than XSLT. Though to be fair I like jq a lot better than I like XSLT.
All functional languages tend to take some getting used to, at least for me. Now that I have a mental model of jq, I do actually enjoy using it.
The terse syntax is a double-edged sword.
As opposed to what list? An exhaustive one? The quality he asks of the languages in the list is "interesting", which is by definition rather arbitrary itself.
This is a good (albeit exhaustive) list too: https://en.wikipedia.org/wiki/List_of_programming_languages_...
But such a list would be a lot more decisive.
Ponylang is listed as "--" instead of "concurrency as a primitive type".
I'm not sure I can trust anything on the list, so it doesn't motivate me to investigate further. YMMV
I do care for a set of links to languages I've not seen yet, where I can click and check their websites -- and this provides it.
My open question is whether in the coming 2-3 years there will be a significant paradigm shift in programming languages, or not.
My bet is that a combination of new, purpose-specific languages, together with "real" AI, will have a chance to have a big impact.
So I went looking for Pharo, which brings fascinating introspective tooling to Smalltalk, only to find that the author is biased towards 'any' high level features interoperating with C-like languages. And my list of interesting languages would look the same way, nobody would be able to see why I didn't put 'their' language on there.
Which is why I got excited for the awesome list thing. One person can't curate everything. You need a community of people invested in differentiating software offerings to the point where anybody can look at it and see what makes it interesting.
Well, “interesting” is subjective so it always is going to incorporate someone's opinion, but it doesn't have to be the author’s bias, e.g., if it was based, say, on surveying a wide and representative pool of developers.
I think many machine language workloads boil down to searching for signal amongst noise. A human can then go look at the anomalies.
I wouldn't want a survey of a bunch of coders barely interested in curation. I want the guys who have been dealing with these things their entire careers and really care about the differences.
Not quite fully-automated discovery, but with a minimum of human fuss and a maximum of deliverable rational information.
My favorite thing is an impractically novel - maybe even intentionally useless - programming language. A way to describe a space of things that's truly alien; not even necessarily identifiable as a "programming language" aside from being interpretable by machines.
I found it odd to see this language up on the list, and not Elm.
Are there any other languages which compile to OpenCL/CUDA? There are so many libraries built on them, but I haven't seen so many languages compiling to them.
Too many details: https://web.archive.org/web/20180405152943/https://computera...
> Kit is a “Compiles-to-C” language. It is strong, and statically typed with many modern language features like type inference, algebraic data types, pattern matching, generics, implicits, while still having low level features like raw pointers, and manual memory management. Kit is written in Haskell. notes.
I love this unabashed reference to the original use of the term "lens". I love Haskell, but I'm embarrassed by its later, different use of the term "lens".
Isn't that called an isomorphism?
I expect a few 10s of TB ram to be required for a specific dataset, which practically rules out any shared-memory approach. Clusters should be better above a few hundred GB anyway, maybe less depending on network bandwidth vs. RAM needs.
Maybe Ragel deserves a mention: http://www.colm.net/open-source/ragel/
As people suggest below, it can be improved by adding more languages.
Has no cons or let. OTOH: has defmacro.
Edit:typo