Да и нет.
Есть несколько различных аспектов синтаксиса.
- читабельность
- экспрессивность
- parsability
Читаемость уже упоминалась.
Экспрессивность - интересный случай. Я собираюсь использовать передачу функций в качестве примера, потому что это своего рода точка перегиба семантической / синтаксической боли.
Давайте возьмем C ++ для примера. Я могу создать функцию первого порядка после этого способа:
class funcClass
{
int operator()(int);
}
funcClass fun;
void run_func(funcClass fun)
{
fun();
}
Эта идиома обычно используется в Степановских элементах программирования .
С другой стороны, в Common Lisp я могу имитировать что-то вроде этого :
(defun myfunc() )
(defun run_func(fun)
(fun))
Или в Perl -
sub myfunc
{
}
sub run_func
{
my $func = shift;
$func->(); #syntax may be a little off.
}
Или в Python -
def myfunc():
pass
def run_func(f):
f()
Все они, по сути, имеют одно и то же семантическое содержание, хотя пример C ++ содержит метаданные определенного типа. На каком языке лучше всего выражена идея передачи функции высшего порядка? Common Lisp едва ли делает синтаксическую вариацию. C ++ требует, чтобы класс был создан только для «переноса» функции. Perl довольно прост в достижении некоторого уровня дифференциации. Так же как и Python.
Какой подход лучше всего подходит для проблемной области? Какой подход лучше всего может выразить мысли в вашей голове с наименьшим «несоответствием импеданса»?
По моему мнению, разборчивость имеет большое значение. В частности, я имею в виду способность среды IDE анализировать и разбивать язык без ошибок. Переформатирование полезно. Языки с разделителями-токенами обычно хорошо разбираются - ruby / c / pascal и т. Д.
Однако подумайте - основные системы всех видов были созданы на каждом серьезном языке для решения реальных проблем. Хотя синтаксис является барьером для выражения некоторых вещей, он является обходным барьером. Эквивалентность Тьюринга и все такое.