LINUX.ORG.RU

История изменений

Исправление stevejobs, (текущая версия) :

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

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

как ты можешь сам проверить, 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, :

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

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

как ты можешь сам проверить, 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). Юникод - но не юникод. Вспоминается старый баян - ворота «машины - не машины, ставить - не ставить».

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

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

Исходная версия stevejobs, :

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

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

как ты можешь сам проверить, 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). Юникод - но не юникод. Вспоминается старый баян - ворота «машины - не машины, ставить - не ставить».

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

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