LINUX.ORG.RU

Релиз CoffeeScript 2

 , ,


0

1

CoffeeScript — язык программирования, который транслируется в JavaScript. Синтаксис CoffeeScript вдохновлен языками Ruby и Python. Автор языка Джереми Эшкинас (Jeremy Ashkenas) также известен созданием библиотек Underscore и Backbone.

Новый релиз языка направлен на сокращение разрыва между CoffeeScript и современным JavaScript (ES6, ES7). Так => и class транслируются соответственно в => и class. При этом. если в целевом рантайме та или иная возможность JS не поддерживается, может потребоваться дополнительная трансляция итогового JS.

Новое и измененное в версии 2:

  • модули: import / export;
  • классы: class Animal;
  • асинхронные функции: await someFunction();
  • стрелочные функции: =>;
  • параметры функции по умолчанию: (options = {}) ->;
  • оставшиеся параметры функции: (items...) ->;
  • деструктурирующее присваивание: [first, second] = items, {length} = items;
  • оператор расширения: {options..., force: yes}, {force, otherOptions...} = options;
  • шаблонные строки: "Hello, #{user}!";
  • тегированные шаблонные строки: html"<strong>coffee</strong>";
  • оператор for...of: for n from generatorFunction().

Примечательна поддержка JSX прямо в языке:

renderStarRating = ({ rating, maxStars }) ->
  <aside title={"Rating: #{rating} of #{maxStars} stars"}>
    {for wholeStar in [0...Math.floor(rating)]
      <Star className="wholeStar" key={wholeStar} />}
    {if rating % 1 isnt 0
      <Star className="halfStar" />}
    {for emptyStar in [Math.ceil(rating)...maxStars]
      <Star className="emptyStar" key={emptyStar} />}
  </aside>

Релиз обратно несовместим с версиями 1.X. Помимо прочего. некоторые возможности ECMAscript не были реализованы, например let и const.

>>> Подробности

Эшкинас участвовал в разработке постольку-поскольку, в основном все делалось силами 3-4 энтузиастов последний год. Хоть идея кофескрипта, на мой взгляд, и привлекательна сама по себе, превосходство JS сейчас неоспоримо из-за богатого инструментария, как-то линтеры и статические анализаторы, с которыми в кофескрипте все плохо.

hobermallow ()

Хз но мне почему тут, слово 'компилируется' режет глаз :( Может лучше транслируется ?

mx__ ★★★★ ()
Ответ на: комментарий от mx__

а что не так?

компиляция — трансляция из высокоуровневого языка в низкоуровневый

js является вполне себе низкоуровневым для браузера

f1u77y ★★★ ()
Ответ на: комментарий от f1u77y

Низкоуровневые языки работают с регистрами/железом.
Высокоуровневые языки работают с объектами. Яваскрипт никак не низкоуровневый язык.

«Низкий уровень» в высокоуровневых языках представлен в виде отдельных API. То есть например Audio - высокоуровневый апи,
а вот AudioContext уже низкоуровневый (не в плане опять таки железа, а в плане представления подсистемы аудио).

uin ★★ ()
Последнее исправление: uin (всего исправлений: 1)
Ответ на: комментарий от mx__

А почему вы на на английскую Википедию не сходили? Или на сайт проекта? Английская вики дает например понятие source-to-source compiler, transcompiler или transpiler. Но, похоже, вы правы. Компиляция про преобразование в низкоуровневый язык.

hobermallow ()

Так => и class транслируются соответственно в => и class.

три раза перечитал. наверное очень крутой язык.

PS: дайте мне пару минут, я ща новый ЯП CoffeePython напишу.

halturin ★★★★★ ()

Ура, товарищи! Поддерживать var и let не захотели, негодяи, чем меня огорчили, а вообще для человека, полюбившего кофе ещё когда это было мейнстримом, никакой современный js и ts его не заменит, прекрасно!

Обидно, не то что не могли var и let, не захотели, и никакой пул реквест тут не поможет.

Romaboy ()
Последнее исправление: Romaboy (всего исправлений: 1)

А через неделю релизнется CoffeScript3?

StReLoK ☆☆ ()

Кто-то им еще упарывается? Вообще, идея запилить жоэс на синтаксисе петона это бомба. Нагрести худшее из всех скриптотолчков, одобряю такую наркоманию.

anonymous ()

некоторые возможности ECMAscript не были реализованы, например let и const.

вот это былинный провал

val-amart ★★★★★ ()

А зачем они это откопали? Теперь уже есть TS.

bitfroster ★★ ()

Necromancy 2.0. А ведь я когда-то писал на нем.

anonymous ()

Ну и зачем это ненужно нужно ?

function coffee_printf(var)
{
printf(var);
}
vblats ()

Ненужно вселенских масштабов.

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

Там еще выходил новый стандарт ES6, который вроде как должен был решить проблемы, но в итоге придумали CoffeeScript 2 / TypeScript которые решают проблемы которые не были решены в ES6.

sphericalhorse ★★★ ()
Ответ на: комментарий от sphericalhorse

Ну расскажи, какие же проблемы не решены в ES6? Сабж это про рюшечки, там каким-то педикам не понравился синтаксис. Конечно никакой ES хоть 66 их проблемы с ориентацией не решит. TS это про типолюбство, такая подпорка для инвалидов, ушибленных жабой. Тоже ES никакой не решит их проблемы с альтернативной одаренностью.

anonymous ()
Ответ на: комментарий от f1u77y

компиляция — трансляция из высокоуровневого языка в низкоуровневый

Вообще термин компиляция не зависит от уровня языка. Это скорее просто так пошло. Для перехода на более низкий уровень в том же llvm используется тупо lowering

И да, язык для вращения порнобаннеров на дняффке не является низкоуровневым даже для браузера. Тогда уж есть wasm

upcFrost ★★★★★ ()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от halturin

давай я дам тебе подстказку, раньше в js небыло class и =>. попробуй теперь догадаться в чем тут дело.

TDrive ★★★★★ ()

Шаблонные строки: "Hello, #{user}!"

Не пойму, почему не поменяли синтаксис на тот, что используется в ES6. Пытался найти обсуждение, но как будто этот вопрос даже не поднимали. Жаль.

В остальном - это праздник. Один из лучших языков программирования продолжает жить, вопреки глупости стада. Сила Кофе не в той шелухе, которую перенял ES6, и за которой все радостно убежали. CS - максимально лаконичный и читабельный язык. CS подобен кванторам в математике - передаёт суть, не нагружая мозг мусором.

BlackNight ()
Ответ на: комментарий от BlackNight

Не пойму, почему не поменяли синтаксис на тот, что используется в ES6.

Это поломало бы огромное количество кода.

Текущий синтаксис нравится мне больше, чем тот, что в JS.

лаконичный и читабельный язык.

Тоже очень люблю CS за это.

Anatolik ★★ ()
Ответ на: комментарий от TDrive

И всякого говна типа ReactJS не было тоже. А когда это всё там появилось, я, к счастью, не застал.

dzidzitop ★★ ()
Ответ на: комментарий от TDrive

давай я дам тебе подстказку,

давай я тебе дам подсказку... сравни что во что транслируется и нади разницу.

halturin ★★★★★ ()
Ответ на: комментарий от halturin

Чувак, ты опоздал. Ведь уже есть PythonPython, его даже для скорости назвали PyPy. Очень быстро транслирует Питон в Питон. Круто же!

Vudod ★★★★★ ()
Последнее исправление: Vudod (всего исправлений: 2)
Ответ на: комментарий от anonymous

не решены в ES6

Он обратно совметим с тем говном, на котором написано 90% веба и которое надо запретить.
TS в этом отношении сильно лучше, хотя бы сильно ругается

Shadow ★★★★★ ()
Ответ на: комментарий от halturin

сейчас её нет. но возможно она была раньше? это уже вторая подсказка.

TDrive ★★★★★ ()
Последнее исправление: TDrive (всего исправлений: 1)
Ответ на: комментарий от Shadow

на что ТС сильно ругается? на говно на котором написано 90% веба? как это?

TDrive ★★★★★ ()
Ответ на: комментарий от TDrive

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

Shadow ★★★★★ ()
Ответ на: комментарий от Shadow

А вот и статикодебилы с кривыми лапками подтянулись. Никак не можешь перестать складывать километры с килограммами без пинков от канпелятора? И ради таких вот даунов нужно код весь изговнять декларациями и лишиться гибкости утиной типизации. Шобы тупорылый сисярпник не впадал в панику при виде динамического кода.

anonymous ()
Ответ на: комментарий от anonymous

Прости, но по http ходит исключительно string, и я не хочу сюрпризов при передаче int. Или нехватки десятитысячных в int.

Shadow ★★★★★ ()

зачем оно ещё живое может мне кто-нибудь объяснить?

system-root ★★★ ()
Последнее исправление: system-root (всего исправлений: 1)
Ответ на: комментарий от Shadow

для типов есть Flow для var, глобалок и всего остального ESLint. Если это были все плюсы TS то можно обратно закапывать.

TDrive ★★★★★ ()
Последнее исправление: TDrive (всего исправлений: 1)
Ответ на: комментарий от TDrive

Flow однако крив. Пробовал использовать и то и то, и ts вызывает гораздо меньше негодования. Один тот факт что flow истерично выдает тысячи ворнингов по внешним модулям, которые на нем написаны, но не включают какие-нибудь определения - мягко говоря удручает. А что игнора нельзя настроить так вообще бесит. Ts пользовать куда комфортнее. А в остальном, разница между ними исчезающе мала. И то транспилятор, и другое транспилятор. И то статический анализатор, и другое. Даже синтаксис почти совместимый. Что один из них плагин для бабеля - это незначительные детали реализации.

anonymous ()

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

entefeed ☆☆☆ ()
Ответ на: комментарий от Shadow

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

anonymous ()
Ответ на: комментарий от anonymous

Прости, я писал корзины на CGI Perl ещё когда php3 был бетой.
JavaScript - это элегантный набор костылей, для веба не годится (годится для анимации UI)

Shadow ★★★★★ ()
Ответ на: комментарий от Shadow

А, так ты из тех идиотов, что тянут жс на бэкенд. Ну тогда не знаю даже что сказать. Маразм не оргазм, дедуля.

anonymous ()
Ответ на: комментарий от anonymous

Нет, я пишу виджеты и контролы на TS, графики, обработка фото, это всё. На JS это всё равно боль.

Shadow ★★★★★ ()
Ответ на: комментарий от entefeed

Теоретически, TS это в половине случаев тоже решает.

Shadow ★★★★★ ()
Ответ на: комментарий от Shadow

Если ты про jit компиляцию в V8 которая любит типизированный код то тот же флоу решает это не хуже.

TDrive ★★★★★ ()
Ответ на: комментарий от Shadow

На JS это всё равно боль.

Конечно боль если ты не в курсе что такое линтеры, статические анализаторы и прочие инструменты которых для JS целый вагон.

TDrive ★★★★★ ()
Ответ на: комментарий от TDrive

Зато у ts всё в одном месте, не нужен babel. И в принципе ругается на извращенное программирование. Ну и почтм на всё есть готовые определения.

Shadow ★★★★★ ()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от TDrive

Нет, я про текущую память и глобальный контекст.

Shadow ★★★★★ ()
Ответ на: комментарий от Shadow

Зато у ts всё в одном месте, не нужен babel.

Достойный повод начинать новый проект на TS))

TDrive ★★★★★ ()
Ответ на: комментарий от Shadow

Нет, я пишу гуйню, обмазываясь типами

Клиника. Дядь, тебя точно в детстве не кормили дельфями какими нибудь? Это же писец просто взять себя наручниками к батарее прицепить и радоваться.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.