Sì e no.
Esistono un paio di aspetti diversi della sintassi.
- leggibilità
- espressività
- parsability
La leggibilità è già stata menzionata.
L'espressività è un caso interessante. Userò il passaggio di funzioni come esempio, perché è una specie di punto di flesso dolore semantico / sintattico.
Prendiamo ad esempio C ++. Posso creare una funzione di primo ordine dopo questa moda:
class funcClass
{
int operator()(int);
}
funcClass fun;
void run_func(funcClass fun)
{
fun();
}
Questo particolare linguaggio è comunemente usato negli Elementi di programmazione di Stepanov .
D'altra parte, posso imitare in Common Lisp con qualcosa come questo :
(defun myfunc() )
(defun run_func(fun)
(fun))
Oppure, in Perl -
sub myfunc
{
}
sub run_func
{
my $func = shift;
$func->(); #syntax may be a little off.
}
Oppure, in Python -
def myfunc():
pass
def run_func(f):
f()
Tutti questi hanno - essenzialmente - lo stesso contenuto semantico, sebbene l'esempio C ++ abbia dei metadati di tipo. Quale lingua esprime al meglio l'idea di passare al meglio una funzione di ordine superiore? Il Lisp comune fa appena una variazione sintattica. Il C ++ richiede che venga creata una classe solo per "trasportare" la funzione. Perl è piuttosto semplice nel fare un certo livello di differenziazione. Lo stesso vale per Python.
Quale approccio si adatta meglio al dominio problematico? Quale approccio può meglio esprimere i pensieri nella tua testa con il minimo "disadattamento di impedenza"?
Nella mia mente, la paragonabilità è un grosso problema. In particolare, mi riferisco alla capacità dell'IDE di analizzare e tagliare la lingua senza fare errori. La riformattazione è utile. Le lingue delimitate da token tendono ad analizzare bene - ruby / c / pascal, ecc.
Considera però: i principali sistemi di ogni genere sono stati creati con ogni linguaggio serio per risolvere i problemi del mondo reale. Sebbene la sintassi sia una barriera per esprimere alcune cose, è una barriera aggirabile. Equivalenza di Turing e tutto il resto.