The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Выпуск nginx 1.17.9 и njs 0.3.9"
Отправлено Аноним84701, 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)) - и ничего, (был) самый быстрый ЯП для вычислений туеву кучу лет.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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