Pull to refresh

Comments 14

Дефолтные значения аргументов и многострочные литералы — это, бесспорно, здорово, но пока синтаксис не подсвечивается — лично у меня интерес будет больше академический.

var chars = Array.prototype.forEach.call ('0123456789abcdef', lambda arg.charCodeAt (0));

Я бы предпочел какую-нибудь изящную синтаксическую конструкцию для .bind и списочные выражения.
Добавить подсветку ключевых слов или многострочных строк в тот же Sublime Text несложно, но до полноценной подсветки (список аргументов, например) это, конечно, не дотягивает.

Синтаксическая конструкция для .bind — отличная идея, надо будет только сперва придумать, как она должна выглядеть.

А насчёт списочных выражений, можно было бы сделать, например, так:

var chars = [ '0123456789abcdef' to lambda arg.charCodeAt (0) ]

Что разворачивалось бы во что-то вроде этого:

(function (array, fn){
	var result = [], temp; 
	for (var i = 0; i < array.length; i ++){
		temp = fn (array [i]);
		if (temp !== undefined)
			result.push (temp);
	}
})('0123456789abcdef', function (arg){ return arg.charCodeAt (0) })


Стоит ли делать?
Синтаксическая конструкция для .bind — отличная идея, надо будет только сперва придумать, как она должна выглядеть.

Не знаю, посмотрите на Haskell.

var chars = [ '0123456789abcdef' to lambda arg.charCodeAt (0) ]

Имхо, скорее, так:
[lambda arg.toString().charCodeAt(0) for each i in '0123456789abcdef']
А просто
[i.toString().charCodeAt(0) for i in '0123456789abcdef']
не выйдет?

Получится почти python.
Да, он, конечно, получше, но есть у него один фатальный недостаток...

Мне полюбился обычный синтаксис JavaScript и, к тому же, не хотелось переписывать уже имеющийся проект. Хотя, конечно, в результате я потратил куда больше времени. Зато инвайт получил. :)
Ну а смысл тогда этих lamda function, если есть, к примеру, arrow function? И аргументы функций по умолчанию тоже есть. Нативный JS сильно шагнул за последнее время, вот только не все движки эти новшества поддерживают. Так зачем же городить новый синтаксис, если вам нравится обычный JS?
Тогда посмотрите Typescript, он ES6-совместим, да собственно и сам ES6 не за горами (а в ноде с 0.11 с флагом --harmony — уже).

Хотя опыт написания своего препроцессора со своей версией блекджека в любом случае останется полезным :)
Флаг --harmony мало что даёт, на данный момент лучшая нативная поддержка будущего стандарта (причём без всяких флагов) у ФФ.
А про typescript могу сказать, что его использование, как транслятора ECMAScript6 (по личному опыту) весьма сомнительно, т.к. всё равно придётся юзать генерики, интерфейсы и прочие специфичные штуки, а потом замучаемся их удалять, так что если нужна поддержка ECMAScript 6, то лучше сразу взять транслятор именно его.
А PEG грамматику стандартного javascript вы сами писали или где-то взяли?
Нет, взял отсюда. Сложно было бы написать самому — я и понятия не имел о том, что за зверь такой эта PEG.
Зачем придумывать свой синтаксис если есть ECMAScript 6. Для себя на коленке накатал github.com/kobezzza/NeJS (чужие трансляторы юзал, но бесило, что () => заменяются на .bind и многие трансляторы не позволяют сохранить комментарии).
Sign up to leave a comment.

Articles