Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 28 мар 2024, 12:08

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Часть вторая. Два сапога пара.
СообщениеДобавлено: 02 апр 2012, 13:15 
Не в сети
Администратор
Аватара пользователя

Сообщения: 189
Часть вторая. Два сапога пара.
Оглавление
"Вова и Дима - два сапога пара" (Булочник)

В прошлой части я немного описал компилятор
Оберон. Но не описал его возможности. Этим мы займёмся в этот раз.

Давайте внимательно взглянем на нашу директорию 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"


Ну вот пожалуй и все в этой части.
В следущей части мы попытаемся скомпилировать минимальное приложение, посмотрим что из этого получится,
и рассмотрим сборщик мусора компилятора!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Часть вторая. Два сапога пара.
СообщениеДобавлено: 14 ноя 2013, 14:26 
Не в сети

Сообщения: 116
Откуда: Каменск-Уральский
Что за модули Kernel, Windows, SysUtils, Console, Module1? Опишите что какой делает и зачем они нужны.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Часть вторая. Два сапога пара.
СообщениеДобавлено: 14 ноя 2013, 22:06 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Kernel — ядро Оберон-среды. Распределяет память, ловит трапы, обслуживает исполняемую программу.
Windows — связь с ОС Windows (привязки к её внутреннему интерфейсу — WinApi).
SysUtils — системные утилиты (назван, видимо, в честь одноимённого модуля в Delphi).
Console — консольный вывод.
Module1? — видимо, так Серж назвал основной модуль своей программы.

Зачем примерно нужен модуль — можно понять по его интерфейсу. Жаль, что в составе OPCL нет инструмента для просмотра интерфейсов (в ETH Oberon вроде бы есть?).

В BlackBox точно есть. Выделите двойным кликом имя модуля и нажмите Ctrl+D.
В XDev то же самое, только вместо Ctrl+D выбираем из меню XDev -> Show Definition.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Часть вторая. Два сапога пара.
СообщениеДобавлено: 15 ноя 2013, 13:05 
Не в сети

Сообщения: 116
Откуда: Каменск-Уральский
Zorko писал(а):
Kernel — ядро Оберон-среды. Распределяет память, ловит трапы, обслуживает исполняемую программу.

Без этого модуля, я так понимаю, вообще ничего работать не будет т.е. его нужно всегда подключать. Если так, то почему его надо каждый раз указывать явно, почему он не подключён по умолчанию?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Часть вторая. Два сапога пара.
СообщениеДобавлено: 15 ноя 2013, 19:44 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Len писал(а):
Zorko писал(а):
Kernel — ядро Оберон-среды. Распределяет память, ловит трапы, обслуживает исполняемую программу.

Без этого модуля, я так понимаю, вообще ничего работать не будет т.е. его нужно всегда подключать.
Неа, модуль Kernel вовсе не является обязательным для подключения к любому модулю (как и псевдомодуль SYSTEM). Факт его подключения говорит о том, что вашему модулю нужны низкоуровневые средства ядра, и они используются им явно, а не через прослойки. В то же время, каждое Оберон-окружение нуждается в ядре. А ваш модуль может работать и без ядра (например, вкомпилен статически в EXE'шку). Пример:
Код: "OBERON"
  1. MODULE Add;
  2.  
  3. PROCEDURE Add* (a, b: INTEGER): INTEGER;
  4. BEGIN
  5. RETURN a + b
  6. END Add;
  7.  
  8. END Add. (* Ну и зачем мне ядро? *)


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Часть вторая. Два сапога пара.
СообщениеДобавлено: 17 ноя 2013, 12:37 
Не в сети

Сообщения: 116
Откуда: Каменск-Уральский
S.Atan писал(а):
HEAPSIZE - размер кучи
Код: "LINK"

Какая-такая куча? И почему S.Atan сдесь и в дальнейшем берёт её размер 100000H?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Часть вторая. Два сапога пара.
СообщениеДобавлено: 17 ноя 2013, 17:12 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Куча (heap) или пул — динамическая память, в которой программа хранит нужные для своей работы данные, например, локальные переменные. Полагаю, S.Atan здесь и в дальнейшем просто скопировал её размер из .Link-файлов системы ETH Oberon PlugIn, хотя может он сам появится и уточнит.

Len, мы конечно здесь стараемся отвечать на Ваши вопросы, но понятное дело, что я, например, не могу знать все тонкости реализации каждого модуля каждой из Оберон-систем. Так что если я не отвечаю на вопрос, значит просто нечего сказать по существу. :) Требуется самостоятельное исследование.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 2 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club