Microsoft недавно представила Typescript, новый JavaScript-подобный язык программирования. Некоторое время назад я услышал о Dart, новом языке программирования, созданном Google для решения проблем, связанных с Javascript, таких как производительность, масштабируемость и т. Д.
Назначение обоих новых языков мне кажется одинаковым. Как вы думаете?
Являются ли цели языков одинаковыми?
Каковы реальные различия о них?
dart
typescript
margabit
источник
источник
Ответы:
Цитирую Боба Нистрома :
Кроме того, он пишет в http://www.reddit.com/r/programming/comments/10rkd9/welcome_to_typescript/c6g37xd :
источник
В то время как вопрос был «Являются ли цели языков одинаковыми?», Реальный вопрос: «Как мы можем улучшить веб-программирование там, где мы находимся?» ,
Оба проекта пытаются сделать это с учетом
язык программирования (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 статья о потоке фб
источник
this
контекст, так как вам все равно придется связывать функции обратного вызова, объявленные внутри методов, сthis
контекстом метода, чтобы получить доступ к атрибутам класса. Как это "исправить" что-нибудь?Цитируя Скотта Хансельмана:
От того, почему TypeScript должен быть ответом на что-либо?
источник
var x = {}; x.foo = 5; //Doesn't work in typescript
и вvar e = window.event ? window.event : e; //Doesn't work in typescript
приведенном выше примере произойдет сбой компилятора TypeScript. Я что-то пропустил? Я не могу просто «вставить» свой JavaScript и использовать типы, когда мне это нравится. Я должен изучить некоторый новый синтаксис и структурировать все с типами.var x = {}; x['foo'] = 5;
и это делает тоже самоеvar y:any = {}; y.foo = 5;
, но я был немного удивлен, обнаружив , что вы правы об этом - воспринимаемый тип{}
является{}
скорее чемany
. Может быть проблема вывода типа. Я разместил вопрос здесь - посмотрим, как они ответят.Пришлось ввязываться в эту дискуссию с моим собственным открытием в последнее время.
1-й: TypeScript
MS выбрала хороший подход в том, что вы можете легко прыгать в TS и JS. Мы в основном используем AngularJS для нашей разработки и обнаружили, что пока мало документации для преобразования Angular в TypeScript. Это было приятное дополнение для включения TypeScript в наш рабочий процесс Dev.
2-й: дартс
Дарт - это ироничный шаг для Google. Может быть, они не помнят activeX и все кошмары вокруг, пытаясь заставить приложение работать во всем, кроме страшного IE 5 или IE 6 дня. MS потребовалось много лет, чтобы оправиться от тех дней.
Дарт как язык «концептуально», кажется, пытается объединить некоторые приятные функции ООП. Аннотации и т. Д. - хорошая мысль для Javascript.
Проблема в том, что трудно представить достаточную пропускную способность для создания нового редактора, нового языка, новых виртуальных машин в разных браузерах, плагинов для других IDE, компилятора для преобразования в javascript (без размера в несколько мегабайт), преобразования или создания новых библиотек dart для заменить тысячи текущих библиотек js, попросить кого-нибудь принять решение о полимерах или директивах, преобразовать сайт dartlang в использование dart, и это то, что я могу придумать с самого начала.
Концепция пытаться использовать Dart во всем, кроме тривиального приложения, в настоящее время страшна.
Поверх всего этого ES6 не далеко. ES6 имеет много функций, которые Дарт пытается исправить, которые существуют в ES5. Каким будет ценностное предложение, когда ES6 выйдет на улицу? По крайней мере, в это время единственное изменение, которое вы должны внести в TypeScript после выхода ES6, - это, возможно, выбрать другую компиляцию для целевой.
Просто чтобы прояснить хоть что-то, что я про MS человек. MS делает несколько достойных продуктов и добилась больших успехов, чтобы исправить прошлые ошибки в сообществе OSS. Я до сих пор редко использую что-либо кроме TypeScript от MS.
источник