Замечания и предложения

А как safe resize делать?

И пробовал и создавал. И двух миллионов было мало. Вот как раз лежит одна такая программа на Дельфи, там трёхмерный массив и по каждой размерности надо несколько сот, но как только массив больше, чем четыре гигабайта, то как вообще с ним работать, даже если 64 разрядный компилятор и система?

Вспомните определение массива. Если бы каждый элемент был в какой-то случайной части памяти, то программы работали бы на порядок дольше.

А что это даст кроме замедления компиляции и самой программы? Если этого не сделали(это ведь не так сложно), то это либо не даёт ничего, либо делает хуже.

А вот это уже обидно было!

© Алиса, Яндекс

Что для Вас обычный Паскаль? Турбо? Но ведь это форум PascalABC.NET! В PascalABC.NET этого сделать нельзя(сейчас).

А причём тут Дельфи?

Ну, в последнем вы зря придрались, это вполне реальный случай для паскаля…

А вот тут пожалуйста поподробнее.

Не net имелся в виду. Delphi, Lazarus, Free. Кто о турбо вообще вспоминает?

А Вы, в свою очередь, вспомните архитектуру памяти современного компьютера, схему адресации памяти и расскажите, где Вы видели, чтобы, к примеру, мегабайт памяти аппаратно адресовался впрямую непрерывно? Определение массива, которое Вы привели, - это логическое определение, ничего не говорящее о физической реализации. Оно досталось нам от первых ЭВМ, где память была действительно линейной. А в той же Windows Вы можете гарантировать, что Ваш массив вообще не окажется в виртуальной памяти? То-то и оно!

Ну, я же говорю, массивы из .Net, поидее уже в откомпилированной библиотеке хранятся… Вряд ли с ними можно сделать что то. Разве что атрибутами, но я поискал чутка на msdn - не нашёл.

Посмотрел, она при реализации цикла к внешним библиотекам не обращается, чистый IL код, единственное сравнение происходит по переменной цикла

Summary

код

// start of loop, entry point: IL_001a

      // [30 9 - 30 39]
      IL_001a: ldarg.0      // a
      IL_001b: ldind.ref    
      IL_001c: ldloc.0      // index
      IL_001d: ldarg.0      // a
      IL_001e: ldind.ref    
      IL_001f: ldloc.0      // index
      IL_0020: ldelem.i4    
      IL_0021: ldarg.0      // a
      IL_0022: ldind.ref    
      IL_0023: ldloc.0      // index
      IL_0024: ldelem.i4    
      IL_0025: mul          
      IL_0026: stelem.i4    

      // [31 9 - 31 25]
      IL_0027: ldloc.0      // index
      IL_0028: ldloc.1      // num
      IL_0029: clt          
      IL_002b: brfalse      IL_0039

      // [32 11 - 32 18]
      IL_0030: ldloc.0      // index
      IL_0031: ldc.i4.1     
      IL_0032: add          
      IL_0033: stloc.0      // index

      IL_0034: br           IL_001a
    // end of loop
1 лайк

Вы это к чему? к repeat until или…?

Это к подпрограмме sqr с циклом который я привёл как замену той страшной

В PascalABC.NET НЕЛЬЗЯ отключить проверку индексатора.

Это было и так понятно. Просто зачем вспоминать устаревшие версии.

Тут, вероятнее всего, Вы правы, но из программы есть видимость на массив как на линейную структуру. Скорее всего операционная система делит его на части, как Вы и сказали, но доступ по указателям ведь работает! Причём не только в Паскале.

Вы абсолютно правы. Есть базовый класс System.Array, который переопределяется каждым языком на уровне компилятора. Никаких атрибутов для отключения проверки индексов и правда нет. Единственное, что тут можно предложить - добавить в Паскаль директиву и реализовать на уровне языка работу по указателям. То есть сейчас всё опирается на System.Array, а можно сделать и обход через указатели. Просто это будет делать компилятор, а не программист в коде.

Это Вы к чему? Предлагаете вернуться к ассемблеру, только для .NET? :smile: Тогда уж назовём его, например, AsmABC.NET? :wink:

А вот теперь вообще непонятно.

Он декомпилировал вашу подпрограмму отсюда, и показал её код на CIL…

Не его, а свою. Ту первую мне что-то боязно было декомпилировать :grinning:

Почему если не под .NET, то сразу устаревшие. Делфи и Лазарус активно развивающиеся продукты, последние версии выходили уже в этом году.

Код к тому, что непонятно, чем она медленнее и где там дополнительные проверки.

Почему бы ему не работать? Но каждый Ваш указатель аппаратно (возможно и программно - в рамках ОС) преобразуется в реальный адрес памяти, и смещение указателя на 1 в адресации вовсе не означает соседний байт в микросхеме памяти. Точно так же, как логически последовательный файл на жестком диске или флеш-памяти “размазывается” по кластерам.

А можно узнать, что в них там развивается? Фусечки и рюшечки приделываются хвостиками то вверх, то вниз? Они - реально трупы, потому что язык в них не развивается, не отражает современных тенденций в программировании. Это как говорить об активном развитии локомобиля с паровым котлом, который сделали из современного титанового сплава.

А что Вам нужно? Я просто не в курсе, что такое можно было бы туда ввести по-делу, но не ввели и из-за этого какие-то серьёзные проблемы возникают. Рюшечек там как раз нет особо. Просто переделываются, чтобы продолжали работать под меняющиеся операционки и какие-то уж совсем явные недочёты устраняются. Мне для работы надо, не для обучения.

Лично мне ничего от этих систем программирования не нужно. Заинтересовала Ваша фраза “Делфи и Лазарус активно развивающиеся продукты”. Считаю, что это было вполне естественным - узнать, что может “активно развиваться” в похороненной историей системе программирования. А на поверку оказывается, что никакого “активного развития” там и нет:

Право же, странные у Вас понятия об активном развитии. Какая-то своя терминология. Не пробовали поработать в рекламном агентстве?

...Вот тебе и слава!
– Я не понимаю, при чем здесь «слава»? – спросила Алиса.
Шалтай-Болтай презрительно улыбнулся.
– И не поймешь, пока я тебе не объясню, – ответил он.
– Я хотел сказать: «Разъяснил, как по полкам разложил!»
– Но «слава» совсем не значит: «разъяснил, как по полкам разложил!» – возразила Алиса.
– Когда я беру слово, оно означает то, что я хочу, не больше и не меньше, – сказал Шалтай презрительно.

(Л.Кэррол)

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