Dart от гугла
чем он кстати хуже/лучше кроме как новый синтаксис?
чем он кстати хуже/лучше кроме как новый синтаксис?Они эту бяку будут в браузер встраивать, как я понимаю.
Изделие ничем особо не примечательно, но если Гугл захочет пиарить — сможет навязать много кому.
чем он кстати хуже/лучше кроме как новый синтаксис?Насколько я понимаю, в первую очередь возможностью статической типизации. Для примера, когда Фабрис Беллар писал эмулятор линукса на жаваскрипте, он его сделал запускаемым только в фф4+ и хроме, потому что юзал некие статически типизируемые массивы, которые дают охуенный прирост производительности по его словам.
Плюс, как я понял, они хотят сделать единую клиент-серверную систему типа Eliom/Ocsigen, в которой не придётся задумываться о том, как гонять данные между клиентом и сервером.
в которой не придётся задумываться о том, как гонять данные между клиентом и сервером.о да, это великая дилема - xml/json.
о да, это великая дилема - xml/json.Ты не понял. В правильной реализации тебе не нужно сериализовать данные, как-то указывать, куда слать ajax-запрос и прочую ненужную хренотень.
В eliom, например, благодаря клиент-серверному единству, можно написать функцию один раз, и юзать её как на клиенте, так и на сервере. Прощайте, обсуждения клиентской и серверной валидации данных! Её можно будет писать в одном месте, а использовать везде, причём клиентская версия будет исполняться на клиенте.
Ещё там точно так же можно просто сказать «хочу вызвать такой-то серверный сервис с такими-то параметрами» — и всё.
Я так понимаю, гугл хочет запилить то же самое, только со своим языком.
P.S. Кстати, «дилемма» пишется с двумя «м».
Прощайте, обсуждения клиентской и серверной валидации данных!Чушь какая. Валидировать данные надо и на клиенте и на сервере. Причем по-разному.
Чушь какая. Валидировать данные надо и на клиенте и на сервере. Причем по-разному.т.е. ты не согласен с тем, что правила валидации достаточно записать в одном месте? а уж на скольки местах они будут исполняться (на клиенте, на сервере, в бд и т.д.) - это уже дело десятое.
зы
говорил именно об этом, что единый язык, единая "виртуальная" платформа поверх клиента и сервера упрощает выполнение этого.
function IsValidPhoneNumber(str){
var valid = isregexp(str, "7\d{10}");
valid && = ServerInstance == null || !ServerInstance.found_in_database(str) && ServerInstance.is_russian_mobile_phone(str);
return valid;
}
такой код без изменения может исполняться на сервере и на клиенте.
Чушь какая. Валидировать данные надо и на клиенте и на сервере. Причем по-разному.В чём по-разному? Я требую от пользователя логин вида [a-z]{6,16}. Я написал одну функцию-валидатор, она исполняется на сервере при приёме данных, она исполняется в виде клиентского js-кода. Если я решу разрешить пользователю использовать пробелы и кириллицу, мне достаточно будет поменять код в одном месте.
т.е. ты не согласен с тем, что правила валидации достаточно записать в одном месте? а уж на скольки местах они будут исполняться (на клиенте, на сервере, в бд и т.д.) - это уже дело десятое.Не согласен.
Есть некоторые правила, которые можно так записать, но далеко не все. И для этих некоторых правил давно уже решения есть.
А например, для валидации какого-нибудь CVV нужно чтоб она работала только на сервере. Т.е. есть данные которые нельзя валидировать удаленно — клиенту нельзя знать слишком много + на сервере все равно все надо валидировать потому как злой хацкер пришлет по сети бяку.
единая "виртуальная" платформазачем же виртуальная, если есть проверенный временем js?
а валидировать везде по-разному надо, имя пользователя (на существование) на клиенте, а пароль на соответствие только на сервере
такой код без изменения может исполняться на сервере и на клиенте.Это-то да, но таких правил мало и они очень примитивные. И по-моему много где вся эта валидация уже есть.
Имхо все-таки в Dart главное это новый MIME который гугл пропихнет везде где тольок можно.
зачем же виртуальная, если есть проверенный временем js?он не имеет статической типизации - это плохо: не дает исполнять кучу сценариев, в первую очередь, сильно затрудняет автоматизацию обработки кода
Есть некоторые правила, которые можно так записать, но далеко не все. И для этих некоторых правил давно уже решения есть.как эти два утверждения отрицают утверждение "правила валидации достаточно записывать в одном месте"?
А например, для валидации какого-нибудь CVV нужно чтоб она работала только на сервере.
как эти два утверждения отрицают утверждение "правила валидации достаточно записывать в одном месте"?Почитай внимательно и найдешь не только 2 утверждения.
Почитай внимательно и найдешь не только 2 утверждения.остальное вообще никакого отношение к этому не имеет.
Ок, с тобой поговорили.
А например, для валидации какого-нибудь CVV нужно чтоб она работала только на сервере. Т.е. есть данные которые нельзя валидировать удаленно — клиенту нельзя знать слишком много + на сервере все равно все надо валидировать потому как злой хацкер пришлет по сети бяку.Если тебе надо использовать код только в одном месте, тебе никто не мешает этого сделать. Возвращаясь к тому же eliom, там можно использовать секции client{{ ... }}, server{{ ... }} и shared{{ ... }}.
Про то, что при клиентской валидации серверная всё равно нужна, обмусоливалось уже стопицот раз и никто это не отрицает.
Если тебе надо использовать код только в одном месте, тебе никто не мешает этого сделать. Возвращаясь к тому же eliom, там можно использовать секции client{{ ... }}, server{{ ... }} и shared{{ ... }}.Не понимаю зачем для этой фичи разрабатывать новый язык.
1. Похожие штуки уже есть — ты сам привел пример.
2. Там где нет — приделать легко, была бы она востребована — без проблем.
3. БОльшей универсальности не получается.
Итого: пока не вижу зачем нужен этот язык.
а валидировать везде по-разному надо, имя пользователя (на существование) на клиенте, а пароль на соответствие только на сервереБред же. А если я это имя пользователя возьму, да и пришлю на сервер? Ну, я там хацкер, или нас двое ввели этот логин, прошли клиентскую валидацию, а потом нажали кнопку "зарегистрироваться". Что тогда делать?
Пароль на клиенте, очевидно проверить просто нельзя, потому что на клиенте нет базы, но можно прозрачно вызвать сервис авторизации и залогиниться по сути аяксом, без перезагрузки страницы, как некоторые сайты делают.
можноА нужно?
Не понимаю зачем для этой фичи разрабатывать новый язык.Тоже не знаю. Гугл из аналогов приводит только Node.js и GWT. Очевидно, по совокупности идей решили делать с нуля, а не допиливать что-то. Насколько я знаю, они проталкивают этот язык в качестве полной замены яваскрипта в браузеры.
А нужно?Не нужно, не используешь, проблем-то?
Вот ещё пример, есть у тебя постраничный вывод каких-то результатов. Гораздо дешевле и удобнее получать от сервера только данные для каждой страницы, а рисовать клиентом. Но ведь можно же дать кому-то ссылку на определенную страницу (ну, или js отключен у параноика). А тут сервер оп! Взял и заиспользовал на своей стороне ту же самую функцию и срендерил результат. Профит же.
А тут сервер оп! Взял и заиспользовал на своей стороне ту же самую функцию и срендерил результат. Профит же.Вшмышле ты REST изобрел?
Очевидно, по совокупности идей решили делать с нуля, а не допиливать что-тоВот я и хочу увидеть описание "совокупности идей" — не в виде "теперь структурно и по-новому типизировано" а в виде "это позволит делать то-то и то-то" — на сайте не нашел.
Вшмышле ты REST изобрел?Причём тут REST?
Причём тут REST?Ну как же: то ходишь программно каким-нибудь жаваскриптом, а то браузером и видишь ту же информацию.
выделить из полного правила валидации два частичных правила: клиентское и серверное.
для серверной части основным критерием является безопасность (жестко) и скорость выполнения(нежестко)
для клиентской части основными критериями является сокрытие секретных данных (жестко скорость загрузки (нежестко трафик(нежестко скорость выполнения(нежестко)
правило валидации можно представить как логическое утверждение от множества функций:
if (user-is-valid(user) && cvv-is-valid(cvv) && !(email-is-valid(email) || phone-is-valid(phone
return ok;
при этом каждая функция - это есть ранее замкнутая функция на ряд данных(или можно считать ее объектом приходящих с сервера, в том числе таким данным является и код самой функции
после разделения это будет выглядеть как:
function client_rule(...)
{
return user-is-valid(user) && !(email-is-valid(email) || phone-is-valid(phone && ajax(server_rule, user, cvv);
}
function server_rule(...)
{
return user-is-unique(...) && cvv-is-valid(cvv);
}
в итоге, задача сводится к выделению из графа, где узлы помечены аттрибутами: секретно, 100байт, 1000тактов и т.д., двух подграфов с заданными критериями.
The Dart programming language is presented here in its early stages. The following design goals will guide the continued evolution and refinement of this open source project:Первые две "проблемы" — какая-то маркетологическая херня, остальные три собственно привели уже.
* Create a structured yet flexible programming language for the web.
* Make Dart feel familiar and natural to programmers and thus easy to learn.
* Ensure that all Dart language constructs allow high performance and fast application startup.
* Make Dart appropriate for the full range of devices on the web—including phones, tablets, laptops, and servers.
* Provide tools that make Dart run fast across all major modern browsers.
These design goals address the following problems currently facing web developers:
* Small scripts often evolve into large web applications with no apparent structure—they’re hard to debug and difficult to maintain. In addition, these monolithic apps can’t be split up so that different teams can work on them independently. It’s difficult to be productive when a web application gets large.
* Scripting languages are popular because their lightweight nature makes it easy to write code quickly. Generally, the contracts with other parts of an application are conveyed in comments rather than in the language structure itself. As a result, it’s difficult for someone other than the author to read and maintain a particular piece of code.
* With existing languages, the developer is forced to make a choice between static and dynamic languages. Traditional static languages require heavyweight toolchains and a coding style that can feel inflexible and overly constrained.
* Developers have not been able to create homogeneous systems that encompass both client and server, except for a few cases such as Node.js and Google Web Toolkit (GWT).
* Different languages and formats entail context switches that are cumbersome and add complexity to the coding process.
Ну как же: то ходишь программно каким-нибудь жаваскриптом, а то браузером и видишь ту же информацию.Вопрос в том, что рендеринг этой информации, как сервером, так и жаваскриптом, производится одним и тем же кодом.
Итого: пока не вижу зачем нужен этот язык.потому что ты занимаешься проектами с нуля, и у тебя нет огромного числа задач вида:
поправить ввод карточных данных в 142 проектах написанных разными людьми разными командами в разное время (в том числе, лет 20 назад
убедиться что 309 проектах нет проблемы утечки данных, аналогичной той же, что была выявлена в 310 проекте и т.д.
в итоге у тебя получается целый dsl для задачи валидации, который выбирает источники данных и сами данные для отправки. с другой стороны, более общего и простого одновременно решения я не могу придумать.
убедиться что 309 проектах нет проблемы утечки данных, аналогичной той же, что была выявлена в 310 проекте и т.д.а у гугла стопицот одинаковых проектов, или нет?
потому что ты занимаешься проектами с нуля, и у тебя нет огромного числа задач вида:И чем мне поможет новый язык? Мы занимаемся проектами с 0, как раз мы и есть целевая аудитория для всяких таких новых фиговин. Надо только внятное объяснение увидеть "почему разработка приложений на такой фигне быстрее и проще". Опять же — его нет.
поправить ввод карточных данных в 142 проектах написанных разными людьми разными командами в разное время (в том числе, лет 20 назад
убедиться что 309 проектах нет проблемы утечки данных, аналогичной той же, что была выявлена в 310 проекте и т.д.
целый dsl для задачи валидациипочему именно dsl? а не просто еще одна модель?
а у гугла стопицот одинаковых проектов, или нет?хз, но по крайней мере их проекты глючат по разному в одних и тех же местах.
поэтому все-таки они скорее всего разные, и написанные разными командами.
И чем мне поможет новый язык?сам по себе ничем
но если он будет статически типизированным, и будет уметь исполняться(или транслироваться) на клиентской и серверной стороне, то это поможет.
почему разработка приложений на такой фигне быстрее и прощееще раз повторю, что для старых проектов важнее дешевизна сопровождения (найти куда внести изменение, внести изменение, убедится, что ничего не испортилось; убедиться, что определенный набор правил справедлив для всего кода и т.д. чем быстрота и простота разработки.
а динамические языки (как тот же js) этим похвастаться не могут.
Что-то по описанию: быстрое, универсальное, в вебе и статически типизированное - получается ещё одна java.
Что-то по описанию: быстрое, универсальное, в вебе и статически типизированное получается ещё одна java.Толсто.
у java-ы есть серьезный недостаток: она написана не нами (не гуглом или другими словами развитие java-ы контролирует компания, которой в целом насрать как там java работает в вебе, и что в языке не хватает для успешной работы в таких условиях.
Если это делать без dsl, то может получиться сложная для сопряжения библиотека для такой, казалось бы, незначительной (по сложности) задачи, а dsl можно встроить в логику так, что если таких условий не написать, ничего не заработает.
у java-ы есть серьезный недостаток: она написана не нами (не гуглом или другими словами развитие java-ы контролирует компания, которой в целом насрать как там java работает в вебе, и что в языке не хватает для успешной работы в таких условиях.Ну наконец-то нормальное бизнес-объяснение — "хотим свою жаву потому что переживаем по поводу патентов". Совсем не то что на сайте написано.
важнее дешевизна сопровождения (найти куда внести изменение, внести изменение, убедится, что ничего не испортилось; убедиться, что определенный набор правил справедлив для всего кода и т.д. чем быстрота и простота разработки.Для этого вроде тесты придумали?
Противоположный пример развития: mysql после покупки ораклом. Развелось куча форков, все фичи переписываются разными командами, в результате интеграция в целом затруднена.
Если это делать без dslс точки зрения синтаксиса - для задания таких метаданных достаточно существующего синтаксиса: через атрибуты (или аналоги).
с точки зрения обработки при вводе (подсказки, внятные ошибки компиляции и т.д. то необходимо набор типов, которые описывают эту модель, с точки зрения конечной обработки (разделение на части и т.д.) - это внешняя библиотека.
т.е. я плохо понимаю, где здесь место dsl
тут скорее нужен не dsl, а возможности вида:
явная возможность исполнения кода на уровне компиляции,
сам код программ является данным уровня компиляции.
например, едва ли захочется руками для каждой функции задавать кол-во тактов исполнения, в то же время оценить для большинства функций - это можно и автоматически.
оценить для большинства функций - это можно и автоматически.такого я что-то ни в одном известном мне языке не припоминаю. т.е., если не вводить dsl, то придётся решить эту задачу для существующего языка.
остальное реализуется, но в целом от самомодифицирующегося кода ушли достаточно давно из-за проблем со сложностью, тогда как от такой подсистемы, наоборот, ожидается простота.
Для этого вроде тесты придумали?это на порядок, а то и на три дороже, чем автоматическая проверка корректности компилятором.
просто посчитай сколько в реальной программе путей выполнения, и вспомни, что должен быть 1 тест на 1 путь выполнения даже для поиска простой опечатки.
остальное реализуется, но в целом от самомодифицирующегося кодаа как же компиляция и jit - они разве не тем же самым занимаются?
даже современный процессор, и то модификацией кода занимается.
простота простоте рознь.
ожидается, что штука будет достаточная простая для понимания, а не для реального исполнения.
Есть ещё вариант, что нет других вариантов, даже не из-за патентов.Нет других вариантов для чего? Они ж сами аналоги приводят — GWT & Node.js
Ну наконец-то нормальное бизнес-объяснение — "хотим свою жаву потому что переживаем по поводу патентов". Совсем не то что на сайте написано.Именно это я и имел в виду. Только очень уж мне не нравится, что вместо такого честного ответа гугл развесил по сайту сопли маркетологов. Сделают что-нибудь чуть лучше чем JS, распиарят и заставят кучу прогеров писать на этом говне, потому что он поддерживается в google chrome os. В общем, компания зла идёт по протоптанному пути, прямо вслед за жоппсом
Я про это написал, что двигать уже сложившиеся языки с написанными на них программами и комьюнити сложнее, чем делать новые.
это на порядок, а то и на три дороже, чем автоматическая проверка корректности компилятором.Как посчитал?
и соответственно еще раз повторю, что для статически-типизированного кода намного проще доказать правильность таких автоматических модификаций кода
Я про это написал, что двигать уже сложившиеся языки с написанными на них программами и комьюнити сложнее, чем делать новые.Дык куда двигать-то?
да в туже сторону кодогенерации под разные платформы в сочетании со статической типизацией
Как посчитал?можно, например, такую модель взять для проверки устойчивости языка на опечатки:
берем текст программы на статически и динамически-типизированных языках и случайно меняем(пропускаем или добавляем) один литерал(знак, идентификатор, ключевое слово и т.д.) на другой, и смотрим какое кол-во тестов
необходимо в одном случае, и в другом - чтобы выявить эти опечатки с заданной точностью.
Ичо? Ты уже посчитал? Давай результаты.
Ичо? Ты уже посчитал? Давай результаты.только после того, как что-то ценное будет и от тебя.
зы
быть критиком очень просто, вот только это не привносит никакой новой пользы, с тем же успехом тебя можно заменить на бота, которые будет рандомно постить: это неправильно, так не бывает, это всё фигня, это тривиально, это не конкретно. Все эти утверждения одинаково верны и неверны одновременно, и не несут никакой информации
только после того, как что-то ценное будет и от тебя."И" кагбы намекает что ты сказал что-то ценное? Ты высказал дурацкие утверждения, я тебе говорю "докажи", ты слился. Где тут что ценное от меня требовалось — не вижу.
"И" кагбы намекает что ты сказал что-то ценное?да. потому что мои сообщения как минимум информационно насыщены. эта информация может быть верной, может быть нет, но она там есть.
твои же сообщения информации не содержат
да. потому что мои сообщения как минимум информационно насыщены. эта информация может быть верной, может быть нет, но она там есть.Без вреда для обсуждения можешь заменить ее на пробелы
Ты высказал дурацкие утверждения, я тебе говорю "докажи", ты слился.я пришел на форум не для того, чтобы тебе что-то доказать, а для совсем другого.
у меня есть какая-то информация: какой-то опыт, какие-то предположения и т.д. и я хочу этой информацией обменяться, повысить ее достоверность, уточнить рамки применимости и т.д.
в этом формате я и готов общаться, в остальных - не очень.
я пришел на форум не для того, чтобы тебе что-то доказать, а для совсем другого.Сопли какие-то.
Ты думай позитивно: ты свои предположения высказал, но не осиливаешь их обосновать. Значит это повод чтоб подумать о проблеме еще разок. Ясно?
Ты думай позитивно: ты свои предположения высказал, но не осиливаешь их обосновать. Значит это повод чтоб подумать о проблеме еще разок. Ясно?ты лучше подумай реалистично: для такого вывода - ты для этого зачем? я и сам знаю, какие выводы я могу обосновать за минуту, а какие нет.
и самое главное: если я знаю, что этот вывод верен, но для выписывания доказательства необходимо полчаса, то зачем мне эти полчаса тратить для доказательства чего-либо тебе?
Сопли какие-то.Посмотри на проблему в другом ключе. Ты за весь топик оставил 21 сообщение. Сколько из них было информативных? Сколько хоть сколько-нибудь полезных? Не повод ли это подумать ещё разок о их необходимости?
Ты думай позитивно: ты свои предположения высказал, но не осиливаешь их обосновать. Значит это повод чтоб подумать о проблеме еще разок. Ясно?
PS: сожалею что и тебя расстроил своим неверием в причастность даркгрея к космическим знаниям :-(
Ты меня не расстроил и про космические знания темно-серого я ничего не знаю, просто ты откровенно хамишь, при том, что самой ценной мыслью, которую ты сам за весь топик высказал, было «непонятно, зачем оно нужно, единая клиент-серверная платформа есть уже в виде node.js/gwt, а в остальных местах впилить очень легко, но никому не нужно».
Ты меня не расстроил и про космические знания темно-серого я ничего не знаю, просто ты откровенно хамишь, при том, что самой ценной мыслью, которую ты сам за весь топик высказал, было «непонятно, зачем оно нужно, единая клиент-серверная платформа есть уже в виде node.js/gwt, а в остальных местах впилить очень легко, но никому не нужно».Ну чувак, давай ты определение "ценности" дашь сначала, а потом будешь про нее рассказывать. Я ж тебе постом ранее это сказал.
Ты хочешь обсудить поделку от Гугла, обсуждение без позиции "зачем это надо" было бы неполным, а то что за весь тред вы не осилили сказать зачем — ваша проблема и вполне себе ценность.
Если вдруг ты попробуешь ценность выражать не в количестве буковок, конечно.
по-твоему полезность и информативностинформативность: до скольки символов можно сжать информацию без значимых потерь.
твои сообщения сжимаются до двух символов:
это не так * достоверность _No_
как при этом оценить твою достоверность - хз
полезность, наверное, можно оценивать как: какие выводы (и сколько) можно сделать на основе полученной информации.
из информации "это не так * достоверность _No_" - хз, какой вывод можно сделать.
обсуждение без позиции "зачем это надо" было бы неполным, а то что за весь тред вы не осилили сказать зачем — ваша проблема и вполне себе ценность.Это не позиция. Позицией было бы "это не надо" с обоснованием.
Юзкейсы для "зачем это надо" я выше привёл.
Про информативность тебе даркгрэй выше всё написал, а достоверность (при условии отсутствия какого-либо аргументированного подтверждения твоей позиции, как мы сейчас наблюдаем) равна нулю, следовательно, и ценность такая же.
А ты тоже вмкшник?
http://gist.github.com/1277224
strip unused они для себя, похоже, ещё не открыли.
Кстати, я тут увидел, как выглядит скомпиленный в js хеллоуворлд на дарте: strip unused они для себя, похоже, ещё не открыли.
Оставить комментарий
doublemother
http://www.dartlang.org/docs/technical-overview/index.htmlКто что думает?