Conceptual languages
This is a short note on what I’m thinking about programming languages.
Briefly, I reckon some languages as being conceptual. In a conceptual language, every part of it obeys some global idea. This idea forms design of a language, the way it behaves and develops. If affects libraries, community and ecosystem.
Take Lisp, for example. The idea is, when we store our code as data, it brings incredible possibilities to process code as data or turn the data into code. No other language may offer something like that, only Lisp does.
In Erlang, every task is solved within a cascade of lightweight processes named actors. Two actors may communicate directly being run on different servers. Actors do not create Unix threads. They are managed by OTP rather than operation system.
With Haskell, you’ve got quite strong and flexible type system. Types are the most important part of a typical Haskell program. Once it compiles, it will work for sure.
Clojure, a modern Lisp dialect, provides immutable data structures and powerful abstractions for concurrency.
Respectively, non-conceptual languages do not have such a global approach. They try to implement as many features as possible to satisfy every domain: OOP, anonymous functions (lambdas), lazy evaluation, etc. As a result, we’ve got everything but nothing: each part of such a language is not as powerful as its analogies form those ones I mentioned above.
Take Python, for example. Although it has such basic functional blocks as map, reduce and lambdas, programming with it in a functional way would be a mess.
Every part of classical Javascript is just ugly.
Java, a language with static type system, allows you to pass Null instead of any object and end up with NPE exception.
Although conceptual languages are not perfect, they seem to be easier for me to learn because they have some common rules that could not be broken. Say, in Haskell, you just do not have plain Null value. In Clojure, you cannot modify a dictionary, and so on.
They cannot be substituted with other languages. Really, how can you substitute Lisp or Erlang? There aren’t any alternatives for them.
I believe, the future is about conceptual languages. To develop AI or distributed systems, we need something more sensible than yet another language with classes and syntactic sugar.
I’m not sure it could be Lisp, but something that borrows most of its features.
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter
LeusMaximus, 3rd Aug 2017, link
Hi, Ivan. Did you have to deal with OCaml ? What do you think about it?
Lens, 3rd Aug 2017, link
In terms of "conceptual languages" is Scala conceptual? Many core concepts are implemented the same like in Huskell (currying, pattern-matching), HOF, strict types, immutable structures, type inference, it has interop. with Java like Clojure, strongly oriented to expressions. But Scala also is such a mix of two worlds - OOP and FP, maybe it attempts to be a "silver bullet", if so - it's bad, i think. If not, maybe, it's not so bad...Scala got advantages of both worlds...What's your thoughts?
P.S. Thank's for your advice about ABEbooks ;). I just got notification that my Clojure book arrived to postoffice.
Ivan Grishaev, 4th Aug 2017, link , parent
Hi, I only read a couple of tutorials, but have not used it in production nor in hobby projects. It reminds me a lightweight version of Haskell. I think it worths learning it if you have interest.
Ivan Grishaev, 4th Aug 2017, link , parent
Hi, I tried Scala a bit and even read a book "Atomic Scala", here is a short review in Russian: http://grishaev.me/atomic-s...
For me, Scala seems to be too complicated and aimed at too many goals to achieve. There is no a single idea that you can fit in one sentence. I'm not a fan of idea "take the best from two words", because too oftenly you end up with "the worst from two worlds".