Не в паскале, а в PascalABC .NET. Но при этом в других имплементациях паскаля не работает, а значит использовать это можно только в крайнем случае, если нет альтернатив.
А в данном случае — альтернативы есть, следовательно про существование FileInfo лучше забыть.
type
t0 = class
i := 3;
end;
t1 = record
i := 5;
o := new t0;
end;
begin
var a := new t1;
var p := @a; // потому что ^t1 это глупость - без присвоения и объявить не даст
New(p); // А теперь собственно выделяем память
System.GC.Collect;
var o2 := new t0; // У меня без этого выводит 3 а не 0. У вас может и упасть с ошибкой прав доступа
p^.o.i.Println;
//System.GC.KeepAlive(o2); // На всяк, если у вас оптимизатор JIT-а прешит удалить o2
end.
Потому что контролировать управляемые ссылки, которые оказались в неуправляемой (средой выполнения, включая сборщик мусора) области памяти - занятие в целом бесполезное.
Их типизация ничего не значит после этапа компиляции. В отличии от ссылок, имеющих строгую типизацию и во время выполнения (что позволяет эффективно использовать is и as), для слежения за ссылками, оказавшимися под другими ссылками.
В .Net есть средства для борьбы с такими проблемами.
GC.KeepAlive это одно из них, но полезное только для локальных переменных. По сути это вызов процедуры, которая ничего не делает и удаляется при оптимизации, но переданная в неё переменная не может быть так же удалена.
Есть ещё System.Runtime.InteropServices.GCHandle, но оно связывает руки сборщику мусора. И добавляет ещё больше бойлерплейта, поверх явных Dispose-ов, необходимых с указателями.
Где GCHandle должно использоваться - так это как тут, где ресурс передаётся в вызов неупрвляемого кода, и надо чтоб пока неуправляемый код работает - этот ресурс нельзя было удалить.
То есть, как я уже сказал раньше, всё с указателями должно использоваться только для связи с неуправляемым кодом.
Нет, достаточно просто посмотреть на все перегрузки функций типа Reset, Rewrite и т.п.
Вы как то странно на это смотрите. Системные библиотеки .Net-а подключаются и загружаются всегда. И большая часть их информации хранится единожды для всех запущенных программ. Так что никакого урона ни производительности, ни тем более размеру .exe от них нет.
Другое дело, PABCSystem, да и сахар языка, дают более сладкий доступ к тому что есть в .Net . Но это не всегда правда. К примеру вы не сможете использовать тип text чтоб прочитать файл, зашитый внутрь .exe-шника. Если нужен общий метод, работающий на все ситуации - надо брать стандартные типы и методы .Net-а.
Потому что их так и задумывали - чтоб во всех .Net языках был, к примеру, один тип string, не требующий дополнительного перевода при пересылке между программами и .dll-ками. И типов вроде System.IO.Stream и FileInfo это так же касается.
Кроме того, у этих типов значительно проработаны детали. К примеру метод вроде FileInfo.Refresh нужен очень редко, так что даже если бы в PABCSystem была обёртка FileInfo (отдельно от типов вроде text и file, не дающих прямого доступа к его возможностям) - его небыло бы смысла добавлять. Но когда он нужен - единственной альтернативой будут external подпрограммы.
А ещё такой вопрос. Когда компилируешь из файловой системы, а не через IDE, компилятор игнорирует настройку на отключение генерации отладочной информации.
Как я понимаю, компилятор при таком методе запускается с настройками по умолчанию. Попытался его поковырять, но не разобрался, можно ли переопределить дефолтные настройки. Есть ли такая возможность?
ПКМ >> Компилировать это простейший вызов консольного компилятора.
Запускайте его чистую версию (pabcnetcclear.exe) из консоли напрямую, чтоб использовать все опции.
Или копайтесь в реестре, в папке HKEY_CLASSES_ROOT\PascalABCNET.PascalABCNETParser\shell, чтоб изменить/добавить кнопки в меню ПКМ.
В общем было достаточно в HKEY_CLASSES_ROOT\PascalABCNET.PascalABCNETParser\shell\compile\command подменить "path\pabcnetc.exe" "%1" на "path\pabcnetcclear.exe" "%1"
не то что бы я затруднялся в чём то. меня интересовала сама возможность. если бы с какой то существующей возможностью возникли проблемы, то да, уже лучше в эту тему/аналогичную
В данном-то случае я о себе речь веду. Меня вполне устраивает автообновление от известного производителя (а базы для антивирусника Вы тоже вручную всегда обновляете?), а интернет у меня действительно безлимитный и достаточно быстрый (500 Мбит/с).