Страница 1 из 1
FPC и mold. Возможно ли это ?
Добавлено: 24.04.2024 14:21:12
Alexander
Несколько лет назад перешёл в стадию стабильных релизов новый линкер mold (
https://github.com/rui314/mold). В FPC используется и очень сложным способом (включая отсутствующий пока в mold скриптинг) ld. Но тем не менее обратить на него внимание всё-таки стоит. Он более быстр и похоже позволяет решить задачу по заметному уменьшению размера выполняемого файла. Быть может разработчики FPC добавят что-то для поддержки mold или разработчики mold добавят поддержку fpc (а скорее всего нужно и то и другое), но это могло бы быть выигрышным решением.
Ну и наконец в мире Си и ассемблеров его уже можно успешно применять. Пример этого здесь:
http://soft.self-made-free.ru/GORG64_166.tar.xz
Обращает на себя внимание уменьшение размеров выполняемого файла.
Re: FPC и mold. Возможно ли это ?
Добавлено: 24.04.2024 15:44:02
Alex2013
ИМХО проще
LLCL доработать ...
Re: FPC и mold. Возможно ли это ?
Добавлено: 24.04.2024 15:55:08
Alexander
LLCL
Под Линукс не "доработать", а практически "с нуля":
Код: Выделить всё
/home/first/src/FPC/LLCL/sources/LLCLOSInt.pas(133,3) Fatal: (10022) Can't find unit Windows used by LLCLOSInt
Но это же виджеты, а то компоновщик, линкер. На размер они тоже влияют, но с другой стороны.
Re: FPC и mold. Возможно ли это ?
Добавлено: 24.04.2024 16:29:35
Awkward
На гитхабе картинка размеров и времени прямо-таки сказочная. Что, как бы, намекает, что это либо сказки, либо даёт неработоспособный код, либо исходники подобраны специально. Да и Сишный код, даже в скомпилированном виде, несколько отличается от паскалевского, так что не факт, что выигрыш будет вообще.
Re: FPC и mold. Возможно ли это ?
Добавлено: 24.04.2024 19:26:17
Alexander
неработоспособный код
Не, не всё так плохо. Код получается работоспособным. Даже выигрыш есть.
Просто не так радужно как в рекламе на гитхабе по части полной замены ld .
Re: FPC и mold. Возможно ли это ?
Добавлено: 24.04.2024 19:54:06
Alex2013
Alexander писал(а):Но это же виджеты, а то компоновщик, линкер. На размер они тоже влияют, но с другой стороны.
Это понятно, но стандартный LCL и так иногда "косит лиловым глазом" (например то очищая поля при повторном создании класса то рандомно забывая это делать - лечится это легко но трудно "поставить диагноз" ) а тут еще "таинственный линкер" что-то в "диком ООП" от LCL "за оптимизирует". (Хорошо еще в LCL дженериков нет )
Re: FPC и mold. Возможно ли это ?
Добавлено: 24.04.2024 21:58:32
Awkward
Alex2013 писал(а):(Хорошо еще в LCL дженериков нет )
в смысле, "нет"? А FGL, который активно используется в LCL?
Re: FPC и mold. Возможно ли это ?
Добавлено: 24.04.2024 22:13:50
Alex2013
Awkward писал(а):в смысле, "нет"? А FGL, который активно используется в LCL?
Ну это насколько я понял просто поддержка самых дженериков .
А основной код LCL написан очень давно без опоры на дженерики .
(Впрочем я давно не обновлял лазарус - есть несколько долгоиграющих легаси проектов и вообще мне пока и того что есть хватает)
Re: FPC и mold. Возможно ли это ?
Добавлено: 25.04.2024 22:25:50
Sergei I. Gorelkin
Так-то в FPC есть свой собственный линкер...
Re: FPC и mold. Возможно ли это ?
Добавлено: 26.04.2024 15:59:01
Снег Север
Re: FPC и mold. Возможно ли это ?
Добавлено: 26.04.2024 18:06:22
Alexander
Так-то в FPC есть свой собственный линкер...
Есть. И в него можно добавить подходы успешно применённые в mold, если понять их. И ещё не известно, что проще: добавить запуск mold или добавить его функции во встроенный линкер. Правда встроенный на текущий момент не умеет smartlink и по умолчанию не используется, но может это и даст импульс для его развития.
Re: FPC и mold. Возможно ли это ?
Добавлено: 26.04.2024 18:27:21
Sergei I. Gorelkin
Smartlink во встроенном линкере есть. Он для этого и был написан.
Строго говоря, написан он был для винды, потому что ld-bfd не умеет в smartlink для объектных файлов формата COFF. Для ELF - умеет, поэтому особо сакрального смысла во внутреннем линкере и нет, кроме как "все свое ношу с собой".
Re: FPC и mold. Возможно ли это ?
Добавлено: 26.04.2024 19:40:47
Alexander
Smartlink во встроенном линкере есть.
Если временно переименовать исполняемый файл системного линкера (*x86_64-linux-gnu-ld.bfd в *x86_64-linux-gnu-ld.bfd_) получим:
Код: Выделить всё
program sl;
{$MODE OBJFPC}
{$SMARTLINK ON}
begin
WriteLn('*');
end.
Код: Выделить всё
first@my:~/src/fpc/sl$ fpc -CX -XX -Xi sl.pas
Free Pascal Compiler version 3.3.1 [2024/03/07] for x86_64
Copyright (c) 1993-2023 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling sl.pas
Linking sl
sl.pas(8,1) Error: Util ld not found, switching to external linking
sl.pas(8,1) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/bin/ppcx64 returned an error exitcode
То есть он его всё равно задействует и без него не может. Даже при явном указании -Xi .