The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск nginx 1.17.9 и njs 0.3.9, opennews (ok), 04-Мрт-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


21. "Выпуск nginx 1.17.9 и njs 0.3.9"  –4 +/
Сообщение от Аноним (21), 04-Мрт-20, 15:56 
А с чем связано? Конкурентное преимущество какое-то или просто личное расположение к Китайцам?
Или лучное отторжение от российских дрязг? Так надо понять почему так и ведь не единая история, а пожалуй национальная идея - отжал спрятал выехал и получил гражданство..
Ответить | Правка | Наверх | Cообщить модератору

27. "Выпуск nginx 1.17.9 и njs 0.3.9"  +6 +/
Сообщение от Аноним (4), 04-Мрт-20, 16:40 
Все что ты сказал плюс неприятие всего что связано с джаваскрипт. Lua подсознательно как то больше ассоциируется с быстрым встроенным простым языком.
Ответить | Правка | Наверх | Cообщить модератору
Часть нити удалена модератором

32. "Выпуск nginx 1.17.9 и njs 0.3.9"  +1 +/
Сообщение от Аноним (4), 04-Мрт-20, 17:42 
Там и ~= вместо != И все равно lua по юзабельности опережает js подделки.
Ответить | Правка | К родителю #51 | Наверх | Cообщить модератору

36. "Выпуск nginx 1.17.9 и njs 0.3.9"  –2 +/
Сообщение от Аноним (34), 04-Мрт-20, 18:01 
Любой кусок кхм будет лучше, чем JS.

[] + [] → "" // Empty string? These are arrays!
[] + {} → [object object]
{} + [] → 0 // Why isn't the operation commutative???
{} + {} → NaN // ???
16 == [16] → true // Array converted into string, then into number
16 == [1,6] → false // But what is array converted into?
"1,6" == [1,6] → true
var arr = [];
arr.length → 0
arr[3] → "undefined" // No array bounds exception???
arr[3] = "hi";
arr.length → 4 // 4??? Only one element has been added!
arr["3"] → "hi" // Apparently "3" is coerced into a number
delete(arr[3]);
arr.length → 4 // 4??? There are no elements in the array!
arr[3] → "undefined" // 7 lines above, length was "0"!
var i = 1;
i = i + ""; // Oops!
i + 1 → "11"
i - 1 → 0
var j = "1";
++j → 2 // Okay, but...

var k = "1";
k += 1 → "11" // What???

[1,5,20,10].sort() → [1, 10, 20, 5] // Why is it sorting strings???
xs = ["10", "10", "10"];
xs.map(parseInt) → [10, NaN, 2] // ???
y = {};
y[[]] = 1;
Object.keys(y) → [""]

Ответить | Правка | Наверх | Cообщить модератору

50. "Выпуск nginx 1.17.9 и njs 0.3.9"  –4 +/
Сообщение от мяя (?), 04-Мрт-20, 23:49 
Страшилки для маленьких.
Это всё чушь если знать про динамическую типизацию и неявное преобразование типов.
Тем более такой код не будет использоваться в реальной жизни.
> Only one element has been added!

Про дырявые массивы не не слышали... А между прочим позволяет огого как в ряде случаев производительность поднять.

Ответить | Правка | Наверх | Cообщить модератору

61. "Выпуск nginx 1.17.9 и njs 0.3.9"  –1 +/
Сообщение от Аноним (64), 05-Мрт-20, 20:35 
> Это всё чушь если знать про динамическую типизацию и неявное преобразование типов.

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

Ответить | Правка | Наверх | Cообщить модератору

70. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним (70), 06-Мрт-20, 03:32 
> на этой "чуши" разработчики спотыкаются регулярно

"Разработчики" - это существительное множественного числа. Когда говоришь о себе, употребляй единственное число. И правильно не "разработчик", а "особь семейства Cercopithecidæ", поскольку только она предпочитает использовать "50 неочевидных ситуаций" вместо одной-единственной, но очевидной.

Ответить | Правка | Наверх | Cообщить модератору

57. "Выпуск nginx 1.17.9 и njs 0.3.9"  –3 +/
Сообщение от Аноним (70), 05-Мрт-20, 04:53 
Тоже вспоминаешь npm leftpad?

> [] + [] → "" // Empty string? These are arrays!

Особь семейства Cercopithecidæ не читала стандарт языка, но уже имеет ценное мнение о том, как На Самом Деле™ должно работать сложение... массивов? (whatever that means)

Ответить | Правка | К родителю #36 | Наверх | Cообщить модератору

58. "Выпуск nginx 1.17.9 и njs 0.3.9"  –1 +/
Сообщение от Moomintroll (ok), 05-Мрт-20, 09:35 
> Особь семейства Cercopithecidæ не читала стандарт языка, но уже имеет ценное мнение о том, как На Самом Деле™ должно работать сложение... массивов? (whatever that means)

Я тоже не читал стандарт, но для меня, как для особи семейства Cercopithecidæ (кто это?), очевидно, что при сложении двух массивов должен получиться массив.

Если в стандарте языка это не так, это вовсе не значит, что это правильно. Это значит, что стандарт кривой.

Ответить | Правка | Наверх | Cообщить модератору

59. "Выпуск nginx 1.17.9 и njs 0.3.9"  +1 +/
Сообщение от Аноним (70), 05-Мрт-20, 10:47 
> при сложении двух массивов должен получиться массив

Такой операции, как "сложение массивов", не знает ни один язык.

Есть конкатенация массивов (concat), сведение массива к одному значению (reduce), есть много чего еще. А вот сложения (addition) нету. И вообще, под этим можно подразумевать все, что угодно, в зависимости от текущей задачи:

Cercopithecus #1: Было бы прикольно, если бы [1,2,3] + [4,5,6] давал [1,2,3,4,5,6]
Cercopithecus #2: Было бы прикольно, если бы [1,2,3] + [4,5,6] давал 1+2+3+4+5+6 = 21
Cercopithecus #3: Было бы прикольно, если бы [1,2,3] + [4,5,6] давал [1+4,2+5,3+6] = [5,7,9]
Cercopithecus #4: Было бы прикольно, если бы [1,2,3] + [4,5,6] давал 3+3 = 6

Ну и кого из этих представителей семейства Cercopithecidæ слушать? Чью хотелку официально отражать в стандарте?

https://www.google.com/search?q=array+addition

Ответить | Правка | Наверх | Cообщить модератору

65. "Выпуск nginx 1.17.9 и njs 0.3.9"  –1 +/
Сообщение от Аноним (64), 05-Мрт-20, 20:50 
> Ну и кого из этих представителей семейства Cercopithecidæ слушать? Чью хотелку официально отражать в стандарте?

Очевидно, что стандарт JS писал самый упoротый из их представителей.

Ответить | Правка | Наверх | Cообщить модератору

69. "Выпуск nginx 1.17.9 и njs 0.3.9"  +1 +/
Сообщение от Аноним (70), 06-Мрт-20, 03:28 
Мнение представителя семейства Cercopithecidæ можно оставить без внимания в силу очевидных проблем с формулированием своих хотелок. Так, банальную конкатенацию массивов этот примат называет "сложением массисов", что уже говорит о том, что в программировании ему делать нечего.
Ответить | Правка | Наверх | Cообщить модератору

78. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним (78), 08-Мрт-20, 15:49 
>> при сложении двух массивов должен получиться массив
> Такой операции, как "сложение массивов", не знает ни один язык.
> Есть конкатенация массивов (concat), сведение массива к одному значению (reduce), есть
> много чего еще. А вот сложения (addition) нету. И вообще, под
> этим можно подразумевать все, что угодно, в зависимости от текущей задачи:
> Cercopithecus #1: Было бы прикольно, если бы [1,2,3] + [4,5,6] давал [1,2,3,4,5,6]

Это конкатенация

> Cercopithecus #2: Было бы прикольно, если бы [1,2,3] + [4,5,6] давал 1+2+3+4+5+6
> = 21

Результат - число (не массив)
> Cercopithecus #3: Было бы прикольно, если бы [1,2,3] + [4,5,6] давал [1+4,2+5,3+6]
> = [5,7,9]

Правильная хотелка - сумма двух векторов
> Cercopithecus #4: Было бы прикольно, если бы [1,2,3] + [4,5,6] давал 3+3
> = 6

Результат - число (не массив)

Ответить | Правка | К родителю #59 | Наверх | Cообщить модератору

67. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним (67), 06-Мрт-20, 00:41 
А сумма двумерных массивов создаст двумерную строку?
Ответить | Правка | К родителю #57 | Наверх | Cообщить модератору

74. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним2 (?), 06-Мрт-20, 13:17 
Вот, вроде
- программирование
- алгоритмы
- математические выражения...
Ожидается присутствие хоть какой-то логики
Особенно понравилось i+1 и i-1 :)
Ответить | Правка | К родителю #36 | Наверх | Cообщить модератору

42. "Выпуск nginx 1.17.9 и njs 0.3.9"  +1 +/
Сообщение от Аноним (-), 04-Мрт-20, 20:12 
>  js подделки.

Если они подделки, то я прямо боюсь спросить, что же оригинал?!

Ответить | Правка | К родителю #32 | Наверх | Cообщить модератору

35. "Выпуск nginx 1.17.9 и njs 0.3.9"  +1 +/
Сообщение от Аноним (34), 04-Мрт-20, 17:58 
> Индексация массивов начинается с 1 а не 0. Это все что вам нужно знать про это недоразумение.

Мнение хипстеров особого интереса не представляет.
FORTRAN (since 1957) индексирует с единицы. Появившийся на 12 лет позже C ввёл костыль с индексацией от нуля в основном для синтаксического сахарка с указателями. В скриптовом языке, естественно, это смысла не имеет.

Ответить | Правка | К родителю #51 | Наверх | Cообщить модератору

43. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним (-), 04-Мрт-20, 20:17 
> Мнение хипстеров особого интереса не представляет.

Попробуй без этих "хипстеров" с их сями хотя-бы свой компьютер загрузить, умник :)

Ответить | Правка | Наверх | Cообщить модератору

44. "Выпуск nginx 1.17.9 и njs 0.3.9"  –1 +/
Сообщение от Аноним (64), 04-Мрт-20, 20:42 
У меня не компьютер, у меня ЭВМ. Тёплая, ламповая.
Ответить | Правка | Наверх | Cообщить модератору

55. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним (55), 05-Мрт-20, 01:25 
> У меня не компьютер, у меня ЭВМ. Тёплая, ламповая.

С теплой и ламповой на опеннете не больно поумничаешь :P

Ответить | Правка | Наверх | Cообщить модератору

47. "Выпуск nginx 1.17.9 и njs 0.3.9"  +1 +/
Сообщение от Аноним (67), 04-Мрт-20, 21:03 
Т.е. если нумерация массива начнется с 1, то компьютер не загрузится?
IBM/360 об  этом не знала :)
Ответить | Правка | К родителю #43 | Наверх | Cообщить модератору

48. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним84701 (ok), 04-Мрт-20, 21:12 
>> Мнение хипстеров особого интереса не представляет.
> Попробуй без этих "хипстеров" с их сями хотя-бы свой компьютер загрузить, умник :)

Если они не знают, почему в сях индексация начинается с 0,
то "их си" - разве что хелловорды … а так (пока, по крайней мере у меня) компьютер все еще без JS и питона грузится :)


#include <stdio.h>                                                                      
int main(void) {
    int bar[6];
    4[bar] = 10;
    char* foo[2] = {"hello","hello"};                                                    
    1[foo] = "world";                                                                    
                                                                                        
     int y = 2334;                                                                        
     int *x = &y;                                                                        
     0[x] = 1337;    
                                                                    
     puts(*foo);                                                                          
     puts(1[foo]);                                                                        
     printf("%d %d %d\n",0[x], y, bar[4]);                  
     return 0;                                                                            
}
% gcc -Wall -Wextra hw.c && ./a.out
hello
world
1337 1337 10

Ответить | Правка | К родителю #43 | Наверх | Cообщить модератору

54. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним (54), 05-Мрт-20, 01:22 
> Если они не знают, почему в сях индексация начинается с 0,

Может, потому что память начинается с адреса 0? :) Вон Cortex M при power-up первым делом берет вектор по адресу 0. Кому не нравится что это не 1 - может пожаловаться в спортлото, например.

Ответить | Правка | Наверх | Cообщить модератору

62. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним (64), 05-Мрт-20, 20:38 
> Может, потому что память начинается с адреса 0?

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

Ответить | Правка | Наверх | Cообщить модератору

68. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним84701 (ok), 06-Мрт-20, 00:51 
> Тогда вы сможете сделать и второй шаг — объяснить, почему в скриптовых языках индексация не обязана начинаться с нуля.

Скритовые ЯП тут особо ни при чем. Массивы сами по себе уже абстракция (foo[i] -- это  смещение i относительно адреса foo).
Тут просто сочетается синдром водоплавающих и "мы так привыкли и не задумывемся", хотя в том же сишном foo[3] aka *((foo)+(3)) почему-то анонимов не смущает неявное (3*размер_элемента) ;)


var myarr: array[-5..10, -10..10] of Byte;
begin
    myarr[10][10] := 37;
    myarr[-5,-10] := 13;

(ну или если паскаль слишком "скриптово")

echo "void foo(void) {
int bar[10];              
bar[0] = 1;
bar[1] = 2;
}"|gcc -O0 -masm=intel -S -m32 -xc -o- -|grep -v "\."  
foo:
    push    ebp
    mov    ebp, esp
    sub    esp, 48
    mov    DWORD PTR [ebp-40], 1    ;первый элемент массива
    mov    DWORD PTR [ebp-36], 2    ;второй
    nop
    leave
    ret

(т.е. на более низком уровне индексация массива может начинаться совсем не с 0)
Ответить | Правка | Наверх | Cообщить модератору

80. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним (80), 08-Мрт-20, 23:33 
> Массивы сами по себе уже абстракция (foo[i] -- это  смещение i относительно адреса foo).

Память как таковая, в общем то тоже абстракция. На уровне физики чип RAM бывает например двухмерным массивом. Однако врядли вы будете в большом восторге от идеи узнавать истинную геометрию каждого чипака оперативы, высчитывая rows и columns, которые, однако, ни разу не константа.

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

> (т.е. на более низком уровне индексация массива может начинаться совсем не с 0)

"Права купил, а ездить не купил?" :) Режимы адресации и их чудеса не имеют никакого отношения к тому с чего начинается адресное пространство.

Ответить | Правка | Наверх | Cообщить модератору

82. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним84701 (ok), 09-Мрт-20, 01:31 
>> Массивы сами по себе уже абстракция (foo[i] -- это  смещение i относительно адреса foo).
> Память как таковая, в общем то тоже абстракция. На уровне физики чип
> RAM бывает например двухмерным массивом. Однако врядли вы будете в большом

Это все очень интересно, но на причину "почему индексация  массивов с 0 - более труЪ" не тянет от слова "совсем".

>> (т.е. на более низком уровне индексация массива может начинаться совсем не с 0)
> "Права купил, а ездить не купил?" :) Режимы адресации и их чудеса
> не имеют никакого отношения к тому с чего начинается адресное пространство.

"Очки купил, а читать …?" :) Специально цитировал на что отвечаю - спорить с анонимом по поводу "Может, потому что память начинается с адреса 0?" в качестве аргумента "нулевой индексации" не вижу смысла.
Т.е. тема - индексация массивов в различных ЯП и отображение на более нижнем уровне, а не "с чего начинается адресное пространство".

Приведенный выше листинг вполне валидный режим для индексации "в ручном режиме" массивов на стеке при ваянии "шедевров" прямо в x86асме, хотя народ конечно предпочитал LOCAL макросы или хотя бы EQU определения, вместо жонглирования относительными адресами.
Ну и заодно наглядно демонстрирует,  что режим адресации "с 0" даже в "низкоуровневом" си не гарантирует такой же "маппинг" на более нижнем уровне.
И вообще, что foo[-10], что foo[10] - компилятору все едино (а уж современному с наворотами - он еще и варнинги "index out of array" будет выдавать).
Поэтому претензии вида "Индексация массивов начинается с 1 а не 0. Это все что вам нужно знать про это недоразумение." - не понятны.

Конкретно в cи причина сильно смахивает на гибрид наследия древних времен написания компилятора ручками (не нужно заморачиваться с семантикой и прослойкой для парсинга foo[-10, 10], для которого нужно запоминать и  каждый раз вытаскивать определение массива) плюс  определение сабскрипта E1[E2]<=> *((E1)+(E2)) (потому и возможны "кунстштюки" типа 10[x] в валидном коде),
т.е. ковыряние массив проходит как  "указатель на первый элемент + смещение" => адресная арифметика, а запись foo[i] как синтактический сахар.
Если нужно "как проще" (для написания компилятора) то напрашивается индексация с 0: первый элемент foo[0]<=> foo+0 <==> foo и "больше ничего делать не надо" => т.е. сделали как проще, а не потому что мифическое "так ближе к железу!".
Вон, в фортране индексы вполне себе начинаются по умолчанию с 1 (а еще можно определить свой диапазон integer foo(-100:500)) - и ничего, (был) самый быстрый ЯП для вычислений туеву кучу лет.

Ответить | Правка | Наверх | Cообщить модератору

83. "Выпуск nginx 1.17.9 и njs 0.3.9"  +/
Сообщение от Аноним (-), 10-Мрт-20, 01:25 
> Это все очень интересно, но на причину "почему индексация  массивов с
> 0 - более труЪ" не тянет от слова "совсем".

Довольно криво считать адреса с нуля а массивы с единицы. Например, в сях отличия массивов от просто указателей ... по сути номинальные.

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

Вам не кажется что будет по идиотски, если мы хотим начиная с адреса 0 поработать, но референсить в виде массива будем уже как 1? Это немедленно гарантирует легион "off by one" errors во всей системщине, как будто их без этого мало. И более того - есть еще такая веселая штука как alignment и пожелания железяк к оному. Вебмакак такими словами, конечно, не пугают, показывая им фильдеперсовые абстракции. Но эти абстракции кто-то должен сделать. И вот им совершенно не удобно все время влетать мордой в off by one error'ы на этой почве, равно как и большие проблемы с чет/нечет и вообще alignment.

Вплоть до того что хардварно шина может оперировать сразу эн байтами за присест, клав на несколько младших битов адреса болт. Некоторые процы за потуги несуществующие биты шины юзать вообще хардварным эксепшном (alignment error) по морде могут больно дать. Это, конечно, неудобно, но ряд процов этим грешил и назад в фабы их не затолкаешь.

> спорить с анонимом по поводу "Может, потому что память начинается с
> адреса 0?" в качестве аргумента "нулевой индексации" не вижу смысла.

А почему, собственно, адресация одного того же по указателю и массивом должна работать вот настолько по разному? Чтобы больше off by one было?

Ответить | Правка | Наверх | Cообщить модератору

79. "Выпуск nginx 1.17.9 и njs 0.3.9"  –1 +/
Сообщение от Аноним (80), 08-Мрт-20, 23:29 
> Итак, вы умеет пользоваться гуглом.

Я еще и памятью умею пользоваться.

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

Потому что поделки для вебмакак, не понимающих как работает компьютер? :)

Ответить | Правка | К родителю #62 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру