Есть ли у Dart полезные функции для веб-программистов?

33

http://www.dartlang.org/

Я проверил сайт очень кратко, и мне стало любопытно. Есть ли преимущества использования дартс? Это просто замена для JavaScript?

Это выглядит как более простая Java. Написание довольно много C # на работе, язык очень похож на то, к чему я привык, поэтому изучение синтаксиса выглядит как легкий для изучения. Есть ли у кого-нибудь мнения или опыт работы с языком?

(По сравнению с CoffeeScript (= я не использую синтаксис Ruby), синтаксис выглядит мне более знакомым).

Marko
источник
18
Комментарий Дуга Крокфорда забавен: «Итак, я долго думал ... если бы я мог взять чистый лист бумаги и написать новый язык, который сохранил бы все достоинства Javascript ... Я бы не придумал с чем-нибудь вроде Дарт ".
MebAlone
2
@MebAlone Хо-хо-хо, как проницательно. Что за шутка, что Крокфорд? Мудрецы над мудростью.
фанкибро
11
@MebAlone Разработчики языка Dart не пытались придумать новый язык, который сохранил бы все достоинства JavaScript. Они пытались придумать классовый объектно-ориентированный язык для браузера.
MarkJ
1
Что Is there any advantages of using Dart?значит? Преимущество над чем и измеряется как ? Существует множество языков, которые компилируются в JavaScript. Большинство из них делают что-то намного лучше, чем Дарт. Некоторые делают большинство вещей лучше, чем Дарт. И, например, если вы делаете C #, то ScriptSharp может быть вам интересен. Хотя из всех языков, компилируемых в JavaScript, это было бы далеко не моим первым выбором, для вас это было бы очень простым переходом, возможно, даже позволяющим безболезненно переносить существующий код.
back2dos
1
@MebAlone Дуглас немного конфликтует. Разработчики, которые жалуются, не принимают новые идеи, но говорят, что дартс плох в 2012 году, когда он только что вышел 2 дня назад. Они объявили, что это придет 2 года назад. Как дартс обращается к некоторым вещам, которым Дуглас недоволен в JS (нет функций конструктора с «свободным зависанием» прототипа). Сохраняя вещи, которые ему нравятся (например, замыкания). В нескольких презентациях я видел, как он хвалил прототип, а затем критиковал синтаксис функций конструктора (он прав). Затем «решает» его, показывая шаблон модуля, который полностью игнорирует существование прототипа.
HMR

Ответы:

65

Спасибо за ваш вопрос! Полный отказ от ответственности, я работаю в команде Dart.

Вероятно, лучшее преимущество, которое Dart имеет сегодня, - это то, что он знаком с C #, Java, C ++ и большинством разработчиков JavaScript. Многие разработчики имеют ряд ожиданий относительно своего языка (OO на основе классов, лексическая область действия, знакомый синтаксис) и своих инструментов (завершение кода, рефакторинг, навигация по коду, отладка), которые Dart стремится удовлетворить и превзойти.

Вот некоторые вещи, которые мне нравятся в языке:

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

  2. Невинен до тех пор, пока его вина не доказана. Dart старается свести к минимуму ситуации, которые приводят к ошибке во время компиляции. Многие условия в Dart - это предупреждения, которые не мешают запуску вашей программы. Зачем? В соответствии с модой веб-разработки крайне важно позволить разработчикам попробовать немного кода, нажать кнопку перезагрузки и посмотреть, что произойдет. Разработчик не должен сначала доказать правильность всей программы перед тем, как тестировать часть кода.

  3. Лексическая сфера. Это круто, если вы к этому не привыкли. Проще говоря, видимость переменных, и даже это , определяется структурой программы. Это устраняет класс головоломок в традиционном веб-программировании. Нет необходимости в функции повторного связывания, чтобы держать это к тому , что вы думаете , или ожидать.

  4. Настоящие занятия запекаются на языке. Понятно, что большинство разработчиков хотят работать в классах, так как большинство фреймворков для веб-разработки предлагают решение. Однако «класс» из фреймворка A не совместим с фреймворком B в традиционной веб-разработке. Дарт использует классы естественно.

  5. Функции верхнего уровня. Одна из болезненных частей Java - все должно быть помещено в класс. Это немного искусственно, особенно если вы хотите определить несколько вспомогательных функций. В Dart вы можете определять функции на верхнем уровне, вне любого класса. Это делает композицию библиотеки более естественной.

  6. Классы имеют неявные интерфейсы. Устранение явных интерфейсов упрощает язык. Больше не нужно определять IDuck везде, все, что вам сейчас нужно, это класс Duck. Поскольку каждый класс имеет неявный интерфейс, вы можете создатьMockDuck implements Duck

  7. Именованные конструкторы. Вы можете дать конструкторам имена, которые действительно помогают с удобочитаемостью. Например:var duck = new Duck.fromJson(someJsonString)

  8. Фабрика конструкторов. Фабричный шаблон довольно распространен, и приятно видеть, что это запечатлено на языке. Конструктор фабрики может возвращать одноэлементный объект, объект из кэша или объект подтипа.

  9. Изолятов. Прошли времена совместного использования изменяемого состояния между потоками (техника, подверженная ошибкам). Изолят Dart - это изолированная куча памяти, которая может выполняться в отдельном процессе или потоке. Изоляты общаются путем отправки сообщений через порты. Изолирует работу в виртуальной машине Dart и может компилировать ее для веб-работников в приложениях HTML5.

  10. Дарт компилируется в JavaScript. Это очень важно, так как JavaScript является языком общения в Интернете. Дартс приложения должны работать в современном Интернете.

  11. Сильный инструмент. Проект Dart также поставляется с редактором. Вы найдете завершение кода, рефакторинг, быстрые исправления, навигацию по коду, отладку и многое другое. Также у IntelliJ есть плагин Dart.

  12. Библиотеки. Вы можете организовать код Dart в библиотеки, чтобы упростить пространство имен и возможность повторного использования. Ваш код может импортировать библиотеку, а библиотеки могут реэкспортировать.

  13. Строковая интерполяция. Это просто приятная особенность, облегчающая создание строки:var msg = "Hello $friend!";

  14. noSuchMethod Dart - динамический язык, и вы можете обрабатывать произвольные вызовы методов с помощью noSuchMethod().

  15. Обобщения. Возможность сказать «это список яблок» дает вашим инструментам гораздо больше информации, чтобы помочь вам и заранее обнаружить потенциальные ошибки. К счастью, дженерики более простые, чем те, к которым вы, вероятно, привыкли.

  16. Перегрузка оператора. Классы Dart могут определять поведение для таких операторов, как +или -. Например, вы можете написать код, как new Point(1,1) + new Point(2,2).

Сказав все это, есть еще много библиотек JavaScript.

Лично я считаю, что в Интернете есть место для многих языков. Если приложение классное и оно работает в большинстве современных браузеров, мне все равно, на каком языке оно написано. Пока вы, разработчик, счастливы, продуктивны и запускаетесь в Интернете, это какие вопросы! :)

Сет Лэдд
источник
Многие современные языки программирования (Ruby, Scala, Python) включают в себя некоторый механизм множественного наследования, и это происходит в JDK8. Это запланировано на Дарт?
MebAlone
4
+1 к точке # 1 - динамическая типизация вполне подходит для небольших сценариев (т. Е. Уровень проверки формы). Что-нибудь намного выше этого, и я считаю, что система статической типизации обязательна.
фанкибро
2
@MebAlone Я думаю, мы увидим, что миксины появятся в Dart в ближайшем будущем.
Сет Лэдд
Удивленный моментальный снимок не упоминался - IMO - одна из лучших функций Dart.
Мифз
@mythz Я не упомянул снимки, потому что они еще не реализованы полностью. Но да, они классные!
Сет Лэдд
11

Написание довольно много C # на работе, язык очень похож на то, что я привык

Это один момент о Дарт. Javascript считается неловким языком с несколькими общими идиомами. В языке, подобном Java, часто существует естественный способ решения проблемы. Например, если вы ведете инвентаризацию таблицы, в Java или C # вы создадите класс Table.

Javascript не имеет классов, вы можете захотеть использовать прототипы, но они чувствуют себя неловко и не предоставляют такой сильной структуры и инструментов инкапсуляции. (По крайней мере, не делая никаких трюков.) Наследование, композиция и т. Д. Неудобны с прототипами Javascript. Вот почему большинство людей используют простые хэш-карты для хранения данных. Или они используют сторонние библиотеки, такие как прототип, который дает вам классный опыт.

Так что удобство - это одно, а структура - другое. Javascript просто плохо масштабируется, потому что не существует стандартного способа структурирования крупномасштабных приложений. Однако в настоящее время такие сторонние библиотеки становятся действительно популярными. (Например, backbone.js)

Дарт это что-то, чтобы решить это. Он создан для того, чтобы дать вам структурное удобство Java и, кроме того, в нем нет всех этих неуклюжих функций JS. (Большинство из них связано со слабой типизацией.)

Так что ответ да: классы, наследование, ...: "традиционный ООП". (Большинство реальных веб-приложений JS там используют основанный на обратном вызове jQuery в качестве основной структуры.) И он имеет свободную форму статической типизации, однако это не ключевой момент продажи.

Кстати: вы можете прочитать эту «внутреннюю» рассылку Google от 2010 года: будущее Javascript

У Javascript есть фундаментальные недостатки, которые нельзя исправить простым развитием языка. Мы примем двунаправленную стратегию для будущего Javascript ... Разработайте новый язык (называемый Dash), который нацелен на поддержание динамической природы Javascript, но имеет лучший профиль производительности и поддается инструментам для больших проектов. ,

Филипп
источник
5
Не все считают Javascript "неуклюжим языком". Часто существует естественный способ решения проблемы. Слишком часто для этого требуются методы (функциональное программирование, перегрузка операторов, миксины, общее программирование), которые не поддерживаются Java. Наследование, состав и т. Д. Не являются неудобными с прототипами Javascript. Это просто отличается от Java и C #, но похоже на Ruby, LUA и Perl.
Кевин Клайн
1
Ммм ... впервые я слышу что-нибудь хорошее о прототипах. Но каким образом вы видите прототипы JS, подобные Ruby?
Филипп
1
вам нужно выходить (из мира Java) чаще. Посмотрите на метапрограммирование Ruby ( ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html ), и вы увидите, что разрешение имен членов Ruby похоже (но IMO более сложное, чем) разрешение имен элементов Javascript.
Кевин Клайн
jQuery никоим образом не поддерживает форму обратного вызова так же, как API-интерфейс DOM (который он, по сути, переносит) или ядро ​​JS или Dart. Прототипы - это механизм наследования, который позволяет нам делать то, что классы не могут. Сравните классы с конструкторами функций, которые прекрасно инкапсулируют внутренние экземпляры, а не прототипы. Не то чтобы ваш средний уровень талантов / спамер-бин-получатель-спамер Java или C # dev имели малейшее представление о том, для чего нужна инкапсуляция, или среднестатистический разработчик Google имеет малейшее представление о том, как писать JavaScript.
Эрик Реппен
@ErikReppen: если вы используете jQuery исключительно для манипулирования DOM, вы можете написать код, который вряд ли нуждается в обратных вызовах, в случае, если вы объедините его с другими фреймворками, такими как backbone.js. Связывание событий с помощью jQuery очень способствует анонимным обратным вызовам. backbone.js имеет ИМХО более структурированный подход.
Филипп
5

Для меня это дает мне возможность структурировать мой код лучше, чем JavaScript с областью действия и классами.

Это похоже на Java и JavaScript, и с редактором Dart у меня была почти нулевая адаптация. Я сразу начал кодировать.

var ws = new [Moz]WebSocketнеобходимость обслуживать разные браузеры раздражает. Dart компилируется в код JavaScript, совместимый с популярными браузерами.

Моя задача в основном заключается в взаимодействии с кодом JavaScript. Я как-то нахожу способы обойти это, но было бы лучше, если бы это было частью Дартс.

Abiola
источник
Согласен, @Abiola, Дарт нуждается в лучшем взаимодействии с JavaScript. Это очень на радаре, я с нетерпением жду того, что придумает команда.
Сет Лэдд
0

Подход Java / C # определенно предвзят в сбивании JS с момента появления web 2.0. Это происходит из-за искусственного (или очень реального и необходимого) различия между языками на стороне клиента и языками на стороне сервера. Я думаю, это так, чтобы язык на стороне сервера мог «контролировать» основные проблемные области веб-приложений и отделять менее серьезный код (код пользовательского интерфейса) от бизнес-кода (на стороне сервера). Кроме того, я думаю, что Java любит оставаться серверным ядром, поскольку оно проиграло войну с графическим интерфейсом с апплетами, в основном из-за Flash и HTML 5. Теперь у вас есть RedTamarin - проект NodeJS-esque AS3, ссылающийся на плюралистическое смешанное будущее унифицированных фронтальных и бэкэнд-парадигм ,

Vodbro
источник