Предложение по усовершенствованию JavaScript

топ 100 блогов lionet11.03.2013 Выдвигаю предложения по усовершенствованию синтаксиса языка JavaScript.

Для примера разберём такую простую конструкцию, как функция, генерирующая замыкания.

function foo(filter, pattern) {
    var f = function(list) { return filter(pattern, list); };
    return f;
};

Конечно, в JavaScript есть опциональные точки с запятыми. Их можно не ставить, если это не приведёт к синтаксическим проблемам. Поэтому предлагаю завершающие точки с запятыми из языка убрать, а в язык добавить правило, что если строка кончается и при этом на строке находится полностью завершённое выражение (то есть, все открывающие скобки уже закрыты), то считаем, что выражение действительно завершено. При этом точки с запятыми становятся не нужны:

function foo(filter, pattern) {
    var f = function(list) { return filter(pattern, list) }
    return f
}

Затем, предлагаю не писать function, это долго. И питоновская lambda — тоже не сахар. А ведь замыкания используются в JavaScript направо и налево! Для упрощения вместо function можно использовать какой-нибудь редко используемый символ. Например, бэкслеш — он используется в программах на JavaScript разве что только в строках и в регулярных выражениях, поэтому конфликтовать ни с чем не должен. В итоге имеем:

function foo(filter, pattern) {
    var f = \(list) { return filter(pattern, list) }
    return f
}

Затем предлагаю не писать return в конце функции. Пусть результат последнего выражения на последней строке функции автоматически возвращается из функции. Во многих языках это есть. Например, в Ruby (читается «руби», а не «раби», кстати). Пусть return используется только для раннего выхода из функции. Ведь это так удобно!

function foo(filter, pattern) {
    var f = \(list) { filter(pattern, list) }
    f
}

Ну и логично, что var f в этом примере больше не требуется:

function foo(filter, pattern) {
    \(list) { filter(pattern, list) }
}

Затем мы видим, что если функция использует один аргумент, то скобки смысла большого не имеют. Да и функции с несколькими аргументами могут обойтись без скобок. Чтобы не возникало обвинений, что в JavaScript скобок больше, чем в Лиспе, уберём их. Запятые тоже не нужны, кстати: всё, что идёт после названия функции, есть её аргументы:

function foo filter pattern {
    \list { filter pattern list }
}


Кстати, мы убрали function() при объявлении анонимного замыкания, но не убрали при объявлении глобальной функции foo. Исправим этот недостаток:

foo filter pattern {
    \list { filter pattern list }
}

Здесь нужно отметить, что вместо зашумляющих код скобок можно воспользоваться Питоньим подходом и внедрить двухмерный синтаксис. Всё, что имеет отступ от начала функции, является телом функции. Скобки поэтому можно не писать:


foo filter pattern
    \list { filter pattern list }

При этом мы видим расхождение в синтаксисе между обычной и анонимной функцией. Но если убрать скобки из анонимной, мы получим синтаксический коллапс — парсер, встретив бэкслэш ("лямбда"-символ) не будет знать, сколько аргументов в анонимной функции, а что является телом. В итоге сделаем так, чтобы был какой-то разделитель. И вставим его в оба места. Например, «=»:

foo filter pattern =
    \list = filter pattern list

Таким образом, в первом приближении мы получим Haskell, с которым уже можно работать дальше.

Оставить комментарий

Архив записей в блогах:
Девочки, помогите советом.  Доче 10 месяцев, себорея, месяца в три корочка была незначительной, я ее аккуратненько после теплого масла вычесывала. Сейчас проделать то же самое не решаюсь: корка разрослась, страшно повредить нежную кожицу. В ...
В связи с присуждением Нобелевской премии по химии Воршелю и Левитту - ученым из Израиля, работающим в США, в Израиле в очередной раз заговорили про утечку мозгов (и это на общем фоне кампании в СМИ на тему "Все плохо и пора валить", как будто не везде сейчас плохо). А мне кажется, что ...
Я уже давно задумывался о покупке новой электросушилки, да все никак не мог выбрать. Долго заглядывался на ezidri, но жаба дико душила отдать двадцать слишним тысяч за желаемый комплект на 10 этажей. Покопавшись на форумах попались позитивные отзывы на отечественный клон ezidri ...
"...   В Калифорнии пытались построить скоростной монорельс. После 10 лет государственного бардака, судебных тяжб, перерасходов и бюрократических войн, штат сдался. Все что мы имеем это недостроенный виадук над Фресно - и ни метра рельсов. Где гиганты 60-х, выстроившие нашу ...
Расплачивалась, пытаясь не смотреть ей в глаза, своей кредитке. Она скорчила мне строгую рожу, норовила укусить за пальцы и шипела "Ну, бл...ть, только попроси еды купить, я тебе припомню...", но я ж кремень, что мне кредитнокарточный ропот и угрозы... Кстати, омлет был прекрасным!А подкре ...