Анонсирован (https://medium.com/dartlang/announcing-dart-2-80ba01f43b6) язык программирования Dart 2 (https://www.dartlang.org/), который пока находится на стадии формирования экспериментальных выпусков (https://github.com/dart-lang/sdk/releases). Dart 2 является не столько новой значительной веткой, сколько общим переосмыслением целей и задач проекта. Разработчики видят Dart 2 в качестве языка, оптимизированного для разработки компонентов для Web и мобильных систем, выполняемых на стороне клиента.
Dart 2 отличается (https://www.dartlang.org/dart-2) от изначального варианта (https://www.opennet.ru/opennews/art.shtml?num=38432) языка Dart кардинальным изменением подхода к типизации. Если в Dart 1.x определение типов было необязательным и разработчик мог удалить все аннотации типов без влияния на поведение приложения, то в Dart 2 применена строгая статическая типизация, но при этом типы могут выводиться автоматически и аннотации типов по прежнему не являются обязательными. Например, при указании "var i = 1" в Dart 2 для переменной "i" будет выведен тип int, в то время как в Dart 1 в этому случае была бы использована динамическая типизация (тип dynamic).
В Dart 2 поддержка режима "checked", при котором выполняются ограниченные проверки типов, будет прекращена, его место займёт режим "strong", обеспечивающий строгую проверку всех типов. Для упрощения подготовки к переходу на Dart 2 в Dart 1.x также добавлен режим "strong", при выборе которого поведение по использованию типов приближено к Dart 2. Строгая типизация позволяет обеспечить быструю компиляцию в JavaScript при помощи dartdevc без необходимости применения специальных виртуальных машин для Dart. Вместо
Dartium, сборки браузера Chromium с Dart VM, для тестирования приложений отныне предлагается использовать компиляцию в JavaScript и любые штатные браузеры.
Из изменений Dart 2 также можно отметить проведение чистки синтаксиса и переработку многих инструментов, которые теперь нацелены на предоставление удобных и эффективных возможностей для web-разработки и создания мобильных приложений. Вместо применения отдельного языка разметки для компоновки элементов интерфейса в Dart 2 представлена возможность определять виджеты для интерфейса без обязательного использования ключевых слов new и const. Например:// В Dart 1.x:
Widget build(BuildContext context) {
return new Container(
height: 56.0,
padding: const EdgeInsets.symmetric(horizontal: 8.0),
decoration: new BoxDecoration(color: Colors.blue[500]),
child: new Row(
...
),
);
}// В Dart 2:
Widget build(BuildContext context) =>
Container(
height: 56.0,
padding: EdgeInsets.symmetric(horizontal: 8.0),
decoration: BoxDecoration(color: Colors.blue[500]),
child: Row(
...
),
);Для создания мобильный приложений предлагается использовать фреймворк Flutter (https://flutter.io/), на основе которого построена пользовательская оболочка развиваемой в Google новой микроядерной операционной системы Fuchsia (https://www.opennet.ru/opennews/art.shtml?num=46517). Для разработки для Web предлагается (https://webdev.dartlang.org/) набор специфичных библиотек, таких как dart:html, а также web-фреймворк Angular. Также имеется возможность создавать однородные системы, использующие единую общую кодовую базу при разработке приложений для Android, iOS и Web. Например, в мобильных приложениях и Web-интерфейсах AdWords Express и и AppTree совместного используется от 50% до 70% общего кода.
Особенности языка Dart:
- Привычный и простой для изучения синтаксис, естественный для программистов на JavaScript, Си и Java.
- Обеспечение быстрого запуска и высокой производительности для всех современных web-браузеров и различных типов окружений, от портативных устройств до мощных серверов;
- Возможность определения классов и интерфейсов, позволяющих использовать инкапсуляцию и повторно использовать существующие методы и данные;
- Указание типов позволяет упростить отладку и выявление ошибок, делает код более ясным и читаемым, упрощает его доработку и анализ сторонними разработчиками.
- Среди поддерживаемых типов: различные виды хэшей, массивов и списков, очереди, числовые и строковые типы, типы для определения даты и времени, регулярные выражения (RegExp). Возможно создание своих (http://www.dartlang.org/articles/optional-types/) типов;
- Для организации параллельного выполнения предлагается использовать классы с атрибутом isolate, код которых выполняется полностью в изолированном пространстве в отдельной области памяти, взаимодействуя с основным процессом через отправку сообщений;
- Поддержка использования библиотек, упрощающих поддержку и отладку больших web-проектов. Сторонние реализации функций могут подключаться в виде разделяемых библиотек. Приложения можно разбить на части и поручить разработку каждой из частей отдельной команде программистов;- Набор готовых инструментов для поддержки разработки на языке Dart, включая реализацию средств динамической разработки и отладки с исправлением кода на лету ("edit-and-continue");
- Для упрощения разработки на языке Dart поставляется SDK (http://www.dartlang.org/docs/sdk/), пакетный менеджер pub (http://pub.dartlang.org/), статический анализатор кода dart_analyzer (https://www.dartlang.org/docs/dart-up-and-running/contents/c...), набор библиотек, интегрированная среда разработки DartPad (https://dartpad.dartlang.org/) и плагины с поддержкой Dart для IntelliJ IDEA, WebStorm (https://www.dartlang.org/tools/webstorm/), Emacs (https://github.com/nex3/dart-mode), Sublime Text 2 (https://github.com/dart-lang/dart-sublime-bundle#readme) и Vim (https://github.com/dart-lang/dart-vim-plugin);
- Дополнительные пакеты с библиотеками и утилитами распространяются через репозиторий pub (https://pub.dartlang.org/packages), который насчитывает 3138 пакетов.
URL: https://news.dartlang.org/2018/02/announcing-dart-2-optimize...
Новость: https://www.opennet.ru/opennews/art.shtml?num=48139
Сначала они все говорят что указание типа слишком муторно для программиста и прячут типы, а потом возвращаются к нормальной типизации и называют это шагом вперёд.
Я даже знаю что происходит. Знаю по какой причине вызвращают нормальный подход к типам. Просто за это время на Дарте было написано чуть больше пары тысяч строк кода и стало ясно что без явно указанных типов количество глупых ошибок и опечаток растёт в неприличных масштабах.
Во-первых выведение типа - это не просто возврат к статической типизации, а то же самое на более качественном уровне, без лишней многословности.Во-вторых не последняя причина тому в том, что прототипную парадигму программирования просто поняли единицы из с тысяч, потому и возвращаются к классическим классам.
"Прототипная парадигма программирования" также известная как костылинг'n'велосипединг.
Очевидно же что прототипам нужны шаблоны.
Да не нужны черт возьми прототипы, а нужны шаблоны и много шаблонов. Сегодня взгляните, что из этого всег сделали - Angular, React и т.д. По сути обычные реакторы и зачем в них прототипирование?
> поняли единицы
В Dart никогда не было прототипной парадигмы
Все гораздо проще: с некоторого времени Google начал становиться синонимом выражения "поматросил и бросил". На очереди уже android.
> и бросил". На очереди уже android.MS с виндофоном не догонят, без шансов.
Самсунг, хуавей перегонят, без шансов.
> Самсунг, хуавей перегонят, без шансов.Что-то не помню планов у этих фирм по прекращению производства смартов.
> На очереди уже android.Настало время о**тельных историй. Взял попокорн. Продолжайте.
Вообще-то на том же JS без явных типов были написаны тонны кода.Но сложность веб-софта всё растёт, без типов - уже никуда. Судя по всему, они в первую версию их запихнуть не рискнули, так как побоялись недовольстве веберов. А теперь, когда типизация уже стала общим местом и тянуть дальше уже некуда - таки сделали.
>Вообще-то на том же JS без явных типов были написаны тонны кода.Да, но кто сказал, что это тонны качественного кода?
А никто и не говорил. Я говорил, что "на Дарте было написано чуть больше пары тысяч строк кода и стало ясно что без явно указанных типов количество глупых ошибок и опечаток растёт в неприличных масштабах" - чушь, к этому моменту всё насчёт необходимости типов было уже понятно на примере самого JS - во всяком случае тем, кто пытался писать что-то сложное.
Каких веберов? Тогда времена другие были. Слабали на коленке rовноязык и всё.
Проснись, когда дарт склепали, веба уже была чёртова туча, и людей, для него пишущих - тоже. И вопрос "примут ли" был вполне актуален. Собственно, и не приняли.
> Проснись, когда дарт склепали, веба уже была чёртова туча, и людей, для
> него пишущих - тоже. И вопрос "примут ли" был вполне актуален.
> Собственно, и не приняли.Да, история с Дартом такая - придумали его, а попробуй им увлечь кого-нибудь. Народ 20 лет писал на JavaScript и 20 лет назад не было проблемы увлечь кого-то этим языком, т.к. выбор был прост - или используй JavaScript или не используй. Других альтернатив не было. А теперь, когда 20 лет привычки... - попробуй Дарт или ещё какой другой аналог в массы протолкни... Нужно же убедительно обосновать необходимость применения таких новомодных Дартов вместо давно привычных JavaScript...
> Сначала они все говорят что указание типа слишком муторно для программиста и прячут типы, а потом...потом они офигевают от количества багов в проектах сложнее hello world и приходится признать что автоматический прострел пятки был не совсем удачной идеей :)
Наиболее удачным решением проблемы я считаю автоматический отстрел гов… программиста сразу после первой компиляции. Молодым даёшь дорогу!
> Наиболее удачным решением проблемы я считаю автоматический отстрел гов… программиста
> сразу после первой компиляции. Молодым даёшь дорогу!На третий десяток лет Зоркий Глаз заметил что с яваскриптерами это не работает. Читероватые гаденыши никогда ничего не компилируют!
>> Наиболее удачным решением проблемы я считаю автоматический отстрел гов… программиста
>> сразу после первой компиляции. Молодым даёшь дорогу!
> На третий десяток лет Зоркий Глаз заметил что с яваскриптерами это не
> работает. Читероватые гаденыши никогда ничего не компилируют!Хотел ты, анон, этак удачно пошутить, но сел в лужу: для яваскриптеров кто пишет «платформы», фреймворки и прочую мутотень? Вот с этих-то и начать полагается.
> Сначала они все говорят что указание типа слишком муторно для программиста и прячут типы, а потом возвращаются к нормальной типизации и называют это шагом вперёд.Не травмируйте психику A.Stahl, не рассказывайте ему о языках семейства ML, которые статически типизированы, и в которых не надо указывать типы, потому что это слишком муторно для программиста. :)
Вот ведь им неймётся... Когда анонсировали первый Дарт идея казалась отличной - заменить JS чем-то более адекватным, встроив это в браузер. Но в браузер так и не встроили, появился TypeScript и другие интересные транспайлеры (например Elm и ClojureScript), появился wasm, а они опять изобретают велосипед. Чем он будет лучше того же TypeScript из новости не очевидною
> Вот ведь им неймётся...Вангую: через 5 лет будет Dart64.0.3282.169.
Меньше 25 - нет доверия к продукту!!! :D
Почему JS неадекватен? Этот штамп тянется за ним и тянется. Но в чем его неадекватность как языка программирования? Если речь идет о рукожопых разработчках, дак они есть в любом языке. Чем язык та при этом виноват? То что было создано в 90-х для "Netscape navigator" и что есть сейчас, дак это уже как небо и земля.
npm leftpad, null/undefined, 0.1 + 0.2 = 3.000000000000004
Смешит некомпетентностьpython> 0.1+0.2
0.30000000000000004Clojure 1.8.0
user=> (+ 0.1 0.2)
0.30000000000000004Для разъяснений гугли IEEE 754
> Смешит некомпетентностьДописывать лишние нули в мантису это по IEEE?
finit
fld 0.1
fld 0.2
fadd
...Не вызывает никаких переполнений и исключений.
На лицо рукожопистость выскокоуровневых кодеров.
> На лицо рукожопистость выскокоуровневых кодеров.
$ cat float.c && gcc float.c&& ./a.out
#include <stdio.h>int main(void) {
printf("%.20f\n",.1+.2);
return 0;
}0.30000000000000004441
>> Смешит некомпетентность
> Дописывать лишние нули в мантису это по IEEE?[...]
> Не вызывает никаких переполнений и исключений.
> На лицо рукожопистость выскокоуровневых кодеров.Никто ничего не дописывает.
Просто в описанном в IEEE 754 способе кодирования чисел невозможно точно представить числа 0.1 и 0.2. Эти числа в двоичной системе счисления записываются как бесконечная периодическая дробь, которая на каком-то уровне должна быть обрезана и округлена.>>> (0.1).hex()
'0x1.999999999999ap-4'
>>> (0.2).hex()'0x1.999999999999ap-3'
как видно, оба раза числа представлены с небольшим избытком, поэтому и сумма такая,
>>> (0.1+0.2).hex()'0x1.3333333333334p-2'
хотя для 0.3 более точным представлением является
>>> (0.3).hex()'0x1.3333333333333p-2'
Коллега, если вас не затруднит - покажите как у вас представилось в памяти 0.1 и 0.2.
> python> 0.1+0.2
> 0.30000000000000004
> Clojure 1.8.0
> user=> (+ 0.1 0.2)
> 0.30000000000000004
% прогресс такой прогресс )
?- X is 1 rdiv 10 + 2 rdiv 10, format('X is ~50f~n',[X]).
X is 0.30000000000000000000000000000000000000000000000000
X = 3 rdiv 10.
Простите за занудство,
а извлечение квадратного корня тоже оставляет числа рациональными?если нет, то так-то я и на python могу:
>>> from fractions import Fraction
>>> Fraction(1,10)+Fraction(2,10)Fraction(3, 10)
>>> Fraction(2, 10)**2Fraction(1, 25)
# квадрат оставил рациональным
>>> Fraction(1, 25)**0.50.2
# а корень - нет, получился float
> если нет, то так-то я и на python могу:
>>>> from fractions import Fraction
> так-то
> import Fractions/0
Может, лучше сразу загрузить Sage?
А то ведь без Sage, с возможностью использования древней коробочной библиотеки, для молодежных питонов опять все грустно станет )
?- use_module(library(clpq)).
true.
?- {3/X = 1/X + 2/10}.
X = 10.
?- {3/X =:= 1/X + 2/X, X - Y = 5, Y = X/2}.
X = 10,
Y = 5.
?- {3/10 =:= X + Y, Y - X = 1/10}.
X = 1 rdiv 10,
Y = 1 rdiv 5.> Fraction(1, 25)
> # квадрат оставил рациональным
>>>> Fraction(1, 25)**0.5
?- X is rationalize((1 rdiv 25) ** rationalize(0.5)), format('X is ~50f~n',[X]).
X is 0.20000000000000000000000000000000000000000000000000
X = 1 rdiv 5.?- {1/2 = X ^ (1/2)}.
X = 1 rdiv 4.
> ?- X is rationalize((1 rdiv 25) ** rationalize(0.5)), format('X is ~50f~n',[X]).
> X is 0.20000000000000000000000000000000000000000000000000
> X = 1 rdiv 5.и ещё раз:
> X is rationalize((1 rdiv 25) ** rationalize(0.5))
и ещё крупнее:
> X is rationalize(...)
Ах, и О ЧУДО! Оно после этого вывело 0.2! Вот это да! Как же так получилось?! :P
Ты чего это подтасовками разного рода занимаешься? :)
> Ах, и О ЧУДО! Оно после этого вывело 0.2! Вот это да!
> Как же так получилось?! :PОно вообще-то выводит 0.1999... ;)
?- X is (1 rdiv 25) ^ rational(0.5), Y is rational(X), Z is rationalize(X), format('X is ~50f~n',[X]).
X is 0.19999999999999998334665463062265189364552497863770
X = 0.19999999999999998,
Y = 7205759403792793 rdiv 36028797018963968,
Z = 1 rdiv 5
Хотя, дело скорее в отсутствии cоотв. правил/движка.
В сикстусе года 2009-2010 constraint solver с рациональщиной вроде очень даже помощнее были, но то было давно и уже почти не правда (не помню точно, может из серии "солнце ярче и трава зеленее").Но в принципе, неплохо для ЯП начала 70ых (ну хорошо, для дополнений к стд. библиоткам годов 95'ых и честно перетыренной в YAP/SWI _идеи_ из мерзко-проприетарного SICStusa :) ).
А насчет подтасовок -- Fractions в питон добавили в 2.6, да и подгружать его нужно ... и вообще, как можно быть против теплого и лампового Пролога, занимая сторону холодной и склизкой змеюки?! o_O
> Простите за занудство, а извлечение квадратного корня тоже оставляет числа рациональными?
> ...
> а корень - нет, получился floatЕстественно, что float. Корень из рационального числа может возвращать иррациональное.
Об этом можно подробно почитать в теории множеств (буквально первые страницы). Или погуглить про дедекиндовы сечения. Ну или вот:
https://ru.wikipedia.org/wiki/%D0%98%D1%...
"npm leftpad" не относится к стандарту языка. Только "typeof null === 'object'" есть архитектурный косяк. Но я не думаю что это единственный язык где такое может встретиться. Я в свое время слышал так же много дерьма про PHP только вот почему то его так часто не вспоминают. А JS вспоминают потому что он становится популярнее с каждый днем и это кому то мозоль похоже натирает.
Всё становится популярнее. А вот отсутствие строгой типизации позволяет стрелять по ногам более лучше.
> Всё становится популярнее. А вот отсутствие строгой типизации позволяет стрелять по ногам
> более лучше.Стухель, не позорься.
Сахар от TypeScript спасает.
На пхп в своё время ругались не меньше. Но, в отличие от, в своё время плюнул и много чего починил, сломав совместимость. То, что я сейчас у коллег на PHP вижу, больше всего напоминает Java, пожалуй - суровое ООП "по всем канонам". IMHO, даже слишком суровое, но это уже мои предубеждения :-)А в JS с совместимостью косяков носятся как дурень с писаной торбой, даже со всеми вашими транспайлерами.
> сейчас у коллег на PHP вижу, больше всего напоминает JavaДелать Java'у из PHP ? - Фу таким быть.
PS: ни разу не помазано PHP'шниной.
Я тут сто раз писал, и ещё раз повторю - громоздкость энтерпрайзной джавы со всеми её фабриками и прочим - она не для прикола придумана, а для того, чтобы средний/большой софт вообще можно было хоть как-то предсказуемо писать и поддерживать, потому что гениальных кодеров мало. В пыхе она отросла ровно по той же причине. И уж всяко это лучше той печальной мешанины, что была в нём раньше.
Чувак видимо не знает что десятичные дроби нельзя представить точно в двоичном представлении и что все операции с плавающей точной точного результата не дают.
Это не JavaScript виноват, а то что в компьютере двоичная система счисления, а не десятичная.
Скорее виновата эволюция и наличие десяти пальцев. Вот было бы их 12... эх, мечты, мечты.
> Скорее виновата эволюция и наличие десяти пальцев. Вот было бы их 12...Брат, не пались! У человеков их аж 20. И двадцатиричная система чисел у них использовалась. У народа маек или маёв. Потом видимо появилась мода на обувь и человеки, в угоду моде, перешли на десятиричную систему.
>Брат, не пались! У человеков их аж 20.Если уж "брат" - то 21 ;-)
>>Брат, не пались! У человеков их аж 20.
> Если уж "брат" - то 21 ;-)Еще один совсем не палится.
Хладнейший (таково ведь нейтральное, умеренно-уважительное обращение?) ЭТО вообще-то не считается за палец уже лет сто как минимум. Учите таки мат-часть, если не хотите, чтобы ваши рабы мерли как мухи!
>Чувак видимо не знает что десятичные дроби нельзя представить точно в двоичном представлении и что все операции с плавающей точной точного результата не дают.1/2, 3/16 и все дроби, где знаменатель степень двойки, ы? Но на самом деле, это скорей исключения.
>Это не JavaScript виноват, а то что в компьютере двоичная система счисления, а не десятичная.Тут проблемы с разрядностью в первую очередь, а уже затем вопрос принципиальной возможности точного представления рациональных чисел по IEEE 754.
Ну вот типизация (точнее, её отсутствие), собственно. Из совсем извращённого, что сразу вспомнилось - совершенно безумные области видимости переменных ещё.Хотя да, подтянули его здорово, тут не поспоришь.
TypeScript. А еще в нем есть private и protected у классов в отличии от js
Ну да. Но это ж не джаваскрипт, а вопрос был "чем джаваскрипт не угодил". Ну вот примерно тем, что явные косяки языка не исправляются, вместо этого кто как может лепит заплатки сверху. А Dart это, TypeScript или вообще CoffeeScript (не к ночи будь помянут) - не принципиально.
Приватность давно уже можно реализовать рядом способов. А вскоре в стандарте будет уже реальная симантика для приватных свойств, методов.
И кстати по поводу wasm, то его не проектировали чтобы JS совсем выкинуть. JS это язык первого уровня для браузера и всегла им останется. А wasm нужен для реализации вещей сильно зависящих от помех которые может добавить GC и не такой высокой производительности JIT-а по сравнению с компилируемыми языками.
> Приватность давно уже можно реализовать рядом способов. А вскоре в стандарте будет
> уже реальная симантика для приватных свойств, методов.
> И кстати по поводу wasm, то его не проектировали чтобы JS совсем
> выкинуть. JS это язык первого уровня для браузера и всегла им
> останется. А wasm нужен для реализации вещей сильно зависящих от помех
> которые может добавить GC и не такой высокой производительности JIT-а по
> сравнению с компилируемыми языками.То есть я хочу сказать что не надейтесь что производители браузеров реализуют биндинги для wasm ко всем доступным браузерным API, к которым есть доступ у JS. Они же не дураки развивать wasm и js параллельно.
Мне кажется, что Вы сильно заблуждаетесь и чего-то недопонимаете в суетливых телодвижениях компаний по поводу wasm.Цели wasm'а
http://webassembly.org/docs/high-level-goals/"
...
3. Design to execute within and integrate well with the existing Web platform:- maintain the versionless, feature-tested and backwards-compatible evolution story of the Web;
- execute in the same semantic universe as JavaScript;
- allow synchronous calls to and from JavaScript;
- enforce the same-origin and permissions security policies;
- access browser functionality through the same Web APIs that are accessible to JavaScript; and
- define a human-editable text format that is convertible to and from the binary format, supporting View Source functionality.
...
"Надеюсь, хотя бы фраза "access browser functionality through the same Web APIs that are accessible to JavaScript; " Вам понятна?
> Они же не дураки развивать wasm и js параллельно.
Нет. Поэтому сначала сильно напрягутся. Т.е. сделают так, чтобы wasm полностью покрывал функционал/возможности JS по Web API, а потом просто встроят простую прослойку-компилятор JS->wasm, а не всякие супер-пупер оптимизированные сложные а ля V8-движки. Супер-оптимальными они будут делать именно wasm-движки, ибо в wasm'е как-раз будет куда еще оптимизировать, ибо по той же ссылке певой целью wasm'а как раз заявлено:
" 1. Define a portable, size- and load-time-efficient binary format to serve as a compilation target which can be compiled to execute at native speed by taking advantage of common hardware capabilities available on a wide range of platforms, including mobile and IoT."
Разве Вам не очевидно, что когда полностью созреет wasm, то всё остальное будет переделываться под него, цепляться на него через всякие статические/динамические компиляторы из очередного языка программирования в wasm. Ну типа как у майкрософта в его .NET-платформе - языков несколько, но все компилируется в промежуточный байткод CIL, который потом исполняется в среде CLR. Т.е. напрягаются и оптимизируют одну среду, а не несколько для каждого языка в отдельности. А уж создатели отдельных языков в случае своей заинтересованности в вебе сами создадут очередной компилятор в wasm.
Другой вопрос, получится ли все сделать так, как заявлено в целях и сколько времени это займет. А то не хочется ждать лет 10.
> То есть я хочу сказать что не надейтесь что производители браузеров реализуют
> биндинги для wasm ко всем доступным браузерным API, к которым есть
> доступ у JS. Они же не дураки развивать wasm и js
> параллельно.Вдогонку, к этому Вашему посту и посту выше, где прозвучала фраза
> ... А wasm нужен для реализации вещей сильно зависящих от помех
> которые может добавить GC и не такой высокой производительности JIT-а по
> сравнению с компилируемыми языками.Посмотрите на roadmap
http://webassembly.org/docs/future-features/
там в планах создается и GC (который по Вавшему - не нужен) и если перейти по ссылке на Garbage collection
( https://github.com/WebAssembly/design/issues/1079 )то там прямым текстом написано:
"
To realize the high-level goals of (1) integrating well with the existing Web platform and (2) supporting languages other than C++, WebAssembly needs to be able to:- reference DOM and other Web API objects directly from WebAssembly code;
- call Web APIs (passing primitives or DOM/GC/Web API objects) directly from WebAssembly without calling through JavaScript; and
- efficiently allocate and manipulate GC objects directly from WebAssembly code.
"Надеюсь Вам кристально понятна фраза "call Web APIs (passing primitives or DOM/GC/Web API objects) directly from WebAssembly without calling through JavaScript;"
Да приватность - это дело десятое, в общем-то. Её основная польза - скорее документирование кода. А вот скопы и строгая типизация - вопрос другой.А биндинги - ну либо производители сделают (в планах-то оно всегда было - рядом с GC - и никуда не делось) либо какая-то прослойка на JS нарисуется, разница, в сущности, невелика.
Ну типизации строгой там наверно ни когда и не появится. И как правильно сказали flow, typescript эти проблемы частично решает. Еще на сколько щнаю есть proposal для реализации статической типизации на уровне языка: esdiscuss.com, тут все найдете.
А что есть проблема со скопами?
Ошибочка вышла: https://esdiscuss.org
Да успокойтесь вы уже, не нужна людям (99%) типизация. Почему? Потому, что никому не надо писать код МАКСИМАЛЬНО КОРРЕКТНО, всем надо БЫСТРО ПРИ ПРИЕМЛЕМОМ КАЧЕСТВЕ.Это классно потратить в 3 раза больше времени на проект, сделать аккуратно, покрыть всё тестами... и обнаружить, что он никому уже стал не нужен за это время.
Можно сколько угодно обзывать ВЕСЬ МИР веб-макаками, но развитие языков программирования показывает, что отсутствие типизации - это удобно, и отказываться от этого никто не будет.
JS/TS - опциональная типизация - самый нормальный подход, пока не надо - пишешь без типов, потом когда нужно подстраховаться - допиливаешь типы.
> и обнаружить, что он никому уже стал не нужен за это время.Ты опоздал с этой мантрой эпохи растущего рынка лет на 10. Сейчас стали всё больше задумываются о поддержке, потому что толпы индусов и постоянная текучка обходятся всё же дороже одного-двух спецов в штате, пилящих медленнее, но качественнее. Го и раст как симптомы.
Да не, просто уж совсем "палка перегнулась" в сторону скриптоты - вот, разгибают теперь))Про индусов я кстати сомневаюсь, что задумались, эта - мода на микросервисы последних нескольких лет - она же как раз про индусов - типа вот щас мы попилим софт на микросервисы, каждый отдадим индусу (не обязательно по национальности, можно по призванию), ну будет там внутри ужос, ну и чо - потом через год он уволится, нового возьмём - он скажет какой ужас и всё перепишет - ну и пусть переписывает, типа это дешевле... (я лично сильно сомневаюсь, что это дешевле, но адепты микросервисов примерно так рассуждают)
В жуёсе типизация есть, ты шо. Только она гоwно. Типизация и необходимость вручную прописывать типы - две большие разницы. А быстро-быстро можно и на питоне али рубях написать, с типизацией всё нормально, но вручную ты ничего не прописываешь.
Та ну, имхо это маркетинговый миф "смотрите у нас скриптота, но со строгой типизацией!"В чём заключается строгость - ну... типа что str+int нельзя сделать. Правда, кроме геморроя, это ничего не даёт, даже в Java и C++ это можно, а вот в питоне почему-то нельзя, да.
На самом деле все скриптовые языки с точки зрения типизации, перл-питон-руби-пхп-js - один хрен, с лёгкими модификациями, везде 3 базовых типа - скаляр/массив/хеш (json) (ещё как с perl'а заведено). Ну кто-то чуть больше сам типы преобразует, кто-то чуть меньше. И чо? Фактически это ничего не даёт, практическая разница как раз между тем что все типы надо писать руками или не надо. Когда надо, это добавляет геморроя, но позволяет что-то проверить компилятору. Когда не надо, писать удобнее, но гарантии корректности меньше.
> В чём заключается строгость - ну... типа что str+int нельзя сделать. Правда,
> кроме геморроя, это ничего не даёт, даже в Java и C++
> это можно, а вот в питоне почему-то нельзя, да.Чего-чего там можно в плюсах или жабе и нельзя в питоне?
> Чего-чего там можно в плюсах или жабе и нельзя в питоне?Предсказуемый код, который не тормозит. В общем ЯП для написания полурабочих макетов программ. Тормозных и глючных.
>> Чего-чего там можно в плюсах или жабе и нельзя в питоне?
> Предсказуемый код, который не тормозит. В общем ЯП для написания полурабочих макетов
> программ. Тормозных и глючных.Ты точно Виталий, написавший
> типа что str+int нельзя сделать. Правда,
> кроме геморроя, это ничего не даёт, даже в Java и C++
> это можно, а вот в питоне почему-то нельзя, да.что и было суть вопроса, а не тот самый анон, у которого от одного упоминания питона нещадно подгорает? Если ты Виталий, то поздравляю со спрыгом с темы типизации. Если ты тот самый аноним, то будь добр, приложи лед и иди надоедай кому-то другому, а?
> Предсказуемый код,
Это про обычную, изкоробочную жабу с ее супер-GC-останови-планету-пусть-весь-мир-подождет vs. простой счетчик ссылок (у яблок называется громким и красивым Automatic Reference Counter) + распутыватель циклических зависимостей в эталонной реализации питона?
Ты точно владеешь темой?
> ... А wasm нужен для реализации вещей сильно зависящих от помех
> которые может добавить GC и не такой высокой производительности JIT-а по
> сравнению с компилируемыми языками.Вы видать совсем далеки от темы wasm'а. wasm делается как универсальная платформа, для разных языков программирования, в том числе и для языков с GC и без оного. Кстати, никто Вам не помешает запилить свой очередной язык программирования с GC и прицелом для использования в среде wasm и реализовать GC в финале тоже в wasm'е. Но это может быть и не понадобится, ибо в wasm'е реализуется в том числе и GC, наряду с тредами. Т.е. можно будет попытаться использовать реализуемый в данное время встроенный GC.
Посмотрите на roadmap
http://webassembly.org/docs/future-features/
там есть и треды и GC, пока конечно "in progress"
> Почему JS неадекватен? Этот штамп тянется за ним и тянется. Но в
> чем его неадекватность как языка программирования?На нем невозможно сделать сколь-нибудь крупный долговременный проект без кучи багов. Автоматическая типизация мастерски прячет все продолбы программистов, а когда оно сильно после завалилось, при том только в полнолуние високосного года в четверг - удачи понять что вообще за нах.
В результате один только гайд безопасного кодинга на JS от гугли занимает добрых страницы три. Сишники глядя на это ржут как кони, у них мануал раза в три короче.
> В результате один только гайд безопасного кодинга на JS от гугли занимает добрых страницы три. Сишники глядя на это ржут как кони, у них мануал раза в три короче.Ты наверное не в курсе, но в языке С как и в js слабая типизация, толку от которой практически никакого. Разница между ними в том, что в js типизация неявная динамическая, а в C явная статическая и это ни разу не преимущество C с точки зрения написания кода.
Ну и мануал к С на пару страниц говорит лишь о фиговом качестве мануала. В своё время K&R накатали не самую маленькую книгу, которая действительно была мануалом и даже какое-то время выполняла роль спецификации этого языка.
> Ты наверное не в курсе, но в языке С как и в
> js слабая типизация, толку от которой практически никакого. Разница между ними
> в том, что в js типизация неявная динамическая, а в C
> явная статическая и это ни разу не преимущество C с точки
> зрения написания кода.Сишная типизация, конечно, от идеала далека, но скормить функции структуру не того типа не позволит. А вот джаваскрипте запихнуть не тот объект - запросто. Причём если это нечто, что будет куда-то заныкано, а использовано гораздо позже, после передачи через десяток асинхронных коллбеков и пары попыток преобразовать - удачи найти, где и что сломалось.
Плюс чем больше кодовая база - тем важнее типы как способ документирования
> Ты наверное не в курсе, но в языке С как и в
> js слабая типизация, толку от которой практически никакого.Нет, вот извини, если я в сишной функции заявил параметр как uint8_t, но попробую отдать uint32_t или строку, современный компилер даст мне жирный варнинг что я хочу что-то не то. Если и правда так и задумано, могу на свой страх и риск форсануть тип cast'ом, но это явное деяние под свою ответственность. Если я железно уверен что пистолет не заряжен, так и быть, можно им целиться в пятку, если это дает какие-то удобства.
Яваскрипт же молча переделает тип, все продолжит работать. Но сильно потом сломается, потому что логика очень неявно порушена. Поэтому яваскриптеры часто сморят в дуло пистолета. Который почему-то обычно оказывается заряжен на их горе. И поэтому прострел мозга в JS проектах - дело обычное.
> Разница между ними в том, что в js типизация неявная динамическая, а в C
> явная статическая и это ни разу не преимущество C с точки зрения написания кода.Си как минимум предупредит о вызове функции с дурными параметрами и присвоениях чего-то явно не того и не туда. Яваскрипт же динамически переназначит тип и все сработает. А потом удачи вообще понять что не так. На вид код совершенно валиден, ошибок нет, а трейсить выполнение на полчаса назад можно и подопухнуть немного.
> Ну и мануал к С на пару страниц говорит лишь о фиговом качестве мануала.
Он говорит о компактности core языка. Так что его можно сносно освоить за обозримое время и даже осознать типовые грабли. А когда мануал огромный - програмеры его не могут держать в голове. Самые частые грабли они помнят, но шаг в сторону - и код вытворяет черти что, а все ломают голову почему это вообще происходит.
> В своё время K&R накатали не самую маленькую книгу, которая действительно была
> мануалом и даже какое-то время выполняла роль спецификации этого языка.Если для JS написать книгу ТАКОГО уровня - это будет книжная полка с фолиантами БСЭ как минимум.
> Сишники глядя на это ржут как кони, у них мануал раза в три короче.Это те сишники из 5-б, которые ни о SEI CERT C ни о MISRA не слышали, ведь хеловорлды отлично пишуться и без них? Охотно верим!
> Это те сишники из 5-б, которые ни о SEI CERT C ни
> о MISRA не слышали, ведь хеловорлды отлично пишуться и без них?
> Охотно верим!Все познается в сравнении. Понимешь, на си написать софт для ответственных применений с предсказуемым временем реакции и адекватным восстановлении при сбое по крайней мере можно.
На JS же накорябать что либо под требования для которых актуальна MISRA - не возможно в принципе. Лагнет в скрипте сборщик мусора - и полетит поезд под откос! Потому что продолбал момент когда скорость сбрасывать пора было. А то что сишники в отличие от вебмакак поездами, автомобилями и самолетами смеют рулить - заставляет их идти намного дальше в вопросах паранои и анализа способов прострела пяток. Поэтому те кто поездами управляет - JS отсеивают как явно неподходящий еще на подлете, понимая что требования уровня MISRA к нему предъявлять бесполезно.
>> Это те сишники из 5-б, которые ни о SEI CERT C ни
>> о MISRA не слышали, ведь хеловорлды отлично пишуться и без них?
>> Охотно верим!
> Все познается в сравнении. Понимешь, на си написать софт для ответственных применений
> с предсказуемым временем реакции и адекватным восстановлении при сбое по крайней
> мере можно....
>Поэтому те кто поездами управляет - JS отсеивают как явно неподходящий еще на подлете, понимая что
>требования уровня MISRA к нему предъявлять бесполезно.Суть в том, что мизра не мизра, а вот знать хотя бы половину всех упомянутых в SEI CERT граблей для написания нормальных программ на си очень желательно.
Но спрыг с темы толщины необходимых стандартов зачетный, не спорю - был бы ЖСником или питонистом, возможно даже и прокатило бы )
> Суть в том, что мизра не мизра, а вот знать хотя бы половину всех упомянутых
> в SEI CERT граблей для написания нормальных программ на си очень желательно.Смотря для чего эта программа будет. Если для управления поездом - однозначно. Если для работы с недоверяемыми входными данными по сети - тоже полезно. А казуальная утилитка которую никто хакать не будет, в том числе и потому что ее запуск атакующим значит что моя система и так порушена в хлам - может и не требовать все это. Смотря что надо.
А читать MISRA есть смысл при желании влезть в очень критичные и требовательные области, типа транспорта и управления опасными процессами. Все это есть, практикуется и си для этого используется. А на JS... по счастью те кто управляет опасными процессами обычно понимают что в случае серьезного факапа с них спросят. Вплоть до уголовного преследования. Это очень мотивирует их не косячить. Если такие стандарты применить к яваскриптерам... они ж поголовно перекочуют в тюрьмы. Потому что и близко не могут оценить предсказуемость своего крапа на потребном уровне. Вот ты сможешь дать с JS гарантии что система никак и никогда не задумается более чем на 10 мс? С аппаратным ресетом по вачдогу если это все же произошло? На си гамно вопрос, любой микроконтроллер такое обеспечит на раз.
> Но спрыг с темы толщины необходимых стандартов зачетный, не спорю - был
> бы ЖСником или питонистом, возможно даже и прокатило бы )Как по мне - лучший QC test софта это когда разработчик(и) готовы доверить свои жизни и здоровье своему коду, вплоть до того когда это рулит hard realtime процессами.
Ну и так чисто практически, я морально готов влезть во что-нибудь летающее где мотором управляет софт на сишечке. Собссно такого навалом. А ты можешь это сделать из чего там тебе удобно. Ну а я с безопасной дистанции посмотрю на это дело.
Да дално. В крупных проэктах и без этого ошибок хватает.А что до сишников... пусть пишут веб-сервисы на сях. Долгих лет им жизни!
> Да дално. В крупных проэктах и без этого ошибок хватает.А что до
> сишников... пусть пишут веб-сервисы на сях. Долгих лет им жизни!Сишник пишущий вебсервис безопаснее чем жабаскриптер пишущий автоматическое управление поездами...
> Почему JS неадекватен?1. Реализация ООП в JS - это полный трындец. Говорить что она (реализация) хоть сколько-нибудь вменяемая может только тот, кто кроме JS больше ничего не видел.
2. Strict Mode должен быть включен по дефолту. А так об этой фиче узнают только после тысяч строк г****кода.Хотябы эти две эти вещи поправить, и им уже можно будет им пользоваться.
>> Почему JS неадекватен?
> 1. Реализация ООП в JS - это полный трындец. Говорить что она
> (реализация) хоть сколько-нибудь вменяемая может только тот, кто кроме JS больше
> ничего не видел.
> 2. Strict Mode должен быть включен по дефолту. А так об этой
> фиче узнают только после тысяч строк г****кода.
> Хотябы эти две эти вещи поправить, и им уже можно будет им
> пользоваться.1. Она просто другая и менее строгая, чем классическая реализация классов из других языков. Постепенно улучшают.
2. es6 модули парсятся по умолчанию в строгом режиме. Поэтому считайте что пофикшено.
Как минимум - скопы ещё
Самое забавное тут то, что второй Dart намного больше похож на Typescript.
Ничем, сдохнет, да и всё
Как человек, который зарабатывает тем, что пишет код на дарте, скажу, что язык совсем не плох. Но а) направление веба разрабатывается по остаточному принципу б) сборщик и прочий инструментарий из рук вон плох. Кода у нас дохрена, проект собирается порядка 15-20 минут. Ну и да, коммьюнити там, мягко говоря, не очень большое.
Допускаю, что не плох, но было бы интересно узнать чем он лучше других языков, за что можно его предпочесть другим.
> чем он лучшелучше чем другие
Все правильно, строгая статическая типизация лучше чем нестрогая динамическая. А если кому надо динамику то можно придумать специальный тип "any" или "variant".
С распространением WebAssembly внедрение новых языков будет проще, так что жабоскрипту придется потесниться.
Поигрались и хватит, копрорация добра снова знает как лучше! Белкам колесе остаётся только успевать отслеживать номера версий и навания языков/фреймвоков.Нас не догонят (с)
Ждём go2
> Ждём go2Гоуту
Вот, кстати, да: лучше бы встроили бы Go в браузер и не морочили бы голову...
> Вот, кстати, да: лучше бы встроили бы Go в браузер и не
> морочили бы голову...Тогда уж сразу webassembly. Чтобы не плодить языковый фашизм.
Отказать... Сейчас 2018г и, активно развивающийся TS, покрывает 98% потребностей...
Выглядит интересно. Надеюсь, убьёт QML и прочие Qt-поделки.
Что курят эти люди?
Это же Дуплик.
> Разработчики видят Dart 2 в качестве языка для Web и мобильных систем, оптимизированного для разработки компонентов, выполняемых на стороне клиента.Совсем уже оборзели.
#НЕНАВИСТЬ!
> разработки компонентов, выполняемых на стороне клиентаДизасм 2.0 во все поля камин сун :P ?
Они в преступном сгойворе со Штеудом.
> Они в преступном сгойворе со Штеудом.Самое смешное что интел с этого не получит нишиша. Все достанется ARM и толпе тех кто их лицензировал.
>> Они в преступном сгойворе со Штеудом.
> Самое смешное что интел с этого не получит нишиша. Все достанется ARM
> и толпе тех кто их лицензировал.Плохо вы знаете Штеуд, ребята, и про Штеуд. :) Например, много ли анонимов опеннета в курсе о финансово-инвестиционной деятельности Штеуда, включая оффшорную? То-то же.
Что бы они не придумали там себе, а выиграет от этого, ИМХО, только js.Потому что js-ники тянут под себя все что годно (и даже все что не совсем годно, но что бы было). Вон у питона слямзили генераторы и, держу пари, в самом обозримом будущем утянут со-программы (ели это уже не произошло), а чем дарт лучше питона, в этом отношении? Тем что у него версия "2" теперь?
Пока дело идёт к тому, что через год в браузеры таки приедут биндинги DOM и прочего к wasm. Вот тогда и поглядим, сколько JS протянет.
Этого не будет. wasm не предоставят биндинги ко всем браузерным API. Производители браузеров не дураки и не будут параллельно поддерживать и js и wasm на одной планке. И wasm проектировали не для замены js. Пустые мечты 😉.
>Производители браузеров не дураки и не будут параллельно поддерживать и js и wasm на одной планкеА в чем проблема? Биндинги ко всем языкам на 90% генерятся автоматически из Web IDL
>>Производители браузеров не дураки и не будут параллельно поддерживать и js и wasm на одной планке
> А в чем проблема? Биндинги ко всем языкам на 90% генерятся автоматически
> из Web IDLОткуда такая инфа? Я сомневаюсь что все так просто. Даже если н е так это сложно технически, то
как мне кажется разработчики браузеров не захотят создавать такуб конкуренцию для JS, все же JS язык первого уровня для браузера и так и останется как мне кажется.
> Этого не будет. wasm не предоставят биндинги ко всем браузерным API. Производители
> браузеров не дураки и не будут параллельно поддерживать и js и wasm на одной планке.Ты прав, JS было бы логично дропнуть совсем. Он не может быть быстрым, даже с камасутрой проигрывает в разы типизированным ЯП. И на нем невозможно делать проекты крупнее hello world. Так что логичнее всего было бы его просто удалить.
Чем ты его заменить-то собрался? Уж не явой ли?(А, ещё лучше - плюсами, плюсами!)
В том-то и прелесть, что кто чем хочет, тот тем и заменит. Хоть теми же плюсами, хоть растом, хоть хаскелем, хоть адой, хоть го.
мда, я вот сомневаюсь что с таким зоопарком языков на фронтендеидела тогда у веба улучшатся, как бы не ухучшились 🙂. сейчас для работодателя найти того кто сможет поддерживать фронтенд проще, т.к. там везде только JS, а представьте если туда можно будет засунуть практически любой язык.
Я заметил, что на Опеннете все срaчи с течением времени усыхают и оскудевают комментами. Помнишь, казалось бы, что старался писал десятка два или больше насыщенных опытом и мудростью комментариев по теме, а их становится всё меньше и меньше, покуда почти все не исчезают. Да и сам сайт, бывает, лежит под наплывом всех трёх с половиной сотен посетителей. Такое впечатление, что это всё на одном несчастном скрипте работает. Что поместилось в /var/log на тощем писюке начала девяностых, то и «база данных». Парни, вы не стесняйтесь — скажите, что у вас нет денег на сервер. Три с половиной сотни постоянных посетителей, возможно, откажутся от одного школьного завтрака и скинутся по рублику да и купят вам кухонный суперкомпьютер середины нулевых. Сможете крутить на нём аж целую мускульную СУБД и два перловых скрипта вместо одного! Не бойтесь признаться в очевидном, ёпт. :)
ЗЫ> РЕДУПРЕЖДЕНИЕ: В сообщении используется неприемлемая лексика.
> Пожалуйста откорректируйте сообщение, воздержитесь от острых высказываний и несодержательных
> комментариев, проявите уважение к собеседнику.
> Выражение, на которое сработало предупреждение: 'срaч'Да отключите уже эту гадость! Смешно же делаете на весь рунет! :)
https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi?az=l...Перешли сюда.
> https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi?az=l...
> Перешли сюда.Не вижу смысла.
Еще один гвоздь в гроб typescript.
Дарт 10 - копия C#
Ты так говоришь, как будто это что-то плохое.
Тебе кажется, ты слишком мнительный
Зачем я разговариваю сам с собой?
А TypeScript разве нет?
вот бы в go2 сделали бы ; обязательными
То есть они как бы намекают "ой чуваки, кто писал на дарте - простите, у нас тут концепция поменялась, перепишите теперь весь свой код плз"...На что все скажут а - ну ок - перепишем... на тайпскрипт.
> На что все ТРОЕ скажут а - ну ок - перепишем... на тайпскрипт.fixed
фуксия рулит! остальные могут искать своего Ети. а если серьезно Гугл все концепты кидает в воду интернета - выплывет не выплывет денег у них много можно пошуметь как о наших выборах... 18 марта
Ну блин, ну все равное его в хром не встроили, можно ж было и многопоток впилить раз такое дело.
Как-то на опеннете, уж не помню когда и по какому поводу:( , написал что гугл продвигает дарт как основной язык для андорид. Меня тогда жутко заминусовали. Кажется я начинаю понимать почему - все кто минусовал знали инсайдерскую ифу про фукусиму, а я нет :(