Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   CoffeeScript vs ES6 (https://javascript.ru/forum/offtopic/58349-coffeescript-vs-es6.html)

kobezzza 28.09.2015 22:28

Цитата:

kobezzza, кофескрипт это просто синтаксис, сахар, и набор сниппетов. По сути можно написать кофи версию которая будет транслироваться в тайпскрипт 2 например.
Это всё понятно, но готового к продакшену (да и вообще) решения нет. Поэтому это всё асбтрактно. Я лучше буду писать проект, а не инструменты для написания проекта :)

ТОТ_САМЫЙ 28.09.2015 22:37

Цитата:

Сообщение от kobezzza
Я лучше буду писать проект, а не инструменты для написания проекта

А у меня стабильно 2-7 дней в месяц уделяется на апгрейд инструментов, на юишку, плагины на галп вот теперь еще писать начал и.т.п. скоро какой нить кофескрипт to es6 напишу) как минимум я не вижу ни одной причины не сделать красивый синтаксис для геттеров и сеттеров в кофескрипте. Хотя авторы говорят бла бла бла это технически невозможно мы должны знать имя каждого свойства. Можно добавить типы в кофескрипт. Если не задан то не задан, если задан то идет статическая проверка. Ну или даже динамическая проверка.

func = (name:String, parent:Module)->



compile to:

var _typeCkeck = function(Class, inst){
 if(!(inst instanceof Class)) {
    throw TypeError('бла бла бла')
 }
}

var func = function(name, parent){
  _typeCkeck(String, name);
  _typeCkeck(Module, parent);

}


Я просто не уверен что представляю как сделать статическую проверку типов при том что могут приходить новые данные по аяксу например, или что скрипт наш может взаимодействовать с другими библиотеками в которых нет проверки типа. НО как минимум вот такую проверку сделать это офигенно, сахар, который полезен и для IDE для автокомплита, и собственно для разработчика. К тому же я сомневаюсь что вызов instanseof по нескольку раз на каждый вызов каждой функции замтено снизит производительность скрипта и будет являться узким горлышком бутылки. Это ни чем не отличается от того случая когда бы мы это руками писали. Кроме того указание типов не обязательно. Иными словами где хотим сделать проверку типа, пишем Type:argName и он все автоматом делает. Сниппет такой.

В принципе можно делать статическую проверку а там где я сомневаюсь делать динамическую проверку? Или как? ЧТО думаешь? п.с. ты прост тут единственный кто со мной может на уровне поговорить)

Кстати вот еще классную штуку придумал, мозжно чтобы он еще генерил комментарии для GCC в экстримальном сжатии)) классно же) чтобы что бы ты не писал он тебе варнинги не будет выдвавть. Потому что на этапе трансляции сам TypeCoffeescript выдаст варнинг) ну или идешка подсветит если научить.

kobezzza 28.09.2015 23:15

Цитата:

а там где я сомневаюсь делать динамическую проверку?
Нах она не нужна. От системы типов лично я жду стат анализ на этапе сборки и автокомплит в ИДЕ. Но мне кажется ты недооцениваешь задачу :)

ТОТ_САМЫЙ 28.09.2015 23:19

Цитата:

Сообщение от kobezzza
Но мне кажется ты недооцениваешь задачу

Мне кажется ты меня недооцениваешь), я умею писать парсеры и трансляторы и свои языки, я повторюсь что {{выражения}} в юишке это не яваскрипт выражения. Токены структуры и.т.п. Я даже подмывал написать язык для описания синтаксисов других языков, потому что мне лень опсиывать структуры каждый раз. Хочетс писать что то вроде


// описывам регулярками токины
AST.addToken('word', '[$\w]+') 
AST.addToken('dot', '.')

// описваем структуры выражениями где есть спецсимволы например [токен], капсом пишется имя структуры, * значит повторение 0 или больше раз и.т.п. все по аналогии с регулярками)

AST.addStructure('PROP', '[word]')
AST.addStructure('ACCESS', 'PROP([dot]PROP)*')


Ну типа того. Строить грамотное AST я умею, а потом транслировать его в что угодно тоже умею. А проверку типов сделать не трудно, вообще не трудно. Трудно когда даныне могут придти в скрипт ИЗВНЕ. Понимаешь? как мне тогда проверку статическую делать?

nerv_ 28.09.2015 23:26

Цитата:

Сообщение от ТОТ_САМЫЙ
Ты просто тупой

наконец-то, конструктивный диалог

вам еще не надоело тролля кормить? :)

Lemme 28.09.2015 23:27

nerv_, весело же :victory:

kobezzza 28.09.2015 23:30

ТОТ_САМЫЙ, ну дерзай :)

ТОТ_САМЫЙ 28.09.2015 23:31

Цитата:

Сообщение от nerv_
наконец-то, конструктивный диалог

ахах не ну правда, то что он тупой это я просто сказал а дальше аргументы по существу) он же тоже обозвал меня. вот если бы я просто сказал что он тупой и все тогда да, можно было бы постепать, а так есть аргументы как ад хоминем так и ад рем)

Lemme 28.09.2015 23:36

ТОТ_САМЫЙ, я тебя не обозвал, а задал вопрос, а ты утвердил. Разницу чувствуешь или тупой? (это вопрос, надеюсь ты понял? :D).

ТОТ_САМЫЙ 28.09.2015 23:37

Цитата:

Сообщение от Lemme
я тебя не обозвал, а задал вопрос, а ты утвердил.

В садике будешь такие отмазы одногруппникам говорить, авось и прокатит)

Lemme 28.09.2015 23:46

ТОТ_САМЫЙ, ты явно под чем то. Ибо так тупить нереально,сори)

ТОТ_САМЫЙ 28.09.2015 23:46

Пасоны, я тут модули юишки переписал на commonjs. И написал враппер файлов для этого https://www.npmjs.com/package/gulp-commonjs-wrapper

Смотрите в чем дело, почему не браузерифай? потму что он подключает компилит толко те модули которые реквайрятся, а в юишке мы зарание не знаем что будет реквайрится потому что когда свойство запрашивается в скоупе и доходит до корня и не находится, юишка пытается подгрузить и инициализировать контроллер с таким именем, делается это при помощи геттеров, следовательно мы зарание должны знать список всех контроллеров которые реквайрим. браузеривай этого не делает по этому я напсиал этот плагин. НО я подумал что он лишен той фитчи браузерифая, например если мы вайл не указали в gulp.src то он его не подгрузит и не подключит, я подумал а не добавить ка ли мне функционал браузерифая)??? что думаете? может оно вообще кому-то понадобиться? получается на выходе мы будем иметь что-то вроде браузерифая с несколькими "точками входа" (файлами которые мы укажем в src). А потом они все будут либо склеиваться либо транслироваться либо просто сохранятьяс в общем все что захочит пользователь плагина. КАК думаете нужная это фитча?

Например я хочу исользовать в юишке дефолтный модуль ноды parse для работы с путями. Теперь я просто заинклюдю его куда нибудь где хочу, и все, мой плагин его автоматом тоже подцепит и поместит в код юишки. Удобно жи)

Erolast 29.09.2015 08:52

Цитата:

То есть нативная система модулей ES6 НЕ выигрывает у кофескрипта, потому как и те и те модули нужно прогонять через транслятор и оборачивать во врапперы)
Ты невнимателен. Модули es6 - это еще и выделенный синтаксис. Сахар. Чего нет в кофи.

Цитата:

Так а где "блин, классно придумали) и удобно и красиво, зачет"? Почему я вместо этого получаю попытки в стиле "это НЕ ОБЯЗАТЕЛЬНО!! МОЖНО И БЕЗ ЭТОГО ПСИАТЬ ПО ЭТОМУ НЕ СЧИТАЕТСЯ ЗА ПЛЮС111"
Успокойся, чувак, я не говорил, что cofeescript - плохо. Да, красиво, да, зачет. Лаконичность неплоха, хотя, например, неявное объявление - уже перебор, как по мне.

Цитата:

Я не собираюсь этого [перечислить 20 преимуществ] делать)
Ясно все с тобой)

ТОТ_САМЫЙ 29.09.2015 09:05

Мнп ясно что ты дибил которому не хватает мозга зайти на кофескрии ком где на голавной прризводится сравнение. Мне яснь чтт ты дибил раз мои слова вызывпют у тебя срмнение. Тут даже вопроса по поводу этих 20 пренмуществ не стоит. То есть я даже не нес мысль чоо вот мол вы не зпали поо эти 20 преемуще та. А они есть.ОЧЕВИДНО что ссп знмют про них.


Ну окей раз ту появился такой даун как ты. Я погуглю за тебя: http://coffeescript.org

Крути коолесиео мпльчик ситай буковки. А если у тебя еще и хапти мозга заявить "их тааам ри дваацать" то ты реально конченый. И Я ПОПРОШУ тебя удалиться с трада. Тут дяди кофескрипт и яваскрипт сравнивают. Аты не знаеш кофескрипт. Вначале выучи все его плюсы. Потом пииходи. Иначе как ты сраанивать собрался.

Erolast 29.09.2015 09:13

Извини, ты это мне сейчас?)

Erolast 29.09.2015 09:21

Цитата:

на голавной прризводится сравнение
Я вижу там только сравнение с ES3.

Цитата:

Иначе как ты сраанивать собрался.
Я не сравниваю лол. И не собирался.

ТОТ_САМЫЙ 29.09.2015 09:54

Цитата:

Сообщение от Erolast
Извини, ты это мне сейчас?)

Ой блин, ты уже другой жи) Я в туалете с телефона писал там непонятно ни че и запятой на андройде нет. Короче я решил писать форк кофи с поддержкой типов, с поддержкой отрицательных интексов у массивов [-1] возвращает последний элемент. с поддержкой генераторов и возможностю компиляции как в es6 так и в es5. Ну и синтаксис модулей дефолтный будет файлы подцеплять и во враппер оборачивать как браузерифай)

Это короче будет ES6 + Typescript + Coffeescript

Erolast 29.09.2015 10:17

Цитата:

форк кофи с поддержкой типов, с поддержкой отрицательных интексов у массивов [-1] возвращает последний элемент. с поддержкой генераторов и возможностю компиляции как в es6 так и в es5. Ну и синтаксис модулей дефолтный будет файлы подцеплять и во враппер оборачивать как браузерифай)
Годно.

ТОТ_САМЫЙ 29.09.2015 10:31

Ну вот такой короче будет типа парсер, точнее вначале я напишу тулсу для описания языком, чтобы вы потом сами смогли если че свои языки влегкую пилить)


AST.token 'dot', '\.'
AST.token 'word', '[$\w]+'
AST.token 'bracket-open', '\['
AST.token 'bracket-close', '\]'

AST.structure 'EXP', 'описание выражений'
AST.structure 'IDENTIFER', '[word]'
AST.structure 'PROP_ACCESS', '[dot][word]'
AST.structure 'DYNAMIC_ACCESS', '[bracket-open] EXP [bracket-close]'
AST.structure 'PATH', 'IDENTIFER (PROP_ACCESS|DYNAMIC_ACCESS)*'

code = 'User.name[user.soname]'

ast = [
	{
		type: 'PATH'
		value: 'User.name[user.soname]'
		contents: [
			[
				{
					type: 'IDENTIFER'
					value: 'User'
				},
				{
					type: 'PROP_ACCESS'
					value: '.name'
					contents: [
						{
							type: 'word'
							value: 'name'
						}
					]

				},
				{
					type: 'DYNAMIC_ACCESS'
					value: '[user.soname]'
					contents: [
						{
							type: 'exp'
							value: 'user.soname'
							contents: [
									#...
							]
						}
					]
				},

			]
		]
	}
]



Потом напишу язык для описания того как из ast строить выходное дерево, то есть то же самое только в обратную сторону)) и все.

Будетекрасиво описывать в стиле регулярок что ожидаете на входе и как оно должн выводится. Красота??
Таким образом можно будет например написать препроцессор для css или компилятор из С++ в яваскрипт. Все что угодно. Максимум что я НЕ придумал это как задать универсальный формат AST... Языки то разные.


Часовой пояс GMT +3, время: 17:33.