FPC и mold. Возможно ли это ?

Проектирование и разработка идеального средства программирования.

Модератор: Модераторы

Ответить
Аватара пользователя
Alexander
энтузиаст
Сообщения: 873
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

FPC и mold. Возможно ли это ?

Сообщение Alexander »

Несколько лет назад перешёл в стадию стабильных релизов новый линкер mold (https://github.com/rui314/mold). В FPC используется и очень сложным способом (включая отсутствующий пока в mold скриптинг) ld. Но тем не менее обратить на него внимание всё-таки стоит. Он более быстр и похоже позволяет решить задачу по заметному уменьшению размера выполняемого файла. Быть может разработчики FPC добавят что-то для поддержки mold или разработчики mold добавят поддержку fpc (а скорее всего нужно и то и другое), но это могло бы быть выигрышным решением.

Ну и наконец в мире Си и ассемблеров его уже можно успешно применять. Пример этого здесь: http://soft.self-made-free.ru/GORG64_166.tar.xz
Обращает на себя внимание уменьшение размеров выполняемого файла.
Alex2013
долгожитель
Сообщения: 3212
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

ИМХО проще LLCL доработать ...
Аватара пользователя
Alexander
энтузиаст
Сообщения: 873
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

LLCL
Под Линукс не "доработать", а практически "с нуля":

Код: Выделить всё

/home/first/src/FPC/LLCL/sources/LLCLOSInt.pas(133,3) Fatal: (10022) Can't find unit Windows used by LLCLOSInt
Но это же виджеты, а то компоновщик, линкер. На размер они тоже влияют, но с другой стороны.
Awkward
новенький
Сообщения: 53
Зарегистрирован: 18.01.2017 23:06:47

Сообщение Awkward »

На гитхабе картинка размеров и времени прямо-таки сказочная. Что, как бы, намекает, что это либо сказки, либо даёт неработоспособный код, либо исходники подобраны специально. Да и Сишный код, даже в скомпилированном виде, несколько отличается от паскалевского, так что не факт, что выигрыш будет вообще.
Аватара пользователя
Alexander
энтузиаст
Сообщения: 873
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

неработоспособный код
Не, не всё так плохо. Код получается работоспособным. Даже выигрыш есть.
Просто не так радужно как в рекламе на гитхабе по части полной замены ld .
Alex2013
долгожитель
Сообщения: 3212
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Alexander писал(а):Но это же виджеты, а то компоновщик, линкер. На размер они тоже влияют, но с другой стороны.
Это понятно, но стандартный LCL и так иногда "косит лиловым глазом" (например то очищая поля при повторном создании класса то рандомно забывая это делать - лечится это легко но трудно "поставить диагноз" ) а тут еще "таинственный линкер" что-то в "диком ООП" от LCL "за оптимизирует". (Хорошо еще в LCL дженериков нет )
Awkward
новенький
Сообщения: 53
Зарегистрирован: 18.01.2017 23:06:47

Сообщение Awkward »

Alex2013 писал(а):(Хорошо еще в LCL дженериков нет )
в смысле, "нет"? А FGL, который активно используется в LCL?
Alex2013
долгожитель
Сообщения: 3212
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Awkward писал(а):в смысле, "нет"? А FGL, который активно используется в LCL?
Ну это насколько я понял просто поддержка самых дженериков .
А основной код LCL написан очень давно без опоры на дженерики .
(Впрочем я давно не обновлял лазарус - есть несколько долгоиграющих легаси проектов и вообще мне пока и того что есть хватает)
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Так-то в FPC есть свой собственный линкер...
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Возможно ли это ?
ZUp8SZUee0o.jpg
Аватара пользователя
Alexander
энтузиаст
Сообщения: 873
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

Так-то в FPC есть свой собственный линкер...
Есть. И в него можно добавить подходы успешно применённые в mold, если понять их. И ещё не известно, что проще: добавить запуск mold или добавить его функции во встроенный линкер. Правда встроенный на текущий момент не умеет smartlink и по умолчанию не используется, но может это и даст импульс для его развития.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Smartlink во встроенном линкере есть. Он для этого и был написан.
Строго говоря, написан он был для винды, потому что ld-bfd не умеет в smartlink для объектных файлов формата COFF. Для ELF - умеет, поэтому особо сакрального смысла во внутреннем линкере и нет, кроме как "все свое ношу с собой".
Аватара пользователя
Alexander
энтузиаст
Сообщения: 873
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение 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 .
Ответить