Оберон-клуб «ВЄДАsoft» https://zx.oberon.org/forum/ |
|
Часть вторая. Два сапога пара. https://zx.oberon.org/forum/viewtopic.php?f=15&t=11 |
Страница 1 из 1 |
Автор: | S.Atan [ 02 апр 2012, 13:15 ] |
Заголовок сообщения: | Часть вторая. Два сапога пара. |
Часть вторая. Два сапога пара. Оглавление "Вова и Дима - два сапога пара" (Булочник) В прошлой части я немного описал компилятор Оберон. Но не описал его возможности. Этим мы займёмся в этот раз. Давайте внимательно взглянем на нашу директорию bin В ней мы видим три исполняемых файла и два текстовых. После непродолжительных (или философских затяжных) умозаключений приходим к выводу, что OP2.Errors и OPA.Data нам нужны для отображения ошибок и считывания каких то данных для работы компилятора. Файлы O2ETHCLC.exe и O2ETHCLL.exe в принципе это компилятор и линкёр (отличаются последней буквой) O2ETHCLC.exe - компилятор O2ETHCLL.exe - линкер Stub.exe - это DOS заголовок PE файла Windows который можно посмотреть в любом HEX редакторе. Возникает логичный вопрос, почему произошло разделение компилятора на компилятор и линкер? Давайте обратимся к истории и вспомним, что Оберон был разработан не только для системного программирования, но и для написания операционных систем. А тут без бинарных файлов без заголовков и секций не обойтись. Поэтому роль компилятора делать объектные файлы в чистом виде (формать внутренний обероновский), а линкера - собирать из этих файлов уже либо исполняемые файлы для конечной платформы, либо другое, например загрузчик. С компилятором мы вроде разобрались, давайте посмотрим на опциональный файл линкера. Это простой текстовый документ (обычно с расширением *.Link) Привожу примеры и расшифровки полей файла. PROGRAM - поле названия программы для линковки (конечный файл будет называться именно так. Цитата: PROGRAM Program1 После линковки в Windows мы получим файл Program1.exe LIBRARY - поле названия динамической библиотеки Цитата: LIBRARY MyDLL После линковки в Windows мы получим файл MyDLL.dll STUB - поле внешнего файла заголовка DOS, по умолчанию Stub.exe HEAPSIZE - размер кучи STACKSIZE - размер стека BASE - базовый адрес загрузки Спецефические поля которые опущены по умолчанию. Цитата: HEAPSIZE 010000H BASE 04000000H IMGVERSION - версия компилятора в имидже Цитата: IMGVERSION 2.5 Означает что минимальная версия линкера 2 максимальная 5. В PE файле поля MajorImageVersion и MinorImageVersion VERSION - создание ресурса в файле с данными о вас, компании и т.д. Цитата: VERSION CompanyName = "Institute for Computer Systems of ETH Z…rich - compiler & linker; E.V. Shcherbatyuk - wrapper", FileDescription = "ETH PlugIn Oberon Compiler & Linker", FileVersion = "Release 2.5", LegalCopyright = "(c) 2004 Team of the Institute for Computer Systems of ETH Z…rich", LegalTrademarks = '"Oberon" and "Gadgets" are trademarks of Eidgen„ssische Technische Hochschule, Z…rich (ETHZ)', OriginalFilename = "Program1.EXE" SUBSYSTEM - интерфейс выходного файла GUI - Оконный интерфейс CUI - Консольный NATIVE - внутренний формат Bluebottle системы (или вашей ОС допустим WinCE). Цитата: SUBSYSTEM CUI Означает что Program1.exe запустится в консольном режиме IMPORTS - поле импортируемых функций EXPORTS - поле экспортируемых функций Цитата: IMPORTS Kernel.bootHeapAdr = HeapAdr, Kernel.bootHeapSize = HeapSize, Kernel.hInstance = hInstance MODULES - поле подключаемых модулей Цитата: MODULES Kernel32, Kernel, Modules, Objects, Reals, Dates, Strings И на конец ресурсные поля ICONS CURSORS Которые определяют иконку приложения (обязательно одна в файле *.ico и не более 32 бит) и курсор Цитата: ICONS Icon = Oberon.ico CURSORS Cursor = Arrow.cur И на конец содержание примерного файла Код: "LINK" PROGRAM Project Ну вот пожалуй и все в этой части. В следущей части мы попытаемся скомпилировать минимальное приложение, посмотрим что из этого получится, и рассмотрим сборщик мусора компилятора! |
Автор: | Len [ 14 ноя 2013, 14:26 ] |
Заголовок сообщения: | Re: Часть вторая. Два сапога пара. |
Что за модули Kernel, Windows, SysUtils, Console, Module1? Опишите что какой делает и зачем они нужны. |
Автор: | Zorko [ 14 ноя 2013, 22:06 ] |
Заголовок сообщения: | Re: Часть вторая. Два сапога пара. |
Kernel — ядро Оберон-среды. Распределяет память, ловит трапы, обслуживает исполняемую программу. Windows — связь с ОС Windows (привязки к её внутреннему интерфейсу — WinApi). SysUtils — системные утилиты (назван, видимо, в честь одноимённого модуля в Delphi). Console — консольный вывод. Module1? — видимо, так Серж назвал основной модуль своей программы. Зачем примерно нужен модуль — можно понять по его интерфейсу. Жаль, что в составе OPCL нет инструмента для просмотра интерфейсов (в ETH Oberon вроде бы есть?). В BlackBox точно есть. Выделите двойным кликом имя модуля и нажмите Ctrl+D. В XDev то же самое, только вместо Ctrl+D выбираем из меню XDev -> Show Definition. |
Автор: | Len [ 15 ноя 2013, 13:05 ] |
Заголовок сообщения: | Re: Часть вторая. Два сапога пара. |
Zorko писал(а): Kernel — ядро Оберон-среды. Распределяет память, ловит трапы, обслуживает исполняемую программу. Без этого модуля, я так понимаю, вообще ничего работать не будет т.е. его нужно всегда подключать. Если так, то почему его надо каждый раз указывать явно, почему он не подключён по умолчанию? |
Автор: | Zorko [ 15 ноя 2013, 19:44 ] |
Заголовок сообщения: | Re: Часть вторая. Два сапога пара. |
Len писал(а): Zorko писал(а): Kernel — ядро Оберон-среды. Распределяет память, ловит трапы, обслуживает исполняемую программу. Без этого модуля, я так понимаю, вообще ничего работать не будет т.е. его нужно всегда подключать. Код: "OBERON"
|
Автор: | Len [ 17 ноя 2013, 12:37 ] |
Заголовок сообщения: | Re: Часть вторая. Два сапога пара. |
S.Atan писал(а): Какая-такая куча? И почему S.Atan сдесь и в дальнейшем берёт её размер 100000H? |
Автор: | Zorko [ 17 ноя 2013, 17:12 ] |
Заголовок сообщения: | Re: Часть вторая. Два сапога пара. |
Куча (heap) или пул — динамическая память, в которой программа хранит нужные для своей работы данные, например, локальные переменные. Полагаю, S.Atan здесь и в дальнейшем просто скопировал её размер из .Link-файлов системы ETH Oberon PlugIn, хотя может он сам появится и уточнит. Len, мы конечно здесь стараемся отвечать на Ваши вопросы, но понятное дело, что я, например, не могу знать все тонкости реализации каждого модуля каждой из Оберон-систем. Так что если я не отвечаю на вопрос, значит просто нечего сказать по существу. Требуется самостоятельное исследование. |
Страница 1 из 1 | Часовой пояс: UTC + 2 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |