kouzdra (kouzdra) wrote,
kouzdra
kouzdra

Category:

Из серии очевидных не для всех очевидностей

Тут мне в комментах напоминают что в ранних фортранах нельзя было просто писать обращение к элементу массива более сложное, чем A(2*I+3)

Решение на сам деле для автокода (к каковому классу ранние фортраны и принадлежали) вполне разумное и встречается не только там:

Потому как A(I) реализуется как Addr(A) + I*sizeof(элемента А)
Понятно что A(2*I+3) переходит соответственно в (Addr(A) + 3*sizeof(элемента А)) + I*(2 * sizeof(элемента А))

(напомню что в классическом фортране нет рекурсии и все массивы статически размещены в памяти и имеют константный адрес - так что и Addr(A) и Addr(A) + 3*sizeof(элемента А) - просто константы)

То есть с точки зрения реализации обе конструкции идентичны по сложности* - одно умножение на константу и одно сложение с константой.

Что-то более сложное уже требует реального вычисления индексного выражения

Тож самое кстати и с iSUB-ами - они в варианте линейных функций над ними еще реализуются просто соответствующей модификацией дескриптора массива (все равно необходимого для реализаций конструкций типа М(I,*)). Чтото более сложное уже хуже.

Специально для rdia: на деле iSUB-ы не заменяются в С/C++ макросами или инлайн-функциями. Точнее все хорошо ровно до тех пор, пока на массив не создается ссылка или он не передается параметром. Там макросы и inline-функции обламываются. В отличие от.
*) Исключением является передача массива параметром - но и там усложнение умеренное - в случае когда к индексу прибавляется ненулевая константа - два сложения вместо одного.
Tags: Языки программирования
Subscribe

  • Из комментов

    Впрочем у истории с чёрными кораблями были две забавные концовки — одна в Порт-Артуре, другая — в Жемчужной гавани

  • Во всяком культивировании

    всяких покрытых богоматерей, дней оун-упа и прочих мининых-невских-пожарских и тп меня раздражают не поводы (на них мне действительно насрать) а…

  • В борьбе с диктатурой новая идея

    Хартия продолжает доставлять лулзы: Нам нужны силы, и мы обязаны помогать, а не убивать друг друга. Поэтому давайте признаем: кто не в маске — тот…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 39 comments

  • Из комментов

    Впрочем у истории с чёрными кораблями были две забавные концовки — одна в Порт-Артуре, другая — в Жемчужной гавани

  • Во всяком культивировании

    всяких покрытых богоматерей, дней оун-упа и прочих мининых-невских-пожарских и тп меня раздражают не поводы (на них мне действительно насрать) а…

  • В борьбе с диктатурой новая идея

    Хартия продолжает доставлять лулзы: Нам нужны силы, и мы обязаны помогать, а не убивать друг друга. Поэтому давайте признаем: кто не в маске — тот…