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

Есть ли возможность выкидывать из .exe неиспользуемые методы?

То есть для такого кода:

type
  t1 = class
    static procedure p1 := exit;
    static procedure p2 := exit;
    static procedure p3 := exit;
  end;
  
begin
  t1.p2;
end.

Сделать так, чтоб в .exe попал метод t1.p2, но не t1.p1 и не t1.p3?

А то меня слегка напрягает размер .exe файлов, когда подключён модуль OpenGL.

После того как я добавил (исправил) возможность передавать nil в параметры типа массива - размер практически пустого .exe вырос до 6.32MB .

Не уверен, что сюда с вопросом… но… Сейчас копаюсь в коде PABC (свой плагин делаю) и пока не сообразил, как вытянуть индекс первой ячейки массива в режиме Debug? Глянул в лист значений локальных переменных … и там с нуля!!!

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

А какой плагин?

Пока добрался до списка локальный переменных: Debugger.ProcessEventArgs.Process.LocalVariables из события Process_DebuggeeStateChanged где Process из WorkbenchServiceFactory.DebuggerManager.DebuggedProcess

Элементы списка экземпляры класса Debugger.Value Примитивные типы вроде как через строку можно получить. Value с массивом получают так:

var value = e.Process.LocalVariables.ToArray();
var array = value[3].GetMembers()[0]

Ну и сами значения через

var elms = array.GetArrayElements().ToArray();

А вот ссылку на экземпляр “статического массива” пока не получил… Не понял пока… Нет экземпляра, нет данных о классе и members…

Есть еще мысль залезть в сам модуль и через рефлексию получить сам экземпляр класса, но надеялся через IDE данные получить.

А какой плагин?

Некий рекорд написания кода и процесса пошаговой отладки, чтобы затем можно было визуализировать в другой программе. С изменением текста и перемещением курсора быстро разобрался. А вот с отладкой немного запутался. Позицию текущей выполняемой строки получил. Имена и значения локальных переменных из этого списка легко получить. А вот с массивом завис. Собственно, мне только простые вещи нужны, для учебных видео, для школьников. В основном в объеме ЕГЭ. Поэтому перечисления, ООП и прочие сложности не нужны.

Сейчас неиспользуемые методы выкидываются из exe если они находятся в pcu. А поскольку у вас модули, то непонятно, почему размер файлов такой большой

Обязательно надо разобраться, почему у Вас 6 Мб выходит exe

Статический массив у нас называется NullBasedArray. Найдите все вхождения этого слова в проекте - может, это наведёт на мысль. И да - рефлексией!

13 сообщений перенесены в новую тему: OpenGL стандартный модуль

Пожалуйста, добавьте поддержку индексов типа BigInteger в динамических массивах. Из-за того, что её нет, мне в моём проекте придётся дублировать половину или треть кода программы. Если вы её не добавите, прошу сказать, как перевести значение в BigInteger в значение в Integer, если значение в BigInteger точно лежит в допустимых пределах для Integer (MinInteger<=BigInteger<=MaxInteger).

Зачем?

Явным приведением типа. integer(a)

begin
  var b := BigInteger(128);
  var a := integer(b);
end.

Вам не хватает массива из 2 147 483 647 элементов? Может, есть смысл задуматься об алгоритме?

1 лайк

Я легко могу представить себе такой массив, и даже больше. Но одновременно представить использование его в Паскале мне трудно. Если нужен такой массив, может надо подумать еще и об языке?

Нет, ну если писать в массив сведения о каждом атоме во Вселенной - конечно. Но, может проще заняться каким-то делом? )))

Чуть больше двух миллиардов степеней свободы - может быть и не среднее число в некоторых расчетах, однако ничем не выдающееся. Матрица 100 на 100 тысяч элементов вполне разумная. Насчет числа атомов - вот число Авогадро. И вот именно поэтому методами молекулярной динамики пока что сложно воспользоваться для чего-то близкого к макроскопическому размеру.

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

1 лайк

Вот и я про то же самое.

Разве платформа .Net и множество библиотек-наработок не подходит для подобного?

Нет, если у вас вычисления на миллиарды ячеек - вам подходят низкоуровневые языки как C++.

А вообще вы всё ещё не озвучили что вы пытаетесь сделать.

И еще об оперативной памяти компьютера - 16 Гб будет тут явно мало

Получается, что несмотря на наличие средств в самом .Net, выделение непрерывных областей для огромных структур с параллельными “фантомами” - особенно для 32-битных процессов - не спасёт ни дефрагментация, ни принудительный сбор мусора, ни файл подкачки, ни рейд-массив, ни масштабируемость.