LINUX.ORG.RU

Ответ на: комментарий от Deleted

В принципе это имеет cмыcл только для оптимизаций, а так пофик.

IMHO реально нужны конcтанты, который можно инклюдить из хедеров и енумы. Ну или какой-то официальный макропроцеccор штоле...

Из полезного на практике - то что эти фичи надеюcь что cкоро можно будет заюзать без флагов запуcка хрома/ноды.

Vit ★★★★★
() автор топика
Ответ на: комментарий от h578b1bde

Большие целые числа ещё столько же ждать.

XVilka ★★★★★
()
Ответ на: комментарий от Vit

добавить полный юникод, пофиксить флоат (0.1+0.2 должен == 0.3), typeof должен возвращать нормальные значения (null, regex, NaN), parseInt должен отдавать дополнительный текст (если он есть), эквивалентные false значения должны быть или эквивалентны друг другу или перестать быть false (0, NaN, false, undedined, "), добавить оператор (не переопределяемый) hasOwnProperty для определения является ли свойство своим или из цепочки прототипов, точки с заятой в конце строк убрать, добить блочную область видимости, нормальные классы с нормальным наследованием, function arguments - как полноценный массив, вообще нормальные массивы, this в функциях ссылается на внешнюю функцию а не на глобальный скоп

и если подумать подольше, много другого еще нужно добавить кроме observe и SIMD :)

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Ты либо копипастишь либо упоролся. Из перечисленного половина уже есть а половина не нужна.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

какая половина перечисленного уже есть?

пройдусь задом наперед

как ты можешь сам проверить, 0.1 + 0.2 != 0.3. Более конкретно, оно равно 0.30000000000000004. В оправдание приводятся отмазки про какие-то IEEEшные малявы на флоаты, которые вообще не про то. В результате сравнение флоатов не используется вообще. А вот что используется: (0.1 + 0.2).toFixed(3) == (0.3).toFixed(3). Т.е. чуваки взяли оператор (сравнение флоатов), запретили им пользоваться, и заставили вместо него писать порнографию. Грац, чо.

классов нету, есть уродливо работающий new - как минимум поэтому все юзают CoffeeScript вместо JS. Проблема еще в том, что классы в CS тоже полное говно в угоду JS-совместимости и быстрому компилятору. Хорошего решения всё еще нет!

бредовый that=this в каждой первой строчке взялся откуда? лень писать поэму, полное говно, это надо выжечь огнём (еще 10 лет назад, actually, надо было выжечь)

блочной области видимости нет:

var a = 1;

function four() {
  if (true) {
    var a = 4;
  }

  alert(a); // а вот хрен тебе, там будет 4 вместо 1, т.е. чудный if не умеет в блочную область видимости
}

тут можно бы сказать, что создатели компилятора не осилили в shadowing глобальных var'ов. (кстати, про глобальные переменные забыл поэму, это просто ад!)

но ведь та же хрень и для циклов:

var x = function() {for (var i=1; i<3; i++) {console.log("omg"); var z=3;} console.log(z);}; x();

(прости что всё в одну строчку, в редакторе лора нет автоформатирования. )

Явно временная (созданная на итерации цикла) переменная z сохранится при выходе из него и распечатается!!! ПЫЩ ПЫЩ в рот мне ноги, вот это проворонили косяк!

arguments - по-настроящему не массив, а объект со свойством length и ацессором [], поэтому с ним нельзя обращаться как с массивом, хотя по логике вещей это именно массив

когда итерируешься в цикле по пропертям объекта, нельзя итерироваться только по СВОИМ пропертям. Поэтому нужно юзать hasOwnProperty, и каждую пропертю тестировать. Но т.к. это не не-переопределяемый оператор, кто угодно может взять и заменить hasOwnProperty чем угодно. Have a nice debug!

if (x) - значит «if x==true». В реальной жизни x==false && y==false следует что => x==y. Это называется транзитивность. Но 0, NaN, false, undedined, пустая строка - все они falsy и не равны - не транзитивны. Good luck работать с нетранзитивными числами!

typeof NaN === 'number'. Not a number is a number? WTF? Но это не всё. Можно сказать, что NaN - это такое специальное значение типа Number, поэтому всё в порядке. Т.е. NaN - это обязательно число? А вот и держи фигу: isNaN('держи фигу') == true.

хрюникод в джаваскрипте 16-битный (Basic Multilingual Plane), он не умеет в двойные символы (surrogate pairs). Юникод - но не юникод. Вспоминается старый баян - ворота «машины - не машины, ставить - не ставить».

наверное, можно было бы больше поэму написать, но не в рабочее время(с)(тм)

ну конечно, для языка, напиленного в одно рыло студентом за 2 недели - это просто шедевр. Но после этих двух недель была еще вечность допилки, всякие стандарты новые...

И вот этот весь цирк длится годами. И это не какое-то высокоуровневое API, а прямо ядро. Вот его в первую очередь надо к чертям вычищать, а не SIMD добавлять!

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от Vit

забыл добавить, что typeof от регулярки может быть либо object, либо function xDDD А typeof null - вообще object! Вот это всё говнецо-то надо соскребать в первую очередь

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Топик не читай, все подряд пиши...

В es6 классы есть, поддержку юникода выпрямили. == вместо === используют дятлы, они должны страдать. И т.п. Осиль сначала то что есть, вместо того чтобы ныть что яваскрипт не умеет яву и все плохо.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

это очень интересно, спасибо.

не стесняйся, расскажи про всё остальное. Для начала, про this, область видимости, глобальные переменные, arguments, сравнение флоатов, hasOwnProperty, typeof. Начнем с этого, лень сейчас придумывать что еще плохо :)

надо посмотреть на классы, да. В большинстве языков с классами всё плохо, i bet здесь тоже :)) Нужно будет прогнать es6 классы по corner cases (которые не выдерживает например упомянутая тобой ява - там всё плохо например с equals, особенно в сочетании с мапами, ужасно работающее множественное наследование, итп - годится на целую поэму «почему ява говнище»)

== вместо === используют дятлы

чего же вы, милок, не отключили в компиляторе использование == тогда?

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

if (x) - значит «if x==true». В реальной жизни x==false && y==false следует что => x==y. Это называется транзитивность.

Стиви, вот здесь ты упоролся.

Xellos ★★★★★
()
Ответ на: комментарий от stevejobs

Я тебе привел пример, что ты не понимаешь в том, о чем пытаешься писать. Расказывать как пользоваться яваскриптом, и соревноваться с бредогенератором - разные вещи.

чего же вы, милок, не отключили в компиляторе использование == тогда?

Лично у меня стоит eslint на тестах и CI, который не даст использвать == и много чего другого. А проблемы ниасиляторов матчасти меня мало волнуют. Пусть пользуются как напридумывали и страдают.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

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

Но я стараюсь рассуждать из соображения, что единственная задача языка - помочь мне кодить как можно быстрее и эффективней. Например, Java позволяет кодить эффективней чем C++, поэтому C++ отправляется на свалку истории. Итп. Но ведь на C++ можно привести такой же аргумент - если писать на C++x14, используя только особое подмножество - то всё будет отлично!

Но нет, мне не хочется изучать никакие подмножества. Garbage Collector джавы работает сам, и позволяет мне кодить лучше, и это замечательно, поэтому C++ отправляется на свалку. В Scala есть нормальное ООП, поэтому можно выбросить Java. В Scala есть паттерн-матчинг, а в C++ вместо этого нужно городить леса из Visitor'ов (и попробуй до них еще догадайся), поэтому C++ отправляется на ту же свалку. В Java и Scala есть нормальный рефлекшен, а в C++ нет, поэтому C++ отправляется... ну ты уже понял.

А вот чем заменить JS (с его совершенно неэффективным ) я пока не знаю, и это грустно. Приходится «асиливать». Я не хочу асиливать, я хочу чтобы просто работало, во всей его полноте.

Видишь, я же не тунеядствую на тему «JS говно», а предлагаю конкретные решения, где дизайн языка можно исправить в лучшую сторону. И не придется этот дизайн «асиливать», он сразу будет хороший.

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 3)
Ответ на: комментарий от Vit

а вообще, конечно этот спор не имеет смысла. Ничего кроме JS нету, и то, что в нём что-то сделали лучше - это отлично.

stevejobs ★★★★☆
()
Ответ на: комментарий от VladimirMalyk

Объясни как практически можно кодить на es6/es7 сейчас? Юзать Babel? Какой набор костылей надо притащить, чтобы заработало? Без буквоедства - вот ты сейчас скажешь набор костылей, а я их тупо себе импортну и буду с этим жить :)

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

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

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

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

А можешь написать свой набор библиотек/костылей? Именно что касается повседневной разработки. Я импортну их себе и постараюсь асилить :) Про lodash понял (ты его реально юзаешь?).

Он правда реальных проектов ни одного не сделал, но это же мелочи.

может быть он компиляторы разрабатывает, и тонко издевается над нами каким-то особым профессиональным юмором?

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от stevejobs

среди всех говен сейчас надо смотреть на jspm.

старт быстрый. в корне проекта:

npm install -g jspm
jspm init (согласиться на дефолты)

в index.html положить
<script src="jspm_packages/system.js"></script>
<script src="config.js"></script>
<script>
    System.import("init");
</script>

в init.js положить свой es6 код.
пакетики ставить
jspm install жспм_пакет
jspm install npm:пакетик_нпм

чтобы бовер тащился
npm install -g jspm-bower-endpoint
jspm registry create bower jspm-bower-endpoint
jspm install bower:пакетик_бовер


зоопарк теперь в jspm_packages, компилится в момент импорта под капотом.

в конце spm bundle-sfx --minify init и можно минифицированный банд пулять в продакшн

VladimirMalyk ★★★★★
()
Ответ на: комментарий от stevejobs

- если не хочешь совсем язык учить - втыкай lodash везде, будет работать как надо.
- линтовщик типа eslint нужен обязательно.
- es5-shim под лохматые браузеры
- под классы сам найди, если приперло - сам не пользуюсь, прототипов хватает.

Если шило в одном месте - бери babel.

Совместимость можно гуглить по «XXX shim». Некоторые вещи типа proxy эмулировать принципиально нельзя, но таких не очень много.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

если приперло - сам не пользуюсь, прототипов хватает

люди пишут на джаве и c#, и иногда надо поправить какую-нибудь менюшку. Открывают код на js, и тут у них случается баттхерт, т.к. там что-то совершенно не похожее на java/c# написано. Каждая задача про «поправить менюшку» сразу начинает «весить» не меньше трех дней, просто по факту общения с js. Недавно один чувак (не у меня, у друга в команде) писал «плагин для jquery» для показа каких-то ошибок на форме красеньким цветом - три недели! И это если надо поправить чужой код, если писать свой - там совсем всё печально случается, да..

В идеале, иметь бы просто браузерную реализацию Java и писать всё на ней, тогда таких факапов не случится. Конечно, есть http://www.scala-js.org, но что-то я очкую - на практике уже сама Scala слишком сложная для быстрого понимания, а уж нестабильная бета-версия скалы под браузер, с экзепшенами на двух языках сразу, это совсем грустно. Да и весит она начиная с нескольких мегабайтов, dead code elimination в динамические языки не завезли, а стандартная библиотека огромная.

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от stevejobs

Тебя спасёт scala.js.
function arguments там, к счастью, нет, хотя доступ к нему можно получить через «сырое» обращение к global scope.

Да и весит она начиная с нескольких мегабайтов

4.2.

shahid ★★★★★
()
Последнее исправление: shahid (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Тем кому «поправить менюшку» надо выучить подмножество es5 и успокоиться.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

А проблемы ниасиляторов матчасти меня мало волнуют.

Сама мысль о том, что в язычке, созданном для решения задач вида

<a href="#" id="name">
    <img title="Hello" src="/ico/view.png" onmouseover="this.src='/ico/view.hover.png'" onmouseout="this.src='/ico/view.png'" />
</a>
, есть специальная «матчасть», которую надо «осиливать», вызывает здоровый смех.

dexpl ★★★★★
()
Ответ на: комментарий от stevejobs

пофиксить флоат (0.1+0.2 должен == 0.3)

Простите, а как это должно быть реализовано? Из определения флоата исходит, что его нельзя так сравнивать. А ты видимо хочешь fixed point.

vurdalak ★★★★★
()
Ответ на: комментарий от vurdalak

какой-нибудь кейворд, или даже блочный скоуп, или для неасиляторов написания конпеляторов - просто use флаг, который говорит что дальше вся арифметика пойдёт в fixed point. Можно ввести какие-нибудь fixed point literals типа 0.1'+0.2'==0.3'. Можно вообще всё сделать наоборот: нецелые по-умолчанию сделать fixed point, а floats делать специальным литералом. Кучу вещей можно сделать, если вообще этим заниматься.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Fixed point просто так не сделать. Можно какую-нибудь библиотеку привернуть, но выглядеть будет страшненько.

Vit ★★★★★
() автор топика
Ответ на: комментарий от VladimirMalyk

он уже очень давно делает не только это.

Поправка — его зачем-то используют не только для этого. Нецелевое использование и выявляет проблемы, озвученные выше.

dexpl ★★★★★
()
Ответ на: комментарий от stevejobs

У фиксед поинта слишком ограниченная область применения, чтобы пихать его прямо везде. Вот отдельный класс иметь для него как в джаве — нужно, да.

vurdalak ★★★★★
()
Ответ на: комментарий от dexpl

имхо, основное предназначение js — выживать в асинхронному аду. в аду, где исполняемый код — и тот загружается асинхронно.

VladimirMalyk ★★★★★
()
Ответ на: комментарий от Vit

ну как же не сделать, просто 0.1'+0.2' == 0.3' транслировать в (0.1 + 0.2).toFixed(3) == (0.3).toFixed(3). Сахар разворачивания ' в .toFixed наверняка можно сделать не приходя в сознание, не?

stevejobs ★★★★☆
()
Ответ на: комментарий от Vit

Береги себя - среди учивших JS в девяностые очень часты травмы пукана.

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

dexpl ★★★★★
()
Ответ на: комментарий от stevejobs

Ну посмотри вот это http://sweetjs.org/ . Но предупреждаю, давать такое жуниорам - это как обезьяне заменить пистолет на гранату.

Vit ★★★★★
() автор топика
Ответ на: комментарий от stevejobs

Фичи связанные с генераторами, реализуются через трансляторы (через полифилы никак). Есть пара фич типа proxy, которые эмулировать вообще нельзя.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Тех кто пишет на яваскрипте мало волнуют выкрики ботанов с галёрки.

Ну да, йотэсописателям не до отвлекающих факторов, им надо «матчасть изучать».

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

Матчасть надо изучать только тем, кто с галерки пыжится. Хотя бы чтобы обсирать яваскрипт со знанием дела и не выглядеть как пенсионер-маразматик, гордящийся пыльными грамотами.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

Матчасть надо изучать только тем, кто с галерки пыжится.

Не тобой ли выше по теме говорилось об осиливании матчасти для йотэсописания — всякие там eslint, лодаш и прочее? А теперь оказывается, что матчасть нужна для того, «чтобы обсирать яваскрипт со знанием дела».

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

Кому надопо делу - может просто спросить, и им расскажут минут за 10. А обсеруны с претензиями должны изучать самостоятельно и страдать, такие дела. Ну либо выглядеть старперами-дятлами, кому что больше нравится.

Vit ★★★★★
() автор топика

Скорее бы поддержку в браузеры запилили. И в node.js. Это точно, что заживём:)

lucentcode ★★★★★
()
Ответ на: комментарий от Xellos

На самом деле пока хватит если в ноде новые фичи заработают без флагов и нормально. А это довольно скоро.

Потому что для браузера я не обломлюсь бабелем запроцессить - там все равно ассеты собираются. А вот для ноды процессить уже не очень удобно.

Vit ★★★★★
() автор топика
Последнее исправление: Vit (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.