В то время как вопрос был «Являются ли цели языков одинаковыми?», Реальный вопрос: «Как мы можем улучшить веб-программирование там, где мы находимся?» ,
Оба проекта пытаются сделать это с учетом
язык программирования (TypeScript делает небольшой, но очень чистый шаг, Dart делает более революционный ход, который все еще движется)
совместимость с существующим кодом js (переход 0 в TypeScript, который компилируется в js, сложный в Dart, поскольку 2 виртуальные машины общаются друг с другом)
практика разработки программного обеспечения (только Dart, веб-компоненты и теневой домен)
За последние 3 дня я углубился в Dart, а затем в TypeScript. Моя кодовая база CoffeeScript занимала строки кода 2000-х годов, слишком много, чтобы справиться с красивым, но слишком пушистым CoffeeScript. Проблемы, с которыми я столкнулся, заключались в том, что в CoffeeScript отсутствуют функции, которые есть в языках, разработанных для программирования среднего и крупного масштаба: интерфейсы, модули, безопасность типов. Но был один , даже гораздо более серьезной проблемой , с кофе и JS: The JS «этот указатель» странность повлияло на мое здравомыслие и CoffeeScript ничего здесь не поможет.
Итак, вот мои результаты после 3 дней использования и оценки:
дротик
Тщательно изучил учебник, прочитал 1 книгу, прочитал 2-ю книгу и попробовал демоверсии. Я думал, Дарт, это будущее . Затем я попытался перенести мое приложение в Dart. Это было, где мой энтузиазм снизился со 100 до 10. Вот почему:
Dart Editor является единственным способом программирования Dart. Хотя плагины для Sublime Text существуют, они не предоставляют такие функции, как intellisense, завершение кода (исправьте меня, если я ошибаюсь). Редактор дротиков, однако, в пре-альфа-качестве. Несмотря на то, что он поддерживает такие магические вещи, как супер-охлаждение, такие как обновление веб-страницы, когда вы редактируете файл CSS (! Действительно круто), он зависает или падает несколько раз в минуту. Таким образом, вы печатаете 5 букв, и 2 раза вам придется ждать 2 секунды или 15 секунд между наборами. И у меня был проект с несколькими строками кода, поэтому я не хотел ждать, что произойдет, если в строке 1000 с. Перемещен файл из одной папки в другую в Dart Editor, сбой. отладкас Dart Editor на первый взгляд лучше, чем все известные мне средства отладки js (chrome - мой выбор), но все еще слишком много чего не хватает: нет непосредственного окна (это делает отладку js намного лучше в данный момент), нет часов.
Политика и возможности побега : Некоторые говорят, что Apple, MS и Firefox никогда не будут предоставлять виртуальные машины Dart. Ну, я не совсем уверен, но, по крайней мере, для Apple это кажется на данный момент вполне определенным. Для других это скорее, чем наоборот. Так что нет проблем, мы можем конвертировать Dart в JavaScript. Эта интеграция действительно великолепна: Dart поддерживает заглушку js, которая поддерживает код js, подключенный к Dart Editor, так что print()
в Dart Editor все равно появляется выражение. Но тут возникает одно: площадь такого преобразованного кода высока. 150kB или около того (до минификации). Я не слишком много копался в точных размерах, так что не зацикливайся на этом.
Языковая зрелость . Помимо слишком серьезных проблем с Dart Editor, появляющихся мне в лицо 3 раза в минуту, я также счел недопустимым, что каждый источник кода Dart, который вы найдете, использует свой Dart. Язык меняется каждый день. Вы нашли сообщение от 5 недель назад? Это устарело. Вы пробуете образцы из учебника Google? По крайней мере 1 пример не компилируется, так как API изменился. Даже обычные вещи, такие как присоединение события к элементу DOM, находятся в хорошем состоянии .
Интеграция с существующими библиотеками js немного сложна. 2 ВМ нужно общаться здесь, это сложно.
В заключение, вы не можете всерьез использовать Dart на сегодняшний день, и погружение в него не слишком увлекательно из-за 1 и 3. Обе точки со временем разочаруют. О 2 пунктах, Google опубликовал тесты производительности несколько дней назад, демонстрируя, что их скомпилированные js лучше, чем рукописные js. Мои комплименты, отличная работа. Время загрузки может все еще быть позади из-за проблемы следа, как сказано. Однако, если код следа используется многими многими сайтами, он может быть доступен в кеше и вуаля, а также исчезнет.
Итак: я считаю Дарт отличным проектом, использование которого в настоящее время несет в себе значительную часть непредвиденного риска, и в этом году потребуется, чтобы вывести его на хороший стабильный уровень.
Машинопись
Оценка TypeScript очень проста, занимает 1 или 2 часа, и вы все знаете. После прочтения документа со спецификацией языка и короткой книги (показанный TypeScript) я все знал и начал программировать. Затем я был удивлен, обнаружив, что дополнения TypeScript к JavaScript просто удовлетворяют все мои серьезные потребности в улучшении моего клиентского программирования . Вот основные моменты:
Интерфейсы . Инкапсуляция и интерфейсы позволяют мне легко структурировать мой код. Отлично!
Класс государства. , TypeScript позволяет выразить состояние, которое экземпляры класса переносят явно, или, что лучше, его принудительно применяют. Это большой шаг лучше по сравнению с JS или кофе.
this
вызов сумасшествия смягчен . Внутри функций со стрелками TypeScript делает this
указатель как любой обычно ведущий себя гражданин.
Редактор, Intellisense . TypeScript поставляется со 100% высочайшим интеллектом, который реагирует в микро- или миллисекундном диапазоне, как это используется в Visual Studio при программировании на C #. Заголовки TypeScript для всех важных библиотек js также существуют . Отлично, отлично.
Опыт и риск . Использование TypeScript сопряжено с нулевым риском, язык четко определен, совершенно стабилен, это просто js с сахаром, ничего непредвиденного.
На самом деле, эти улучшения дают мне все, что мне нужно. Единственное, что я хотел бы видеть в будущем, это общие коллекции. Но это арахис.
Так что насчет производительности? Хотя я считаю себя фанатом производительности, я не верю, что существует какой-либо проект, который бы сделал здесь выбор технологии на основе производительности. Оба в лиге.
Если вы интересуетесь будущим веб-программирования, то оба - большие усилия, TypeScript гораздо более прагматичен и удобен в использовании, Dart - очень интересный лабораторный проект, который можно будет использовать, когда появятся зрелые редакторы и отладчики, а объем проектов можно будет реализовать с помощью это будет зависеть от политики.
В любом случае, 3 прошедших дня были в основном веселыми, и я многому научился, если вы найдете время, Дарту потребуется 1 день, а TypeScript - 2 часа, чтобы составить собственное мнение. Попробуй.
Обновление октябрь 2014
Прошло какое-то время, и после публикации кажется, что предположение, что Typescript - это безопасный стабильный путь, было совершенно правильным. Я только что нашел (очень) заметное утверждение о Typescript, Dart и Closure:
Я давно интересовался проблемой веб-программирования в целом. Я считаю, что Google Closure в настоящее время все еще является лучшим вариантом для крупномасштабной разработки на JavaScript / в Интернете, но в конечном итоге он будет заменен чем-то менее подробным. Хотя Dart демонстрирует большие надежды, я все еще встревожен размером JavaScript, который он генерирует. Для сравнения, если TypeScript может быть напрямую переведен в JavaScript, который может быть скомпилирован с использованием расширенного режима компилятора Closure, то мы можем получить все преимущества оптимизированного JavaScript из Closure без многословия. Более того, поскольку TypeScript - это расширенный набор JavaScript, я считаю, что его синтаксические расширения в какой-то момент могут превратить его в стандарт ECMAScript,
http://blog.bolinfest.com/2013/01/generating-google-closure-javascript.html
Майкл Болин - давний (бывший) герой внешнего интерфейса Google, также участвовавший в закрытии Google (получить его книгу о закрытии).
Google Traceur
Appraoch Google для работы с ECMA Script 6 сегодня - это проект Traceur:
https://github.com/google/traceur-compiler.
По сравнению с Typescript, поддержка инструментов, по-видимому, значительно отстает на сегодняшний день. С другой стороны, гораздо быстрее внедрить слишком классные будущие улучшения языка js, такие как итераторы или понимания.
Facebook Flow, Google AtScript
обеспечить аналогичные функции, как TypeScript.
«Можно задаться вопросом, что происходит с этими различными решениями для проверки типов JavaScript и что с этим делать. Хорошая новость заключается в том, что Microsoft, Facebook и Google сотрудничают по этим вопросам, по словам Джонатана Тернера из Microsoft:
Команда TypeScript работает как с командами Flow, так и с командами AtScript, чтобы обеспечить возможность использования ресурсов, уже созданных сообществом JavaScript, для этих инструментов. Эти проекты могут многому научиться друг у друга, и мы с нетерпением ждем совместной работы, продвигаясь вперед и создавая лучшие инструменты для сообщества JavaScript. В долгосрочной перспективе мы также будем работать над тем, чтобы объединить лучшие возможности этих инструментов в ECMAScript, стандарт JavaScript. "
infoq статья о потоке фб