Как отключить RTL?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Как отключить RTL?

Сообщение R1DDLE » 14.12.2009 13:54:31

Всем доброго времени суток!

Подскажите пожалуйста, как в FreePascal отключить RTL? Хочу написать программу на чистом WinAPI безо всяких библиотек и получить на выходе exe'шник минимального размера (например 2Кб для GUI'шного HelloWorld).

P.S. Можно ли на FreePascal писать нечто вроде ядра ОС, т.е. на выходе получить бинарник типа COM в MS DOS, только для 32 или 64 бит? Как это делается?

За ранее СПАСИБО! :D

Добавлено спустя 13 минут 32 секунды:
Ну хоть ссылку дайте, где на русском почитать. Просто сам никак найти не могу.
R1DDLE
новенький
 
Сообщения: 26
Зарегистрирован: 08.12.2009 19:00:24

Re: Как отключить RTL?

Сообщение Max Rusov » 14.12.2009 14:11:54

System отключить нельзя, можно только написать свой - более оптимальный. А со стандартным - минимальный размер будет ~40K.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Как отключить RTL?

Сообщение R1DDLE » 14.12.2009 14:16:27

Спасибо за ответ!
Можно ли перегрузить (переопределить) функции стандартного system, чтобы использовались мои функции из исходника, а стандартный system не линковался? Можно ссылку где посмотреть или коротенький пример?

Добавлено спустя 21 минуту 37 секунд:
Блин, хоть свой pascal пиши...
R1DDLE
новенький
 
Сообщения: 26
Зарегистрирован: 08.12.2009 19:00:24

Re: Как отключить RTL?

Сообщение Max Rusov » 14.12.2009 14:53:27

Можно. Только если ты это будешь делать, надо бы очень хорошо понимать, что в стандартном System тебе нужно, а что нет. Ты это знаешь?
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Как отключить RTL?

Сообщение R1DDLE » 14.12.2009 15:11:43

Что есть в system не знаю, но знаю, что мне нужно писать как обычно я на ассемблере пишу безо всяких библиотек, только ассемблер и API. Только всё это на паскале. Так легко сделать на С, но там нет встроенных синтаксических средств ООП, на С++ тоже можно, но сложнее. Синтаксис паскаля и его строгая типизация мне ближе к сердцу, чем Сишные. Я хочу, чтобы у меня в исполняемом файле оказалось только то, что я написал, а не то, что мне может понадобиться.

P.S. Раньше кодил на паскале и на delphi 7. На Delphi 7 как-то легко получился exe'шник в 4Кб на чистом API, но давно это было. А вот с Free никак не разберусь до конца, не помешал бы пример типа MessagBox(...) и параметры которые нужно компилятору и линкеру задать, чтобы получить хотя бы 4Кб.
R1DDLE
новенький
 
Сообщения: 26
Зарегистрирован: 08.12.2009 19:00:24

Re: Как отключить RTL?

Сообщение Max Rusov » 14.12.2009 15:17:04

Да не получится, говорю же тебе. Нужен low-weight system. Есть ли такие в природе - не знаю.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Как отключить RTL?

Сообщение R1DDLE » 14.12.2009 15:19:20

Понятно. Ладно, очень помогли разъяснить ситуацию. Огромное Вам спасибо и на этом.

Добавлено спустя 2 минуты 39 секунд:
Тему можно закрывать. Всем ещё раз СПАСИБО!
R1DDLE
новенький
 
Сообщения: 26
Зарегистрирован: 08.12.2009 19:00:24

Re: Как отключить RTL?

Сообщение Max Rusov » 14.12.2009 15:29:04

Ну зачем закрывать. Мне тоже интересно, может кто нибудь поделится опытом оптимизации System.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Как отключить RTL?

Сообщение скалогрыз » 14.12.2009 15:32:29

отключается RTL так:

создаём свой модуль:
Код: Выделить всё
unit
  System;
interface

implementation

end.

модуль компилируется так:
Код: Выделить всё
fpc -Us system.pas


в дальнейшем, при компиляции нужно цеплять именно этот модуль, а не стандартный RTL-a.

Без возможности использования своего RTL, fpc не удалось бы использовать на embedded системах или писать на нём дровишки
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Как отключить RTL?

Сообщение SII » 14.12.2009 15:50:01

А пробовал ли кто повлиять на стартовый код программы (ведь реальное исполнение начинается не с begin головного паскалевского файла), а также на код, генерящийся для обработки исключений и тому подобные вещи? Или для этого нужно модифицировать сам компилятор?
SII
новенький
 
Сообщения: 64
Зарегистрирован: 24.06.2007 17:15:09
Откуда: Зеленоград

Re: Как отключить RTL?

Сообщение Max Rusov » 14.12.2009 16:00:50

То, что можно написать свой RTL, никто не сомневается. Но очевидно, что если сделать пустой unit System - ничего работать не будет, все-таки какой-то функционал должен быть обязательно. Тут возможны 2 пути: "восходящий" - начать с пустого System и добавлять в него все что необходимо, и "нисходящий" - взять стандартный RTL и выкидывать из него все, что не нужно. Второй - более реалистичный. Из кандидатов на "выкидывание":
MemoryManager - можно заменить на упрощенный, (для win - через HeapAlloc/HeapFree)
Выкинуть WideStringManager/UnicodeStringManager/VariantManager - если не планируется ими пользоваться
Выкинуть ThreadManager - если не планируется многопоточность...
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Как отключить RTL?

Сообщение AbakAngelSoft » 14.12.2009 16:05:29

помимо system прийдется переписать и objpas для поддержки ООП в приложении к своему system. Когда-то эксперементировал.
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: Как отключить RTL?

Сообщение скалогрыз » 14.12.2009 17:47:41

Max Rusov писал(а):Тут возможны 2 пути: "восходящий" - начать с пустого System и добавлять в него все что необходимо, и "нисходящий" - взять стандартный RTL и выкидывать из него все, что не нужно.

Восходящий - полезнее :) Выкинуть RTL = написать свой RTL.

Ещё способ: для того чтобы "выкинуть RTL", нужно КАЖДЫЙ модуль программы компилировать с ключиком -Us и линковать ручками... (получается этакий язык Си с паскаль синтаксисом)
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Как отключить RTL?

Сообщение AbakAngelSoft » 14.12.2009 18:03:35

достаточно скомпилированные system и objpas положить рядом с проектом. IMHO
Аватара пользователя
AbakAngelSoft
постоялец
 
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар

Re: Как отключить RTL?

Сообщение R1DDLE » 14.12.2009 20:42:08

Max Rusov писал(а): (получается этакий язык Си с паскаль синтаксисом)

:D Самое интересное, что мне это и нужно. Низкий уровень Си, но с синтаксисом паскаля и ООП.

P.S. Простите за оффтоп, но случайно не подскажите, на микроконтроллерах соблюдается правило 1 байт = 8 бит?

Добавлено спустя 7 минут 27 секунд:
скалогрыз писал(а):отключается RTL так:

создаём свой модуль:
Код: Выделить всё
unit
  System;
interface

implementation

end.

модуль компилируется так:
Код: Выделить всё
fpc -Us system.pas


в дальнейшем, при компиляции нужно цеплять именно этот модуль, а не стандартный RTL-a.

Без возможности использования своего RTL, fpc не удалось бы использовать на embedded системах или писать на нём дровишки


Спасибо за подсказку! Я так и знал, что выход должен быть, пусть и корявый...

Сколько не искал, не нашёл ни одного ЯП с поддержкой ООП и без RTL. Более-менее легко отключается в C/C++, но Паскале-подобные языки для меня читабельнее. Может плохо искал? :shock:
R1DDLE
новенький
 
Сообщения: 26
Зарегистрирован: 08.12.2009 19:00:24

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru