Как стать автором
Обновить

Комментарии 41

То они AtScript создают и тут же бросают, то Angular на TypeScript переписывают, то с Dart сдувают пыль…
AtScript — это всего лишь подмножество TypeScript. После принятия Microsoft предложенных правок Google больше не понадобилось использовать AtScript.

Dart особо и не пылился никогда. Каждые 2 месяца — релиз.
Наоборот, AtScript — надмножество Typescript.
Статья в одно предложение:
Мы приняли решение не интегрировать виртуальную машину Dart в Chrome.
«Dart не нужен»
Мне не понятно одно — если AtScript удалось вмержить в typescript, почему то, что не хватает в TS, а есть в dart также не добавить в TS и все? Зачем еще один язык, тем более транслируемый?
Нужно начать с того, что AtScript планировался как надмножество TypeScript и появился, естественно, позже него. Dart же появился раньше TypeScript и это 2 полноценных языка, которые развивались параллельно. Я не понимаю что вы собрались мёрджить.
Если вы посмотрите на Dart, то обнаружите, что он не только добавляет, но и убирает.

Семантически Dart достаточно отличается от JavaScript объектной моделью. Вместо концепции «любой объект это словарь с прототипом», в Dart обычные классы с фиксированной структурой. В JavaScript вы читаете свойство, которого нет, и получаете undefined, в Dart вы получаете исключение. В JS вы складываете null + 1 получаете 1 (или undefined + 1 получаете NaN), в Dart вы получаете опять же исключение (и нет никакого undefined). Иными словами то «что не хватает в TS, а есть в dart также» — это в некотром смысле отрицательная величина, потому что Dart упрощает семантику и убирает те части JS, которые скажем так мешают вам поймать ошибку в коде как можно раньше.

Конечно же, Dart не только убирает, но и довавляет. Например, в Dart можно переопределить операторы + или допустим [], или каждый класс может иметь метод noSuchMethod, который позволяет динамически регировать на вызов несуществующих методов и менять поведение объекта (можно, например, легко написать proxy объект на основе этого метода).

Плюс Dart это не только язык, это еще и платформа с библиотеками спроектированными так, чтобы хорошо работать с его семантикой. В TypeScript библиотек вообще нет, люди просто .d.ts декларациями к тому, что есть в JavaScript.
Да, это интересно. Спасибо за развернутый ответ, надо будет посмотреть на dart внимательней. А все эти вещи выполняются в рантайме? Вопрос следует из слухов о огромном рантайме, который тянет за собой даже helloword.
Часть этих вещей выполняется во время исполнения, компилятор dart2js выкидывает, что может. Если их не исполнять, то другой язык получается.

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

Голому Hello World особо «рантайма» не нужно, там только прибавляется кусочек который (лениво) инстанцирует классы.

Основная часть того, что воспринимается как runtime на самом деле в реальных проектах приходит из dart:html. Это библиотека, которая оборачивает DOM и реализует всякие полезные методы, чтобы вы могли писать

document.querySelectorAll(".xyz").map((el) => el.value) или el.onClick.listen((e) { /* ... */ })

вместо голого JSовго [].slice.call(document.querySelectorAll(".xyz")).map(function (el) { return el.value }) и el.addEventListener("click", function () {}), т.е. в некотором смысле dart:html это такая специально заточеная для Dart jQuery.

Компилятор старается выкинуть все что можно, но он же не знает, что там querySelector вернет — поэтому остается всякий потенциально неиспользуемый код. Сравнивать этот «рантайм» нужно, конечно же, не с голым JS, а с размером всех тех либ которые вы будете использовать в своем коде (jQuery там или lodash).
> document.querySelectorAll(".xyz").map((el) => el.value)

Собственно, в ES6 именно так и можно писать.
Скорее «почти так», чем «именно так»: Array.from(document.querySelectorAll(".xyz"), el => el.value), потому что NodeList не является Array и как следствие не «умеет» map.
И что, для этого нужен отдельный язык вроде дарта?
Достаточно странный вопрос, я где-то сказал, что «для этого»? Вменяемые библиотеки (включая работу с DOM) — это просто одно из его достоинств, а отнюдь не причина существования.

В таком ключе и я мог бы спросить: а что для этого нужно полифиллить Array.from и вообще компилировать мой код каким-нибудь babel.js? Оказывается да, нужно таки. Потому что ES6 в настоящий момент тоже язык отдельный от того, что поддерживается браузерами.
Dennis Khvostionov -> Денис Хвостёнов
Я просто заметил, что там удвоенный «n». Может всё-таки Дэнис?
Скорее «Хвостионов». Такая фамилия, в отличие от вашего варианта, в гугле встречается.
«Деннис Хвостёнов» тоже в гугле встречается. Как правильно 100% знает носитель фамилии.
Мне кажеться, разумным было бы внедрять диалект лисп как транслируемый язык.
Я несколько раз представлял себе как было бы круто если когда-то случайно все решили, что в браузерах будет Scheme.

github.com/clojure/clojurescript вот тот js-фреймворк который возьмет это за основу а не этот TS будет крут и охеренен.

а еще есть вот такая прикольная штука.

www.cappuccino-project.org/
Народ JS-то не может освоить, а вы лисп предлагаете:) Лиспов, компилирующихся в JS, хватает, начиная с указанного вами clojure. Выбирайте, пишите на нем, пропагандируйте, пишите статьи, создайте библиотеку уровня хотя бы React.js — глядишь, люди и потянутся.

capuccino может и прикольная штука, только я за 5+ лет его существования не то что проектов, ни строчка кода на нем не видел.

А чем вам TS не угодил? Нормальное надмножество JS с необязательной утиной типизацией и читабельным кодом на выходе.
Вообще говоря, связка cljs+core.async+datascript(написанный на cljs client-side datomic)+react(rum, reagent, sablono, тыщи их) наиболее похожа на серебрянную пулю среди всего нынешнего фронтенда.
А есть пример?
Спасибо!
А вот, кстати, свежий доклад от tonsky на CodeFest 2015 — ФП в браузере, как раз на эту тему.
В цитатник. Причем названия технологий можно подставить любые.
Да просто в js все впорядке со стилем программирования.

И все эти надмножества пытаются запихнуть туда идею классического «интерфейсного» так назовем наследования, что в целом порождает на мой взгляд неверного представления о js в целом.

В случае TypeScript это просто желание отловить ошибки как можно раньше + задокументировать код. Сейчас копаюсь в одном приложении, передается куча разных объектов и массивов этих объектов — откуда они взялись, что это за объекты, что в этих объектах должно быть, какие свойства и методы — ни черта не понятно. Были бы типы аннотированы, было бы понятней. JSDoc помогает, но его тоже еще написать надо.
На CojureScript реализован интерфейс для работы с React.js достаточно популярный. Библиотека называется om.
Угу. Причем люди нормально так потянулись — с подачи Om, например, чуваки из React сделали immutable.js и теперь пропагандируют иммутабельную модель
Мсье знает толк… ;)
mraleph, Вы не знаете, эта новость как-то связана с Oilpan? Dart не будут интегрировать в стандартной сборке, но другие варианты какие-нибудь останутся (за исключением Dartium)?
Никак не связанна. Oilpan вообще особо никак не связан был с Dart (хотя и существовали некоторые теоретические предположения о том, что он может облегчить интеграцию Dart и Blink в вопросах GC).

Dart не будут интегрировать в стандартной сборке, но другие варианты какие-нибудь останутся (за исключением Dartium)?


Не совсем понятен вопрос. Существует всего один Chrome, поэтому не ясно о каких вариантах идет речь.

Dartium останется, потому что пока это единственный способ гарантировать быстрый edit-refresh цикл разработки.
Ясно, спасибо. Просто постоянно тиражировалось мнение, что Dart добавят как-только Oilpan будет полностью завершен.

Под вторым вопросом я имел в виду — в виде плагина, или еще какой-либо простой путь доустановки Dart-а в уже существующую стандартную установку Chrome. Ладно, время покажет.
В виде плагина его не добавишь, потому что PPAPI не дает сделать легковесную тесную интеграцию с DOM.
а еще видать прошла мода на CoffeScript раньше то все только о нем и пищали.

теперь typescript…

таких г… языков клепают много, хорошо что слава кофейного уже на закате. Жаль что ангуляо свернул с правильной дорожки.
Обратная совместимость — она такая, когда ей нужно только пользоваться — она превосходна, а когда самому поддерживать — отвратительна.
Гугл как бы подтвердили, что с JS никто не сможет соперничать, даже они. Грустно.
Представление о гугле как о какой-то монолитной компании весьма условно. Понятно, что Дарт — чья-то частная инициатива. Другие гуглоиды к ней относятся по-разному. Встреченные мной в W3C гуглоиды дарт-инициативу игнорируют, ну или просто ржут над ней.
я правильно понимаю, что Вам грустно от того, что js хороший язык?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории