General Category > Общий раздел

Интерфейс модуля как отдельная сущность

(1/7) > >>

kkkk:
Кто-то считает это необходимым, кто-то - ненужным. Меня интересует техническая сторона, точней одна её деталь. Как эффективно совместить локальные записи и закрытые элементы. В идеале интерфейс не должен содержать информации о скрытых элементах записи, пусть и помеченных как скрытые. Это легко достигается в интерфейсе уведомительного характера, но составляет проблему в интерфейсе для компилятора, так так тогда полный размер записи становится неизвестным, что является препятствием для размещения на стеке.

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

valexey_u:
Немного не по теме, но отвечу за себя - меня вообще не волнует как там компилятор что будет компилировать. Если ему нужно - пусть смотрит не в спецификацию модуля, а прямо в реализацию и черпает горстями оттуда инфу.

От компилятора мне нужно, чтобы он гарантировал соответствие и непротиворечивость спецификации и реализации модуля.

Отделение спецификации от реализации она для человека в первую очередь, а не для машины. Чтобы можно было разбираться в структуре программы, в том где что доступно и кто что предоставляет, без IDE вообще, просто по текстовым статичным файликам, причем даже без возможности grep'a.

Geniepro:

--- Цитата: valexey_u от Ноябрь 12, 2016, 09:43:22 pm ---Немного не по теме, но отвечу за себя - меня вообще не волнует как там компилятор что будет компилировать. Если ему нужно - пусть смотрит не в спецификацию модуля, а прямо в реализацию и черпает горстями оттуда инфу.
--- Конец цитаты ---
В общем случае компилятор может просто не иметь доступа к реализации модуля -- этот модуль ведь может дан его пользователю уже после того как его программа будет написана.
Вопросами определения размеров структур данных должен заниматься линкер-кодогенератор.

valexey_u:

--- Цитата: Geniepro от Ноябрь 12, 2016, 10:00:26 pm ---
--- Цитата: valexey_u от Ноябрь 12, 2016, 09:43:22 pm ---Немного не по теме, но отвечу за себя - меня вообще не волнует как там компилятор что будет компилировать. Если ему нужно - пусть смотрит не в спецификацию модуля, а прямо в реализацию и черпает горстями оттуда инфу.
--- Конец цитаты ---
В общем случае компилятор может просто не иметь доступа к реализации модуля -- этот модуль ведь может дан его пользователю уже после того как его программа будет написана.
Вопросами определения размеров структур данных должен заниматься линкер-кодогенератор.

--- Конец цитаты ---

Попрошу не путать разделение на модули для того чтобы поделить программу на логические части и тем самым упростить программисту жизнь (чтобы ему было проще ориентироваться в коде) и разделение на "модули" которые являются единицей компоновки (динамической ли, статической ли). Это РАЗНЫЕ модули, они могут быть (и, вероятно, должны) реализованы по разному в любом ЯП, который не является игрушечным.

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

А ещё в ЯП бывает штука под названием "единица компиляции" - это может быть вообще третьей сущностью.

Во втором случае (про модуль как единицу компоновки) удобней вшить спецификацию модуля в сам получившийся бинарь (в бинарном же виде спецификацию). Но этот случай меня не волнует. Я говорю про удобство программиста в первую очередь. Средство организации исходников.

kkkk:
Вот эта разница в модулях может быть реализована инструментами без изменения языка. Если же речь именно об удобстве пользователя, то тоже нет никаких технических проблем - это именно интерфейс уведомительного характера, и мелькающие то здесь, то там DEFINITION говорят о том, что, по крайней мере, для некоторых реализаций Оберона она воплощена, хотя, может, и не полностью.

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии