Dart от гугла

doublemother

http://www.dartlang.org/docs/technical-overview/index.html
Кто что думает?

kill-still

они на GWT решили таки забить наконец?
чем он кстати хуже/лучше кроме как новый синтаксис?

pilot

чем он кстати хуже/лучше кроме как новый синтаксис?
Они эту бяку будут в браузер встраивать, как я понимаю.
Изделие ничем особо не примечательно, но если Гугл захочет пиарить — сможет навязать много кому.

doublemother

чем он кстати хуже/лучше кроме как новый синтаксис?
Насколько я понимаю, в первую очередь возможностью статической типизации. Для примера, когда Фабрис Беллар писал эмулятор линукса на жаваскрипте, он его сделал запускаемым только в фф4+ и хроме, потому что юзал некие статически типизируемые массивы, которые дают охуенный прирост производительности по его словам.
Плюс, как я понял, они хотят сделать единую клиент-серверную систему типа Eliom/Ocsigen, в которой не придётся задумываться о том, как гонять данные между клиентом и сервером.

kill-still

в которой не придётся задумываться о том, как гонять данные между клиентом и сервером.
о да, это великая дилема - xml/json. :smirk:

doublemother

о да, это великая дилема - xml/json. :smirk:
Ты не понял. В правильной реализации тебе не нужно сериализовать данные, как-то указывать, куда слать ajax-запрос и прочую ненужную хренотень.
В eliom, например, благодаря клиент-серверному единству, можно написать функцию один раз, и юзать её как на клиенте, так и на сервере. Прощайте, обсуждения клиентской и серверной валидации данных! Её можно будет писать в одном месте, а использовать везде, причём клиентская версия будет исполняться на клиенте.
Ещё там точно так же можно просто сказать «хочу вызвать такой-то серверный сервис с такими-то параметрами» — и всё.
Я так понимаю, гугл хочет запилить то же самое, только со своим языком.
P.S. Кстати, «дилемма» пишется с двумя «м».

pilot

Прощайте, обсуждения клиентской и серверной валидации данных!
Чушь какая. Валидировать данные надо и на клиенте и на сервере. Причем по-разному.

Dasar

Чушь какая. Валидировать данные надо и на клиенте и на сервере. Причем по-разному.
т.е. ты не согласен с тем, что правила валидации достаточно записать в одном месте? а уж на скольки местах они будут исполняться (на клиенте, на сервере, в бд и т.д.) - это уже дело десятое.
зы
говорил именно об этом, что единый язык, единая "виртуальная" платформа поверх клиента и сервера упрощает выполнение этого.

zorin29

Ну, может, имеется в виду

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;
}

такой код без изменения может исполняться на сервере и на клиенте.

doublemother

Чушь какая. Валидировать данные надо и на клиенте и на сервере. Причем по-разному.
В чём по-разному? Я требую от пользователя логин вида [a-z]{6,16}. Я написал одну функцию-валидатор, она исполняется на сервере при приёме данных, она исполняется в виде клиентского js-кода. Если я решу разрешить пользователю использовать пробелы и кириллицу, мне достаточно будет поменять код в одном месте.

pilot

т.е. ты не согласен с тем, что правила валидации достаточно записать в одном месте? а уж на скольки местах они будут исполняться (на клиенте, на сервере, в бд и т.д.) - это уже дело десятое.
Не согласен.
Есть некоторые правила, которые можно так записать, но далеко не все. И для этих некоторых правил давно уже решения есть.
А например, для валидации какого-нибудь CVV нужно чтоб она работала только на сервере. Т.е. есть данные которые нельзя валидировать удаленно — клиенту нельзя знать слишком много + на сервере все равно все надо валидировать потому как злой хацкер пришлет по сети бяку.

okis

единая "виртуальная" платформа
зачем же виртуальная, если есть проверенный временем js?
а валидировать везде по-разному надо, имя пользователя (на существование) на клиенте, а пароль на соответствие только на сервере

pilot

такой код без изменения может исполняться на сервере и на клиенте.
Это-то да, но таких правил мало и они очень примитивные. И по-моему много где вся эта валидация уже есть.
Имхо все-таки в Dart главное это новый MIME который гугл пропихнет везде где тольок можно.

Dasar

зачем же виртуальная, если есть проверенный временем js?
он не имеет статической типизации - это плохо: не дает исполнять кучу сценариев, в первую очередь, сильно затрудняет автоматизацию обработки кода

Dasar

Есть некоторые правила, которые можно так записать, но далеко не все. И для этих некоторых правил давно уже решения есть.
А например, для валидации какого-нибудь CVV нужно чтоб она работала только на сервере.
как эти два утверждения отрицают утверждение "правила валидации достаточно записывать в одном месте"?

pilot

как эти два утверждения отрицают утверждение "правила валидации достаточно записывать в одном месте"?
Почитай внимательно и найдешь не только 2 утверждения. :smirk:

Dasar

Почитай внимательно и найдешь не только 2 утверждения. :smirk:
остальное вообще никакого отношение к этому не имеет.

pilot

Ок, с тобой поговорили.

doublemother

А например, для валидации какого-нибудь CVV нужно чтоб она работала только на сервере. Т.е. есть данные которые нельзя валидировать удаленно — клиенту нельзя знать слишком много + на сервере все равно все надо валидировать потому как злой хацкер пришлет по сети бяку.
Если тебе надо использовать код только в одном месте, тебе никто не мешает этого сделать. Возвращаясь к тому же eliom, там можно использовать секции client{{ ... }}, server{{ ... }} и shared{{ ... }}.
Про то, что при клиентской валидации серверная всё равно нужна, обмусоливалось уже стопицот раз и никто это не отрицает.

pilot

Если тебе надо использовать код только в одном месте, тебе никто не мешает этого сделать. Возвращаясь к тому же eliom, там можно использовать секции client{{ ... }}, server{{ ... }} и shared{{ ... }}.
Не понимаю зачем для этой фичи разрабатывать новый язык.
1. Похожие штуки уже есть — ты сам привел пример.
2. Там где нет — приделать легко, была бы она востребована — без проблем.
3. БОльшей универсальности не получается.
Итого: пока не вижу зачем нужен этот язык.

doublemother

а валидировать везде по-разному надо, имя пользователя (на существование) на клиенте, а пароль на соответствие только на сервере
Бред же. А если я это имя пользователя возьму, да и пришлю на сервер? Ну, я там хацкер, или нас двое ввели этот логин, прошли клиентскую валидацию, а потом нажали кнопку "зарегистрироваться". Что тогда делать?
Пароль на клиенте, очевидно проверить просто нельзя, потому что на клиенте нет базы, но можно прозрачно вызвать сервис авторизации и залогиниться по сути аяксом, без перезагрузки страницы, как некоторые сайты делают.

pilot

можно
А нужно?

doublemother

Не понимаю зачем для этой фичи разрабатывать новый язык.
Тоже не знаю. Гугл из аналогов приводит только Node.js и GWT. Очевидно, по совокупности идей решили делать с нуля, а не допиливать что-то. Насколько я знаю, они проталкивают этот язык в качестве полной замены яваскрипта в браузеры.

doublemother

А нужно?
Не нужно, не используешь, проблем-то?
Вот ещё пример, есть у тебя постраничный вывод каких-то результатов. Гораздо дешевле и удобнее получать от сервера только данные для каждой страницы, а рисовать клиентом. Но ведь можно же дать кому-то ссылку на определенную страницу (ну, или js отключен у параноика). А тут сервер оп! Взял и заиспользовал на своей стороне ту же самую функцию и срендерил результат. Профит же.

pilot

А тут сервер оп! Взял и заиспользовал на своей стороне ту же самую функцию и срендерил результат. Профит же.
Вшмышле ты REST изобрел?

pilot

Очевидно, по совокупности идей решили делать с нуля, а не допиливать что-то
Вот я и хочу увидеть описание "совокупности идей" — не в виде "теперь структурно и по-новому типизировано" а в виде "это позволит делать то-то и то-то" — на сайте не нашел.

doublemother

Вшмышле ты REST изобрел?
Причём тут REST?

pilot

Причём тут REST?
Ну как же: то ходишь программно каким-нибудь жаваскриптом, а то браузером и видишь ту же информацию. :confused:

Dasar

вообще сама постановка задачи тривиальная:
выделить из полного правила валидации два частичных правила: клиентское и серверное.
для серверной части основным критерием является безопасность (жестко) и скорость выполнения(нежестко)
для клиентской части основными критериями является сокрытие секретных данных (жестко скорость загрузки (нежестко трафик(нежестко скорость выполнения(нежестко)
правило валидации можно представить как логическое утверждение от множества функций:
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тактов и т.д., двух подграфов с заданными критериями.

doublemother

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.
Первые две "проблемы" — какая-то маркетологическая херня, остальные три собственно привели уже.

doublemother

Ну как же: то ходишь программно каким-нибудь жаваскриптом, а то браузером и видишь ту же информацию. :confused:
Вопрос в том, что рендеринг этой информации, как сервером, так и жаваскриптом, производится одним и тем же кодом.

Dasar

Итого: пока не вижу зачем нужен этот язык.
потому что ты занимаешься проектами с нуля, и у тебя нет огромного числа задач вида:
поправить ввод карточных данных в 142 проектах написанных разными людьми разными командами в разное время (в том числе, лет 20 назад
убедиться что 309 проектах нет проблемы утечки данных, аналогичной той же, что была выявлена в 310 проекте и т.д.

okis

в итоге у тебя получается целый dsl для задачи валидации, который выбирает источники данных и сами данные для отправки. с другой стороны, более общего и простого одновременно решения я не могу придумать.

okis

убедиться что 309 проектах нет проблемы утечки данных, аналогичной той же, что была выявлена в 310 проекте и т.д.
а у гугла стопицот одинаковых проектов, или нет?

pilot

потому что ты занимаешься проектами с нуля, и у тебя нет огромного числа задач вида:
поправить ввод карточных данных в 142 проектах написанных разными людьми разными командами в разное время (в том числе, лет 20 назад
убедиться что 309 проектах нет проблемы утечки данных, аналогичной той же, что была выявлена в 310 проекте и т.д.
И чем мне поможет новый язык? Мы занимаемся проектами с 0, как раз мы и есть целевая аудитория для всяких таких новых фиговин. Надо только внятное объяснение увидеть "почему разработка приложений на такой фигне быстрее и проще". Опять же — его нет.

Dasar

целый dsl для задачи валидации
почему именно dsl? а не просто еще одна модель?

Dasar

а у гугла стопицот одинаковых проектов, или нет?
хз, но по крайней мере их проекты глючат по разному в одних и тех же местах.
поэтому все-таки они скорее всего разные, и написанные разными командами.

Dasar

И чем мне поможет новый язык?
сам по себе ничем
но если он будет статически типизированным, и будет уметь исполняться(или транслироваться) на клиентской и серверной стороне, то это поможет.
почему разработка приложений на такой фигне быстрее и проще
еще раз повторю, что для старых проектов важнее дешевизна сопровождения (найти куда внести изменение, внести изменение, убедится, что ничего не испортилось; убедиться, что определенный набор правил справедлив для всего кода и т.д. чем быстрота и простота разработки.
а динамические языки (как тот же js) этим похвастаться не могут.

yroslavasako

Что-то по описанию: быстрое, универсальное, в вебе и статически типизированное - получается ещё одна java.

doublemother

Что-то по описанию: быстрое, универсальное, в вебе и статически типизированное получается ещё одна java.
Толсто.

Dasar

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

okis

В приведенном примере (видимо, из-за краткости как мне показалось, недостаточно хорошо разделены логика и представление этих условий. Как я вижу, логика — это сами проверки, а представление — уровень их выполнения, видимость данных и т.п. Поэтому ajax(server_rule, user, cvv) может выполниться только на клиенте, добавление такого условия в секцию сервера должно вызывать ошибку, но из кода этого не видно. Непонятно, как это будет интерпретироваться, вот я и представил, что это dsl, в котором функции будут, условно говоря, в своей сигнатуре содержать слова сервер, клиент, или ещё какие, ограничивающие область применимости.
Если это делать без dsl, то может получиться сложная для сопряжения библиотека для такой, казалось бы, незначительной (по сложности) задачи, а dsl можно встроить в логику так, что если таких условий не написать, ничего не заработает.

pilot

у java-ы есть серьезный недостаток: она написана не нами (не гуглом или другими словами развитие java-ы контролирует компания, которой в целом насрать как там java работает в вебе, и что в языке не хватает для успешной работы в таких условиях.
Ну наконец-то нормальное бизнес-объяснение — "хотим свою жаву потому что переживаем по поводу патентов". Совсем не то что на сайте написано.

pilot

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

okis

Есть ещё вариант, что нет других вариантов, даже не из-за патентов. Просто делать форк какой-нибудь скалы, например, не очень нужно, всё время надо будет оглядываться на основное дерево, либо уходить в независимую ветку, которая будет через год-другой отдельным диалектом. Выходит, что разумнее всего сделать новый инструмент ни на кого не оглядываясь.
Противоположный пример развития: mysql после покупки ораклом. Развелось куча форков, все фичи переписываются разными командами, в результате интеграция в целом затруднена.

Dasar

Если это делать без dsl
с точки зрения синтаксиса - для задания таких метаданных достаточно существующего синтаксиса: через атрибуты (или аналоги).
с точки зрения обработки при вводе (подсказки, внятные ошибки компиляции и т.д. то необходимо набор типов, которые описывают эту модель, с точки зрения конечной обработки (разделение на части и т.д.) - это внешняя библиотека.
т.е. я плохо понимаю, где здесь место dsl
тут скорее нужен не dsl, а возможности вида:
явная возможность исполнения кода на уровне компиляции,
сам код программ является данным уровня компиляции.
например, едва ли захочется руками для каждой функции задавать кол-во тактов исполнения, в то же время оценить для большинства функций - это можно и автоматически.

okis

оценить для большинства функций - это можно и автоматически.
такого я что-то ни в одном известном мне языке не припоминаю. т.е., если не вводить dsl, то придётся решить эту задачу для существующего языка.
остальное реализуется, но в целом от самомодифицирующегося кода ушли достаточно давно из-за проблем со сложностью, тогда как от такой подсистемы, наоборот, ожидается простота.

Dasar

Для этого вроде тесты придумали?
это на порядок, а то и на три дороже, чем автоматическая проверка корректности компилятором.
просто посчитай сколько в реальной программе путей выполнения, и вспомни, что должен быть 1 тест на 1 путь выполнения даже для поиска простой опечатки.

Dasar

остальное реализуется, но в целом от самомодифицирующегося кода
а как же компиляция и jit - они разве не тем же самым занимаются?
даже современный процессор, и то модификацией кода занимается.
простота простоте рознь.
ожидается, что штука будет достаточная простая для понимания, а не для реального исполнения.

pilot

Есть ещё вариант, что нет других вариантов, даже не из-за патентов.
Нет других вариантов для чего? Они ж сами аналоги приводят — GWT & Node.js

yroslavasako

Ну наконец-то нормальное бизнес-объяснение — "хотим свою жаву потому что переживаем по поводу патентов". Совсем не то что на сайте написано.
Именно это я и имел в виду. Только очень уж мне не нравится, что вместо такого честного ответа гугл развесил по сайту сопли маркетологов. Сделают что-нибудь чуть лучше чем JS, распиарят и заставят кучу прогеров писать на этом говне, потому что он поддерживается в google chrome os. В общем, компания зла идёт по протоптанному пути, прямо вслед за жоппсом

okis

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

pilot

это на порядок, а то и на три дороже, чем автоматическая проверка корректности компилятором.
Как посчитал?

Dasar

и соответственно еще раз повторю, что для статически-типизированного кода намного проще доказать правильность таких автоматических модификаций кода

pilot

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

okis

да в туже сторону кодогенерации под разные платформы в сочетании со статической типизацией

Dasar

Как посчитал?
можно, например, такую модель взять для проверки устойчивости языка на опечатки:
берем текст программы на статически и динамически-типизированных языках и случайно меняем(пропускаем или добавляем) один литерал(знак, идентификатор, ключевое слово и т.д.) на другой, и смотрим какое кол-во тестов
необходимо в одном случае, и в другом - чтобы выявить эти опечатки с заданной точностью.

pilot

Ичо? Ты уже посчитал? Давай результаты.

Dasar

Ичо? Ты уже посчитал? Давай результаты.
только после того, как что-то ценное будет и от тебя.
зы
быть критиком очень просто, вот только это не привносит никакой новой пользы, с тем же успехом тебя можно заменить на бота, которые будет рандомно постить: это неправильно, так не бывает, это всё фигня, это тривиально, это не конкретно. Все эти утверждения одинаково верны и неверны одновременно, и не несут никакой информации

pilot

только после того, как что-то ценное будет и от тебя.
"И" кагбы намекает что ты сказал что-то ценное? Ты высказал дурацкие утверждения, я тебе говорю "докажи", ты слился. Где тут что ценное от меня требовалось — не вижу.

Dasar

"И" кагбы намекает что ты сказал что-то ценное?
да. потому что мои сообщения как минимум информационно насыщены. эта информация может быть верной, может быть нет, но она там есть.
твои же сообщения информации не содержат

pilot

да. потому что мои сообщения как минимум информационно насыщены. эта информация может быть верной, может быть нет, но она там есть.
Без вреда для обсуждения можешь заменить ее на пробелы :grin:

Dasar

Ты высказал дурацкие утверждения, я тебе говорю "докажи", ты слился.
я пришел на форум не для того, чтобы тебе что-то доказать, а для совсем другого.
у меня есть какая-то информация: какой-то опыт, какие-то предположения и т.д. и я хочу этой информацией обменяться, повысить ее достоверность, уточнить рамки применимости и т.д.
в этом формате я и готов общаться, в остальных - не очень.

pilot

я пришел на форум не для того, чтобы тебе что-то доказать, а для совсем другого.
Сопли какие-то.
Ты думай позитивно: ты свои предположения высказал, но не осиливаешь их обосновать. Значит это повод чтоб подумать о проблеме еще разок. Ясно?

Dasar

Ты думай позитивно: ты свои предположения высказал, но не осиливаешь их обосновать. Значит это повод чтоб подумать о проблеме еще разок. Ясно?
ты лучше подумай реалистично: для такого вывода - ты для этого зачем? я и сам знаю, какие выводы я могу обосновать за минуту, а какие нет.
и самое главное: если я знаю, что этот вывод верен, но для выписывания доказательства необходимо полчаса, то зачем мне эти полчаса тратить для доказательства чего-либо тебе?

doublemother

Сопли какие-то.
Ты думай позитивно: ты свои предположения высказал, но не осиливаешь их обосновать. Значит это повод чтоб подумать о проблеме еще разок. Ясно?
Посмотри на проблему в другом ключе. Ты за весь топик оставил 21 сообщение. Сколько из них было информативных? Сколько хоть сколько-нибудь полезных? Не повод ли это подумать ещё разок о их необходимости?

pilot

Обязательно подумаю как только ты расскажешь что такое по-твоему полезность и информативность.
PS: сожалею что и тебя расстроил своим неверием в причастность даркгрея к космическим знаниям :-(

doublemother

Ты меня не расстроил и про космические знания темно-серого я ничего не знаю, просто ты откровенно хамишь, при том, что самой ценной мыслью, которую ты сам за весь топик высказал, было «непонятно, зачем оно нужно, единая клиент-серверная платформа есть уже в виде node.js/gwt, а в остальных местах впилить очень легко, но никому не нужно».

pilot

Ты меня не расстроил и про космические знания темно-серого я ничего не знаю, просто ты откровенно хамишь, при том, что самой ценной мыслью, которую ты сам за весь топик высказал, было «непонятно, зачем оно нужно, единая клиент-серверная платформа есть уже в виде node.js/gwt, а в остальных местах впилить очень легко, но никому не нужно».
Ну чувак, давай ты определение "ценности" дашь сначала, а потом будешь про нее рассказывать. Я ж тебе постом ранее это сказал.
Ты хочешь обсудить поделку от Гугла, обсуждение без позиции "зачем это надо" было бы неполным, а то что за весь тред вы не осилили сказать зачем — ваша проблема и вполне себе ценность.
Если вдруг ты попробуешь ценность выражать не в количестве буковок, конечно. :grin:

Dasar

по-твоему полезность и информативност
информативность: до скольки символов можно сжать информацию без значимых потерь.
твои сообщения сжимаются до двух символов:
это не так * достоверность _No_
как при этом оценить твою достоверность - хз
полезность, наверное, можно оценивать как: какие выводы (и сколько) можно сделать на основе полученной информации.
из информации "это не так * достоверность _No_" - хз, какой вывод можно сделать.

doublemother

обсуждение без позиции "зачем это надо" было бы неполным, а то что за весь тред вы не осилили сказать зачем — ваша проблема и вполне себе ценность.
Это не позиция. Позицией было бы "это не надо" с обоснованием.
Юзкейсы для "зачем это надо" я выше привёл.
Про информативность тебе даркгрэй выше всё написал, а достоверность (при условии отсутствия какого-либо аргументированного подтверждения твоей позиции, как мы сейчас наблюдаем) равна нулю, следовательно, и ценность такая же.

pilot

А ты тоже вмкшник? :D

doublemother

Кстати, я тут увидел, как выглядит скомпиленный в js хеллоуворлд на дарте: http://gist.github.com/1277224
strip unused они для себя, похоже, ещё не открыли.
Оставить комментарий
Имя или ник:
Комментарий: