Оберон-клуб «ВЄДАsoft» https://zx.oberon.org/forum/ |
|
Часть третья. Быть или не быть? https://zx.oberon.org/forum/viewtopic.php?f=15&t=12 |
Страница 1 из 1 |
Автор: | S.Atan [ 03 апр 2012, 02:41 ] |
Заголовок сообщения: | Часть третья. Быть или не быть? |
Часть третья. Быть или не быть? Оглавление 'Быть или не быть?' - сказал он как то не уверенно. В первой и второй части я подробно описал компилятор и линкёр Оберона, пришло время активных действий. Давайте попробуем сделать пустое приложение скомпилировать и слинковать его. Создаем в нашей корневой папке пару пустых файлов Program1.mod и Program1.Link что бы получилось нечто похожее открываем Program1.mod и вбиваем код Код: "OBERON"
Это пустое приложение которое мы скомпилируем изменив и запустив файл CompileAndLink.bat Код: "LINK" Bin\O2ETHCLC.EXE Program1.mod Ну что компилируем запускаем и видим примерно следующее то есть компиляция прошла нормально, и у нас появился файлик Program1.Obj Это объектный файл для Оберон компилятора (не надо путать с Windows coff или ofm файлами) который мы сейчас и попытаемся слинковать. Так как не импортируемых модулей не экспорта у нас нет, то в Program1.Link вбиваем код с единственным модулем Program1 Код: "LINK" PROGRAM Project и сохраняем файл. Открываем наш системный сценарий CompileAndLink.bat и меняем код на следующий Код: "BAT" Bin\O2ETHCLL.EXE Program1.Link Пробуем слинковать всё наше хозяйство! И............................ У кого не появилось данной картинки, тот видимо что то в этой жизни сделал правильно, но в коде ошибся. Жесткий облом в виде нецензурного выражения операционной системы.!!! Ну что же, на этом бы можно было и закончить если бы не одно но! Вспомним что же такое Оберон компилятор. Оберон компилятор - это компилятор, в котором всё венесено в модули (даже RTL и сборщик мусора), а раз так, то естесственно без RTL с грехом пополам (хотя почему?) он работать должен, а вот без сборщика нет!!! И где же брать такое чудо, как сборщик мусора? Так в исходниках компилятора тут Оберон 2 и называется он Kernel.mod. Не буду вас мучить кучей файлов которые нужны для его работы, просто приаттачу сюда файлик скомпилированый, который не требует для себя дополнительных файлов вроде Kernel32.mod. Вложение: Теперь для корректной работы папочка наша выглядит вот так И нам осталось прописать опции линкёра (ведь сборщик мусора импортирует же какие то функции) и компилятора в нашем Link и BAT файле а так же (для надёжности, потом мы всё это пропишем в другом файле) написать код запуска сборшщика в пустом приложении Код: "OBERON"
ВНИМАНИЕ!!! ЭТОТ Link ФАЙЛ ВКЛЮЧАЕТ В СЕБЯ RTL СБОРЩИКА, ПОЭТОМУ ПОСЛЕДУЮЩИЕ ПРОЕКТЫ БУДУТ ТОЛЬКО ДОПОЛНЯТСЯ, БЕЗ ПОЛЕЙ ИМПОРТА НИ ОДНО ПРИЛОЖЕНИЕ НЕ БУДЕТ РАБОТАТЬ КОРРЕКТНО! Код: "LINK" PROGRAM Project Код: "BAT" Bin\O2ETHCLC.EXE Program1.mod Запускаем CompileAndLink.bat и о чудо!!! Все скомпилировалось и слинковалось без вопросов и в папке появился файлик Project.EXE именно такой, каким мы его и обозвали в Program1.Link файле в поле PROGRAM При запуске он естественно ничего не покажет, может просто моргнёт на секунду консольное окно Windows, и завершится, и что самое главное, не останется висеть в диспетчере задач освободив память! Ну на сегодня пожалуй всё, а в следующей части мы напишим свою консоль с вводом/выводом строк, чисел и т.д. Вложение:
|
Автор: | Len [ 16 ноя 2013, 13:35 ] |
Заголовок сообщения: | Re: Часть третья. Быть или не быть? |
S.Atan писал(а): Код: "OBERON"
Поясните код запуска сборщика мусора, с комментариями, пожалуйста. Что делает команда INC и что значит # NIL? |
Автор: | Last_Alien [ 16 ноя 2013, 22:20 ] |
Заголовок сообщения: | Re: Часть третья. Быть или не быть? |
Len писал(а): S.Atan писал(а): Код: "OBERON"
Поясните код запуска сборщика мусора, с комментариями, пожалуйста. Что делает команда INC и что значит # NIL? # - не равно (!= в Си или <> в Паскале) NIL - пустой (null) указатель INC - инкремент величины (a:=a+1 или в Си a++) |
Автор: | Len [ 17 ноя 2013, 13:00 ] |
Заголовок сообщения: | Re: Часть третья. Быть или не быть? |
S.Atan писал(а): Код: "LINK" PROGRAM Project Откуда взялся модуль KERNEL32, если его нигде явно не импортируют? S.Atan писал(а): Код: "OBERON"
Что значат переменные Kernel.call и Kernel.ExitProc? Что делают функции Kernel.Init и Kernel.Shutdown? Почему функция Kernel.Init вызывается без аргумента? Почему аргумент функции Kernel.Shutdown 0? |
Автор: | S.Atan [ 03 дек 2013, 20:26 ] |
Заголовок сообщения: | Re: Часть третья. Быть или не быть? |
Last_Alien писал(а): Откуда взялся модуль KERNEL32, если его нигде явно не импортируют? KERNEL32 это не модуль , это библиотека Windows "kernel32.dll" Kernel.DeleteCriticalSection = KERNEL32.DeleteCriticalSection Означает, что функция DeleteCriticalSection в модуле Kernel.Mod импортируемая из динамической библиотеки kernel32.dll c таким же названием. При линковке, для удобства можно написать (на пример модуль Test.Mod) Test.MessageBox = USER32.MessageBoxA - для ANSI строк Test.MessageBox = USER32.MessageBoxW - для UTF строк если вы используете, допустим API функцию Windows MessageBox. Last_Alien писал(а): Что значат переменные Kernel.call и Kernel.ExitProc? Что делают функции Kernel.Init и Kernel.Shutdown? Почему функция Kernel.Init вызывается без аргумента? Почему аргумент функции Kernel.Shutdown 0? Эти функции описаны в модуле Kernel.Mod Смысл тут в подсчете запускаемого модуля Kernel (ведь он может импортироваться многими другими модулями, а так как он включает в себя сборщик мусора, то достаточно одного экземпляра его в приложении.) Так же и ExitProcess достаточен в одном экземпляре... |
Автор: | igor [ 04 дек 2013, 06:56 ] |
Заголовок сообщения: | Re: Часть третья. Быть или не быть? |
Len писал(а): Откуда взялся модуль KERNEL32, если его нигде явно не импортируют? Очень резонный вопрос. Ибо, это шаманство.S.Atan писал(а): KERNEL32 это не модуль , это библиотека Windows "kernel32.dll" Это всё понятно, но где об этом сказано в языке? На этот вопрос можно не отвечать, но есть повод задуматься.
... |
Автор: | S.Atan [ 04 дек 2013, 07:04 ] |
Заголовок сообщения: | Re: Часть третья. Быть или не быть? |
S.Atan писал(а): Это всё понятно, но где об этом сказано в языке? А причем здесь язык? Это скрипт линкёра для связки и компоновки скомпилированых модулей. |
Автор: | igor [ 04 дек 2013, 08:09 ] |
Заголовок сообщения: | Re: Часть третья. Быть или не быть? |
S.Atan писал(а): А причем здесь язык? Это скрипт линкёра для связки и компоновки скомпилированых модулей. А, тогда беру свои слова обратно. Невнимательно взглянул на код.
|
Страница 1 из 1 | Часовой пояс: UTC + 2 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |