sabato 18 luglio 2015

The most powerfull programming language

Paul Graham, in un post del 2001 che ho riletto recentemente, parla di potenza dei linguaggi di programmazione.
Beating the Average è il titolo del post e l'intero articolo, pur a distanza di anni e pur con i necessari distinguo, è tutt'ora molto interessante ed istruttivo
Vi invito quindi a leggerlo, con un occhio in particolare al "Blub Paradox"

Mi ha divertito e fatto riflettere in particolare una piccola nota finale, che riporto:

All languages are equally powerful in the sense of being Turing equivalent, but that's not the sense of the word programmers care about. (No one wants to program a Turing machine.) The kind of power programmers care about may not be formally definable, but one way to explain it would be to say that it refers to features you could only get in the less powerful language by writing an interpreter for the more powerful language in it. If language A has an operator for removing spaces from strings and language B doesn't, that probably doesn't make A more powerful, because you can probably write a subroutine to do it in B. But if A supports, say, recursion, and B doesn't, that's not likely to be something you can fix by writing library functions.

Beh, mi sembra un criterio interessante ed efficace per misurare la "potenza" di un linguaggio

... ovviamente c'è un prior art: la "Greenspun Tenth Rule"

Che conferma, se ancora ce ne fosse bisogno, che l'intero post è fortemente lisp-biased :-)

Mi propongo (e, se volete, propongo anche a voi) un piccolo "esercizio".
Nel mio linguaggio preferito quali sono le funzionalità per cui è necessario, o sarebbe necessario, un piccolo sotto interprete?

Il primo caso che viene in mente sono i template in C++.
Questa apparentemente piccola funzionalità ha introdotto un intera nuova branca di programmazione in C++: il template metaprogramming.
E questo ha radicalmente cambiato la storia e l'evoluzione del C++.

Per inciso, l'interprete dei template in C++ implementa sostanzialmente un linguaggio funzionale.
Infatti per capirne bene la logica ed entrare nella mentalità consigliano di partire studiando Haskell.
... beh, non siamo finiti poi tanto lontano dalla "decima regola", giusto? ;-)
Posta un commento

Google+ Followers