Помимо функций первого класса и лексического анализа, что разделяет JavaScript с реализациями Scheme? - PullRequest
8 голосов
/ 12 марта 2011

Мне всегда было интересно, почему Дуглас Крокфорд сравнивает JavaScript со Схемой. Да, JS должен был быть разработчиком Scheme; но помимо поддержки функций первого класса и лексической области видимости (не работает), что общего у JS со Scheme, что делает его "Lisp in C's Clothing"?

Ответы [ 4 ]

6 голосов
/ 12 марта 2011

Одна вещь, которая должна быть высоко в этом списке, имеет REPL.Похоже на техническую специфику, особенно когда эти ответы обычно скрыты за некоторыми «инструментами разработчика», но это оказывает огромное влияние на язык.(Например, естественно иметь eval, когда есть ответ и т. Д.) Это в основном дает динамической оценке кода статус первого класса, что чрезвычайно полезно для чего-то вроде JS, и, вероятно, внесло гораздо больший вклад в егоуспех, чем первоклассные функции (которые действительно почти не использовались до нескольких лет назад).

6 голосов
/ 12 марта 2011

Еще одна вещь, которая приходит на ум, - это повсеместное использование единой вездесущей структуры данных по всему языку и библиотекам: списки минусов в случае со схемой, карты (называемые объектов ) в случае ECMAScript.

Кроме того, существует не только тот факт, что ECMAScript имеет первоклассные процедуры, но и то, что эти процедуры являются механизмом абстракции only . (Или точнее механизм инкапсуляции .)

5 голосов
/ 12 марта 2011

От макушки головы, плюс взгляд на Википедия :

  • Структура блока
  • Проверка во время выполнения
  • Eval
  • Нет (явного) шага компиляции
  • Маленький, но богатый stdlib
  • Общее пространство имен для процедур и переменных
0 голосов
/ 15 марта 2011

Ну, JavaScript не хватает гомо-звонность , и это одно из основных свойств диалектов Лисп.

...