Текущий архив: 2004.02.29;
Скачать: CL | DM;
Вниз
KOL2FPC Найти похожие ветки
← →
Кладов (2003-05-30 19:04) [0]Ну вот, первый шажок сделан: утилиту KOL2FPC я сделал, какое-то количество кода поправил, теперь формируется минимальный KOLFPC.PAS, в нем пока только TObj и TList, и это уже компилируется под FPC и даже кажется выполняется (для Windows пока). Кому интересно посмотреть, я выкладываю утилиту KOL2FPC, а так же архивчик GotoFPC.zip, там обновление для kol.pas от версии 1.74 (именно к обновленной версии и нужно применять KOL2FPC.exe, чтобы получился KOLFPC.PAS), и пример приложения (тьфу, какого приложения! программы), которое умеет так пока мало... но занимает 83,5К даже после удаления отладочной информации :) Ну, лиха беда начало, дойдут руки - мы и системные модули в FPC поменяем, чтобы добиться хотя бы в районе 40К минимальную прогу делать.
ссылки: http://bonanzas.rinet.ru/KOL2FPC.zip
http://bonanzas.rinet.ru/GotoFPC.zip
← →
alex_s (2003-05-31 04:09) [1]прошу прощения за серость, и отсталость от времени, но что такое
FPC ? :-)
← →
alex_s (2003-05-31 04:19) [2]О, я понял, что речь идет о Free Pascal. Кстати, чтобы
долго не морочиться можно заменить object на class. Заодно
и наследование появится :-)
← →
Кладов (2003-05-31 08:19) [3]там так и сделано. Но не ради наследования (а как опыт показал, для программирования наследование не нужно), а ради совместимости с FPC, который с object плохо работает.
← →
Кладов (2003-05-31 09:47) [4]Побольше немного добавлено. Посмотреть можно там же - обновил оба архивчика.
Теперь возникает подозрение, что FPC не понимает smart-linking на уровне по крайней мере процедур, и только модулями отбрасывает и/или классами. Размер экзешника увеличился после добавления пары классов и некоторого количества процедур и функций до 116К. Хотя может это я что-то с опциями компилятора намудрил. Кстати, насчет опций. Они что, в экзешнике хранятся? (Если удалить экзешник из проводника, то компилятор тут же забывает, где kolfpc.pas. Забавно получается).
Богуслав, или кто разбирался с FPC, помо жите разобраться насчет смарт-линкинга, пожалуйста. Вопрос важный: KOL весь строится на том, что лишние методы не будут вставлены в код программы, поэтому можно тип TControl раздувать до бесконечности. Если для FPC это не так, то там нужен совсем другой подход, и меня это не устраивает.
← →
Кладов (2003-05-31 12:45) [5]Я вот думаю, не сделать ли свой компилятор с паскаля. Можно было бы
попробовать сделать его как двух-шаговый
Pascal->P-cod(Goodwell)[->assembler]->...->exe, тогда часть
P-cod->...->exe пригодилась бы для гудвела, да и часть Pascal->P-cod
можно было бы включить в гудвел как плагин, понимающий чистый
Паскаль. Паскаль очень простой язык для компиляции, в свое время я
делал работающий компилятор подмножества С в подобие П-кода (то, что
он работал, знаю на 100%, т.к. у меня был интерпретатор П-кода, и
программа работала в таком виде на СМке на реальном производстве), так
что проблем с написанием компилятора в П-код с Паскаля особых нет. П-код в
ассемблер тоже в принципе решабельно, даже какие-то оптимизации можно
сделать, по размеру и по скорости. А дальше доверить работу тому же TAsm"у и TLink"у, на первое время.
← →
SPeller © (2003-05-31 20:17) [6]Почему бы нет? Может, тогда этот компилятор ещё и в Дельфи сунуть удастся? В таком случае вообще прекрасно будет - отличная среда + свой компилятор! :)
← →
SPeller © (2003-05-31 20:23) [7]Отладчик вот только Дельфийский, интересно, как к этому отнесётся?
← →
Кладов (2003-05-31 21:10) [8]
> Может, тогда этот компилятор ещё и в Дельфи сунуть удастся?
>
это еще как? Delphi понимает только свой собственный dcu, на худой конец obj, но тогда его отладчик бесполезен. Есть множество отладчиков. И потом, зачем это, отлаживать можно и под Delphi, а потом просто перекомпилировать своим компилятором, в том числе для linux.
← →
SPeller © (2003-06-01 04:12) [9]
> Delphi понимает только свой собственный dcu
Заставить наш компилятор делать Дельфийские dcu-шки :)
← →
Кладов (2003-06-01 06:07) [10]нереально
← →
Кладов (2003-06-01 08:14) [11]Попробовал FPV 1.0.6 (до этого был 1.0.5). Вообще не компилирует:
Error: Signal Segmentation violation during compilation
Error: Long jumped out of compilation...
Вдруг перестал компилировать директиву Absolute, только с ее помощью мне в прошлой версии удалось обойти непонятки приведения типа TMethod( TProcOfObj ). В этот раз только ассемблерная вставка помогла. Но компиляция все равно оказалась невозможна, в прошлый раз хоть что-то компилировалось.
Я все больше склоняюсь к тому, чтобы сделать свой компилятор, и не зависеть более от произвола сторонних компилятор-делателей. И не выкачивать по 18 мегабайт дистрибутивов этих компиляторов. Кстати, если уж они поставляются в виде исходников (FPC), то обновления могли бы использовать для бедных скачивателей, у которых такой объем скачки - это подвиг и событие недельной важности.
← →
Кладов (2003-06-01 13:15) [12]
> Signal Segmentation
от этого я ушел, удалив промежуточные файлы, которые остались от предыдущей версии. Сейчас пытаюсь добавить очередную порцию кода в KOLFPC.PAS и сравнить размер экзешника - под FPC 1.0.6. Если получится, то имеет смысл добиться все-таки генерации KOLFPC.PAS, все-таки какой-то шаг в сторону многоплатформенности.
Кстати, после stripw экзешник сокращается до 45К. Уже легче (хотя вроде и так все опции в компиляторе таковы, чтобы не включать ничего лишнего). Возможно, разница в размере при добавлении кода в kolfpc.pas устраняется таким способом.
← →
Кладов (2003-06-01 14:43) [13]Код уменьшается только если директиву {$SMARTLINK ON} вставить в сам KOLFPC.PAS. И теперь exe-файл 26,5К (!), даже несмотря на то, что еще один класс добавился и куча функций и процедур. Я сейчас же обновлю архивчик GotoFPC (адрес в начале этой нитки), и на всякий случай KOL2FTP. Внимание: теперь для FPC 1.0.6, на более ранних не проверял.
← →
Кладов (2003-06-02 07:29) [14]Ну что, никто кроме Богуслава не пробовал посмотреть? Я на всякий случай положил на свой сайт архив с файлами для обеспечения совместимости с Delphi. Смотреть в разделе Инструменты (Tools), там и все остальные архивы для KOL2FPC.
← →
savva © (2003-06-02 10:51) [15]Владимир, а Вы бы представили публике тот модулбь который вы сделали - а то я например, никак не могу скопмилить тестовое приложение, ругается на строку
var Global_Synchronized: procedure( Sender: PObj; Param: Pointer ) = DummyObjProcParam;
словами
2100 / 68 kolfpc.pas
Fatal: Syntax error, ; expected but = found
но я думаю - что это не последнее чем он может возмутиться..
← →
savva © (2003-06-02 11:04) [16]и еще - Владимир, а сколько часов в сутки Вы спите (речь не идет о минутах :)) ?
← →
savva © (2003-06-02 11:53) [17]кое как скомпилировал, но... размер приложения 349 Кб :))) это не есть ГУД..
какие у вас опции компилятора?
← →
Gandalf © (2003-06-02 11:55) [18]Закачал все это добро - выздровлю посмотрю. Я вот еще по поводу классов, все же может перевести КОЛ на классы вместо объектов? Я вообщем-то потихоньку начал...
ЗЫ: FPC понимает и смарт-линкинг и много еще чего, только среда плохо настройки сейвит, надо их руками в код вдалбливать, чтобы точно работало.
← →
savva © (2003-06-02 12:05) [19]ну я даже не знаю... у меня под 2000 программа вида
{$DEFINE I386}
{$SMARTLINK ON}
{$APPTYPE GUI}
{$M-}
program Test1;
begin
end.
занимает около 52 Кб..
Владимир, как Вы получили свой результат?
← →
savva © (2003-06-02 12:10) [20]и при таком раскладе установка {$SMARTLINK OFF} дает проигрыша на 1Кб...(что в принципе логично - программа то пустая..) но сам размер...
← →
Gandalf © (2003-06-02 12:30) [21]
> и при таком раскладе установка {$SMARTLINK OFF} дает проигрыша
> на 1Кб...(что в принципе логично - программа то пустая..)
> но сам размер...
Отруби debuginfo и подобный мусор - на крайняк пройдись strip-ом он это все вырежет...
← →
savva © (2003-06-02 12:47) [22]да дело то совсем не в этом...
> Кладов (01.06.03 14:43)
> И теперь exe-файл 26,5К (!), ...
и это при том, что код программы, гораздо более содержателен, чем тот который я ранее приводил:
{$DEFINE I386}
{$SMARTLINK ON}
{$APPTYPE GUI}
{$M-}
program Test1;
uses KOLFPC;
procedure DoTest;
var L: PList;
begin
L := NewList;
L.Add( nil );
L.Free;
end;
begin
DoTest;
end.
кстати, этот код у меня под 2000 работает, а под 98 - нет (просит из WinMM.DLL mciGetDeviceIDFromElementIDA )... и размер у него начиная от 340К..
← →
Кладов (2003-06-02 13:27) [23]
> занимает около 52 Кб..
> Владимир, как Вы получили свой результат?
Сейчас 27Кб, после stripw test1.exe. Некоторое время назад было 26,5К, но видимо, уже какие-то типизированные константы добавились и секция статической линковки увеличилась (чтобы не заморачиваться, я если где вижу, что идет несоответствие с типами параметров API-функции по сравнению с дельфийским windows.pas, просто дублирую описание external функции в KOLFPC.PAS, секция потихоньку увеличивается). Но на самом деле, это мелочь, увеличение на 512 байтов произошло наверное просто потому, что при сборке размер каждой секции округляется до 512 байт. Видимо, так.
Я надеюсь, вы fp.exe пользуетесь? :) Не через командную же строку работать... Хоть какой IDE, но есть.
В принципе, 27К неплохой результат, надо просто верить, что у FPC несколько раздут system.pas, но весь дальнейший рост - целиком на совести библиотеки и самого программиста. Так что если программа размером 100К в Delphi будет 120К в FPC, это совсем мелочь. Главное, что FPC - это большой шанс на развитие в сторону многоплатформенности. И в версии 1.1 кажется есть поддержка object.
Я еше кажется сюда не постил: сейчас лежит обновление от сегодняшнего утра тех двух архивов, и еще я выложил содержимое директории pp\units\win32\Delphi, которой, кажется, нет в дистрибутиве FPC (а она нужна). Все смотреть в tools-Инструменты на основном сайте. Кстати, кому невтерпеж новую версию KOL, то в GotoFPC.zip обновление заодно формирует 1.74+, который уже светится как 1.75.
← →
savva © (2003-06-02 13:32) [24]у меня 340К при компиляции в fp.exe... и с сайта я Вашего уже качал сегодня...
← →
savva © (2003-06-02 13:35) [25]и 52 кб - это совершенно пустое приложение... повторяю просьбу - нет ли у вас возможности представить файл KOLFPC вашей (авторской :))) редакции ?
← →
Кладов (2003-06-02 13:51) [26]а спорим, он байт в байт будет такой же, как тот, что получается после KOL2FPC ? :)
опциями надо порулить, отладку выключить, смарт-линк включить, ну и т.д.
← →
savva © (2003-06-02 14:47) [27]> Кладов (02.06.03 13:51)
> а спорим, он байт в байт будет такой же, как тот, что получается после KOL2FPC ? :)
может быть:)) тогда может Вы опишите основные моменты, на которые следует уделить?:)) а то я что то прикинул сколько комбинаций может быть - у меня нету стока времени:))
и интересно, почему под 98 не работает код..
← →
savva © (2003-06-02 15:10) [28]прогрес:)) уменьшил я размер до 27 648 байт, но под 98 все также не пашет...
← →
savva © (2003-06-02 15:54) [29]кстати, я использую другую IDE http://www.bloodshed.net/devpascal.html - там хоть не досовое окошко...
← →
Boguslaw (2003-06-02 17:49) [30]52kB empty exe - something strange ? When I tested logn time ago with FPC 1.1 empty project EXE should have no more then 13-16 kb !
← →
Кладов (2003-06-02 20:23) [31]Размер может колебаться в зависимости от версии FPC, опций компиляции и сборки, и еще надо применять stripw, чтобы окончательно убрать отладочную информацию, потому что даже если в опциях указано не добавлять, что-то всегда добавляется. Это не суть важно, главное, что появляется возможность компилировать не только в Delphi.
> я использую другую IDE
Что же они пугают, что 8М качать? Оказалось, только 1,1М :)
← →
Кладов (2003-06-02 21:59) [32]Сейчас Test1.exe висит. Пробуйте :
{$DEFINE I386}
{$SMARTLINK ON}
{$APPTYPE GUI}
{$M-}
program Test1;
uses Windows, KOLFPC;
procedure DoTest;
var L: PList;
begin
MsgBox( "Hello, FPC world!", MB_OK or MB_APPLMODAL or MB_SETFOREGROUND );
{L := NewList;
L.Add( nil );
L.Free;}
end;
begin
DoTest;
end.
Насчет того mci... Просто поправьте в mmsystem в pp\...\Delphi - уберите на него ссылки (2 раза по 3 строки). Работает хелло и под 98.
← →
savva © (2003-06-03 10:18) [33]> Кладов (02.06.03 20:23)
> Что же они пугают, что 8М качать? Оказалось, только 1,1М :)
Ну про 8М там сказано если качать всю IDE+FPC..
← →
Кладов (2003-06-03 11:20) [34]Все равно, собственный IDE от FPC хоть и в текстовом режиме, удобнее, если в нем отлаживаться. Это не какой-нибудь GDB, а нормальный борландовского стиля отладчик, из такого когда-то и Delphi вырос. По крайней мере, F8, F7, F4 понимает.
После компиляции с отладочной информацией - без комментирования кода с созданием экземпляра TList - не зависает, отрабатывает нормально (размер 343К-1,5М от опций). После применения stripw к этому экзешнику (26К) тоже работает нормально. При компиляции сразу без отладочной информации (Options|Mode: Normal, размер 27К сразу после сборки) - висит. StripW к такому экзешнику уже не меняет размер, и так же висит.
Попробовал разные режимы, пока нормально получается при таких сочетаниях режимов (по текстовому IDE, пока не смотрел, как это будет на языке ключиков):
Options|Mode: Debug
Options|Linker: (*) Link to smart libraries, прочее выкл.
Options|Debugger: [ ] Strip all debug information generation, т.е. выкл., остальное все равно какое;
ну и для компилятора:
Options|Compiler|Syntax: [X] Delphi 2 extensions on
[X] Allow label and goto (по умолчанию)
[X] Delphi compatibility, прочее выкл. как по умолчанию
Options|Compiler|Code generation:
Run-time check - по усмотрению, у меня все выкл.,
Target Processor - по усмотрению, у меня 386/486,
Optimization - по усмотрению, у меня (*) Generate smaller code, остальное выкл.
Options|Compiler|Assembler: (*) Intel style assembler;
(*) Use pecoff, остальное выкл.
Короче, компилировать с отладочной информацией, потом делать stripw. Возможно, баг FPC.
----------------------------------
Надеюсь сегодня к ночи перегнать TControl, все остальное уже практически компилится с FPC.
← →
savva © (2003-06-03 11:50) [35]> Кладов (03.06.03 11:20)
> Надеюсь сегодня к ночи перегнать TControl, все остальное
> уже практически компилится с FPC.
Будем ждать:)) спасибо за опции, попробую вечером ключики компилятора к этим опциям выснить.
PS. Я поражаюсь Вашей работоспособности:)
← →
PVOzerski © (2003-06-03 16:17) [36]А Вы еще не пробовали добавить {$ifdef FPC} {$mode Delphi} {$endif} в исходники KOL? Не исключаю, что совместимость улучшится.
← →
PVOzerski © (2003-06-03 16:44) [37]Кстати, откуда этот самый указанный в Readme KOL 1.75 or higher взять? На сайте только 1.73 предлагается...
← →
PVOzerski © (2003-06-03 17:11) [38]О {$mode Delphi}:
обратил внимание на Кладов (03.06.03 11:20):
>[X] Delphi 2 extensions on
...
>[X] Delphi compatibility, прочее выкл. как по умолчанию
Комедия в том, что на самом деле это две взаимоисключающие опции.
1-я эквивалентна {$mode objfpc}, 2-я - {$mode Delphi}. Хотя эти режимы компилятора и похожи, но не идентичны (подробнее - см. статью И. Шихалева на fpc.by.ru). И какой из них реально задействуется компилятором в этой ситуации - без экспериментов не разберешься.
← →
Кладов (2003-06-03 21:22) [39]TabControl перегнал, все компилируется, но проблема с ассемблером - совсем другие соглашения по передаче параметров. Некоторые функции у меня имеют только ассемблерную версию кода, срочно приходится изобретать для них паскаль-код.
← →
Кладов (2003-06-03 21:25) [40]
> на самом деле это две взаимоисключающие опции.
> 1-я эквивалентна {$mode objfpc}, 2-я - {$mode Delphi}.
зачем же тогда в опциях используются чек-боксы, трудно что ли было как-то их в радиогруппу вложенную засунуть.
Страницы: 1 2 3 вся ветка
Текущий архив: 2004.02.29;
Скачать: CL | DM;
Память: 0.58 MB
Время: 0.02 c