Как думаете, какой язык поддерживает сразу
- First-class функции, лямбды и замыкания;
- параметризованные типы;
- хвостовые вызовы;
- array comprehensions;
- ООП с классами и интерфейсами;
- ООП на основе прототипов;
- мультиметоды;
- coroutines (оператор yield);
- структурные и номинальные подтипы;
- перегрузку операторов;
- Nullable/Non nullable аттрибуты для всех типов.
Ну и по мелочи: for-each, array slicing а-ля питон, регулярные выражения, открытые пространства имен и пр.
Однако ж это все ожидается в чудесном новом Javascript ECMAScript 4!
Еще одна из самых интересных возможностей в четвертой версии — опциональная статическая проверка типов. Это должно упростить написание сложных систем (засчет строго описанных интерфейсов), и помочь [jit] компиляторам иногда генерировать более эффективный код. Опциональные статические типы, похоже, становятся модными: в Python 3000 тоже не так давно добавили что-то похожее.
Четвертая версия пока получается довольно пестрой — появилась куча новых механизмов и языковых конструкций (см. выше), а совместимость с предыдущей версией надо, по возможности, сохранить — поэтому синтаксис местами получился довольно странный: скажем, [int] это массив целых чисел, а [int, string] — это уже кортеж из целого и строки.
Еще из забавных вещей — явная поддержка структурных типов. В частности, с помощью специального оператора like можно задать переменной структурный тип (то есть ей можно присвоить только объект, обладающий набором заданных свойств):
> var foo : like {x : int, y : int};
А переменная, объявленная с ключевым словом wrap автоматически дополняет хранимый в ней объект нужными свойствами:
var bar : wrap foo { x : int, y : int} = {x : 10, y : 20}.
Может и не революционная фича, конечно, но выглядит крайне интересно.
В ECMAScript 4 обещают также обязательную оптимизацию хвостовых вызовов. В Python 3000 их точно не будет, с руби ситуация туманна —что делает ES4 лучшим выбором в качестве платформы для компиляторов с функциональных языков. В общем-то уже сейчас есть компиляторы, как минимум, OCaml, SML и Haskell, генерирующие код на ECMASCript 3.
Собственно мощь и текущей-то версии js во многом недооценена. Кстати, только я не знал, что автор один из авторов первой версии Javascript — Гай Стил мл., а в качестве основных источников вдохновения при разработке Javascript 3 авторы называют языки Scheme и Self?
Новый Javascript явно претендует на что-то большее. Если он действительно будет "принят на вооружение" — определенно можно ожидать появления изрядного количества серверных приложений и фреймворков на js. Во всяком случае, язык получился явно не слабее питона и руби — хотя, конечно, вряд ли средства интеграции с кодом на C и C++ будут тут столь же развиты, ниша у языка все-таки другая.
Ссылки:
- Proposed ECMAScript 4th Edition – Language Overview [PDF]
- Официальный сайт www.ecmascript.org
- Прототип интерпретатора (написан он, кстати, на SML)
7 comments:
Там type inference нет, а это очень важно.
Может, и нет. Но жабоскрипт явно претендует на то, чтобы стать совсем нормальным языком. До мощи Лиспа ему осталось не так много.
Сильно. Большое спасибо, обзор то что надо :)
Автор JS - Brendan Eich. Тов. Steele был редактором спецификации, которая писалась по уже в общем-то готовому языку.
@Stepan: Там type inference нет
А этим-то пусть занимается транслятор с функционального языка в Жабоскрипт;)
PS Сорри за запоздалый коммент, только сейчас на этот пост набрел, но тема для меня актуальная.
Знаем мы вас, Дмитрий, вас хлебом не корми -- дай компиляторы хаскеля пописать ;)
Но я к тому, что жабаскрипт 4 и сам по себе весьма хорош.
Насчет Стила поправил -- "одним из авторов" его наверное можно таки назвать.
Post a Comment