OberonCore https://forum.oberoncore.ru/ |
|
Подходы к переводу типов в интерф. мод-х внешних библ-к https://forum.oberoncore.ru/viewtopic.php?f=47&t=2934 |
Страница 1 из 1 |
Автор: | Роман М. [ Вторник, 26 Октябрь, 2010 10:39 ] |
Заголовок сообщения: | Подходы к переводу типов в интерф. мод-х внешних библ-к |
Код: TYPE (* Delphi types *) Cardinal = INTEGER; PChar* = POINTER [untagged] TO ARRAY [untagged] OF SHORTCHAR; Pointer* = INTEGER; Integer* = INTEGER; (*LongWord = DWORD; THandle = Cardinal;*) (* SDL_types.h types *) (* Basic data types *) Bool = Integer; (* SDL_FALSE, SDL_TRUE *) PSInt8 = ^SInt8; SInt8 = Shortint; В интерфейсных модулях сторонних библиотек (большей частью, написанных на C) я считаю верных подходом отделять определение базовых типов в специальные модули. Такие модули, как правило, аппаратно- и компиляторо-зависимы. Вместо такого описания (как в примере кода) я бы создал отдельный модуль, в котором определил такие типы, как UInt8, Pointer, Integer, Cardinal, PChar и прочие. Затем импортировал бы их в интерфейсном модуле. Так мы добиваемся универсальности при переносе на другие платформы и компиляторы, даже в пределах совместимости между различными компиляторами Оберонов. |
Автор: | Илья Ермаков [ Вторник, 26 Октябрь, 2010 11:17 ] |
Заголовок сообщения: | Re: Давайте адаптируем для ББ/XDS библиотеки SDL, SQLite и Z |
Резонно. |
Автор: | Info21 [ Вторник, 26 Октябрь, 2010 11:52 ] |
Заголовок сообщения: | Re: Давайте адаптируем для ББ/XDS библиотеки SDL, SQLite и Z |
Роман М. писал(а): Вместо этого ... Пож., уточните формулировку (чего этого?) или измените.
|
Автор: | Роман М. [ Вторник, 26 Октябрь, 2010 12:31 ] |
Заголовок сообщения: | Re: Давайте адаптируем для ББ/XDS библиотеки SDL, SQLite и Z |
Уточнил. Ещё добавлю. На мой взгляд, при подготовке интерфейсных модулей очень ощущается нехватка соглашений о том как следует описывать типы из сторонних библиотек. Не помешал бы модуль для описания базовых типов, такой как: Код: DEFINITION LibsTypesC (* nonportable (i386) *); TYPE String = POINTER TO ARRAY [untagged] OF SHORTCHAR; BOOL = INTEGER; DWORD = UInt32; SInt32 = INTEGER; UInt32 = INTEGER; UInt8 = BYTE; END LibsTypesC. Причём, полезно создать для разных компиляторов. Более того, возможно, даже указывать рядом с каждым базовым типом сколько бит он занимает и ссылку на документ, в котором эти соглашения указаны. А то, в будущем, неизвестно как придётся видоизменять программы, чтобы они соответстовали новым нормам типов. |
Автор: | Евгений Темиргалеев [ Вторник, 26 Октябрь, 2010 12:37 ] |
Заголовок сообщения: | Re: Давайте адаптируем для ББ/XDS библиотеки SDL, SQLite и Z |
Роман М. писал(а): В интерфейсных модулях сторонних библиотек (большей частью, написанных на C) я считаю верных подходом отделять определение базовых типов в специальные модули. Такие модули, как правило, аппаратно- и компиляторо-зависимы. 1) Для ББ (про прочие компилеры не знаю) введением особого модуля для типов Вы не избавитесь от SYSTEM, т.к. его сразу тянет MODULE Aaa ["os-lib.file"].Вместо этого я бы создал отдельный модуль, в котором определил бы такие типы, как UInt8, Pointer, Integer, Cardinal, PChar и прочие. Затем я бы импортировал их в интерфейсном модуле. Так мы добиваемся универсальности при переносе на другие платформы и компиляторы, даже в пределах совместимости между различными компиляторами Оберонов. 2) На базе опыта и ощущений: не стал бы я гоняться за универсальностью реализации в интерфейсных модулях (поминая макросы, воркэраунды и проч.). Основная цель, по-моему, сделать интерфейс как можно ближе к [задокументированному] оригинальному. А из-за разницы в языках (напр. Си-Оберон) это не всегда делается одинаково. Например, unsigned int можно как INTEGER перевести, а можно как SET... 3) я придерживаюсь такой схемы: в документации пишу соответствие типов Думаю, лучше говорить о единообразности процесса переноса, когда будет использоваться не особый модуль, а общие соглашения (именование, выбор правильного типа) по переводу типов, записанные (и обновляемые) в общедоступном месте. Особые ситуации, по-моему, бывают довольно часто. Если есть общие соглашения --- в случае исключения им можно не следовать. Если есть набор модулей, претендующий на универсальность, придётся часто и сильно ломать голову над тем, как эту универсальность (отсутсвтвие особых ситуаций) обеспечить. |
Автор: | Роман М. [ Вторник, 26 Октябрь, 2010 13:09 ] |
Заголовок сообщения: | Re: Давайте адаптируем для ББ/XDS библиотеки SDL, SQLite и Z |
Евгений Темиргалеев писал(а): Роман М. писал(а): В интерфейсных модулях сторонних библиотек (большей частью, написанных на C) я считаю верных подходом отделять определение базовых типов в специальные модули. Такие модули, как правило, аппаратно- и компиляторо-зависимы. 1) Для ББ (про прочие компилеры не знаю) введением особого модуля для типов Вы не избавитесь от SYSTEM, т.к. его сразу тянет MODULE Aaa ["os-lib.file"].Вместо этого я бы создал отдельный модуль, в котором определил бы такие типы, как UInt8, Pointer, Integer, Cardinal, PChar и прочие. Затем я бы импортировал их в интерфейсном модуле. Так мы добиваемся универсальности при переносе на другие платформы и компиляторы, даже в пределах совместимости между различными компиляторами Оберонов. 2) На базе опыта и ощущений: не стал бы я гоняться за универсальностью реализации в интерфейсных модулях (поминая макросы, воркэраунды и проч.). Основная цель, по-моему, сделать интерфейс как можно ближе к [задокументированному] оригинальному. А из-за разницы в языках (напр. Си-Оберон) это не всегда делается одинаково. Например, unsigned int можно как INTEGER перевести, а можно как SET... 3) я придерживаюсь такой схемы: в документации пишу соответствие типов Думаю, лучше говорить о единообразности процесса переноса, когда будет использоваться не особый модуль, а общие соглашения (именование, выбор правильного типа) по переводу типов, записанные (и обновляемые) в общедоступном месте. Особые ситуации, по-моему, бывают довольно часто. Если есть общие соглашения --- в случае исключения им можно не следовать. Если есть набор модулей, претендующий на универсальность, придётся часто и сильно ломать голову над тем, как эту универсальность (отсутсвтвие особых ситуаций) обеспечить. 1. Желательно минимизировать присутствие модуля SYSTEM где бы то ни было. 2. Никаких отличий я не предлагаю. Лишь alias для базовых типов, определённых в отдельном модуле. Сегодня INTEGER занимает 32 бита, завтра - 128. Именно поэтому нужно иметь независимое от компилятора представление типа. Ведь не спроста во многих библиотеках определяются типы UInt32, gchar и тому подобные. Они позволят избежать перелопачивания кода при изменении среды, в которой будет работать ПО. |
Автор: | Евгений Темиргалеев [ Вторник, 26 Октябрь, 2010 13:59 ] |
Заголовок сообщения: | Re: Давайте адаптируем для ББ/XDS библиотеки SDL, SQLite и Z |
Роман М. писал(а): 1. Желательно минимизировать присутствие модуля SYSTEM где бы то ни было. 1. Присутствие в смысле "импорт" или "зависимость"? (для ББ) введение модуля с "alias для базовых типов" зависимость от SYSTEM не убирает. Вообще --- желательно, согласен.2. Никаких отличий я не предлагаю. Лишь alias для базовых типов, определённых в отдельном модуле. 2. Конкретный нюанс, с которым сталкивался на практике. Можете записать, как будет выглядеть решение с использованием модуля алиасов? OglGLUT docu писал(а): Соответствие между типами Компонентного Паскаля и типами GLUT
... - int и unsigned int используется тип INTEGER, если они представляют числа; - int и unsigned используется SET, если они представляют набор битов (например, см. GetModifiers и InitDisplayMode); |
Автор: | Евгений Темиргалеев [ Вторник, 26 Октябрь, 2010 14:00 ] |
Заголовок сообщения: | Re: Подходы к переводу типов в интерф. мод-х внешних библ-к |
Роман М. писал(а): Сегодня INTEGER занимает 32 бита, завтра - 128. Именно поэтому нужно иметь независимое от компилятора представление типа... Моё текущее мнение (навязывать не собираюсь): точный прогноз что и как будет "завтра", чтобы найти 100% решение сегодня --- дать не возможно. А тратить силы на полурешение не охота."Утро вечера мудренее": надо --- перепишем (если эта библиотека ещё будет существовать, если в ней ещё будет потребность, если .......) |
Автор: | Роман М. [ Вторник, 26 Октябрь, 2010 15:18 ] |
Заголовок сообщения: | Re: Давайте адаптируем для ББ/XDS библиотеки SDL, SQLite и Z |
Евгений Темиргалеев писал(а): Роман М. писал(а): 1. Желательно минимизировать присутствие модуля SYSTEM где бы то ни было. 1. Присутствие в смысле "импорт" или "зависимость"? (для ББ) введение модуля с "alias для базовых типов" зависимость от SYSTEM не убирает. Вообще --- желательно, согласен.2. Никаких отличий я не предлагаю. Лишь alias для базовых типов, определённых в отдельном модуле. 2. Конкретный нюанс, с которым сталкивался на практике. Можете записать, как будет выглядеть решение с использованием модуля алиасов? OglGLUT docu писал(а): Соответствие между типами Компонентного Паскаля и типами GLUT ... - int и unsigned int используется тип INTEGER, если они представляют числа; - int и unsigned используется SET, если они представляют набор битов (например, см. GetModifiers и InitDisplayMode); 1. Избегать присутствия при импорте, конечно. 2. Можно так: Код: MODULE LibsGLUTTypes; IMPORT SYSTEM; TYPE Address = POINTER TO RECORD [untagged] END; (* Address* = INTEGER; *) Enum* = INTEGER; Boolean* = SHORTCHAR; Bitfield* = SET; Int* = INTEGER; Sizei* = INTEGER; Ubyte* = SHORTCHAR; Byte* = BYTE; Short* = SHORTINT; Ushort* = SHORTINT; Uint* = INTEGER; Float* = SHORTREAL; Clampf* = SHORTREAL; Double* = REAL; Clampd* = REAL; PtrSTR* = POINTER TO ARRAY [untagged] OF SHORTCHAR; int* = INTEGER; END LibsGLUTTypes. Код: MODULE LibsGLUT ["glut32"];
IMPORT Types := LibsGLUTTypes; TYPE int* = Types.int; PtrSTR* = Types.PtrSTR; (* GLUT Initialization sub-API *) PROCEDURE Init* ['glutInit'] (VAR argc: int; VAR argv: PtrSTR); END LibsGLUT. |
Автор: | Info21 [ Вторник, 26 Октябрь, 2010 17:30 ] |
Заголовок сообщения: | Re: Давайте адаптируем для ББ/XDS библиотеки SDL, SQLite и Z |
Роман М. писал(а): Сегодня INTEGER занимает 32 бита, завтра - 128. В КП INTEGER зафиксирован в 32 бита. 128 -- это HUGEINT.
|
Автор: | Роман М. [ Среда, 27 Октябрь, 2010 10:16 ] |
Заголовок сообщения: | Re: Давайте адаптируем для ББ/XDS библиотеки SDL, SQLite и Z |
Info21 писал(а): Роман М. писал(а): Сегодня INTEGER занимает 32 бита, завтра - 128. В КП INTEGER зафиксирован в 32 бита. 128 -- это HUGEINT.Если завтра выйдет новая версия сообщения об языке КП с указанием размера нового размера INTEGER, то что делать с ПО, написанным под предыдущие версии? Возможен вариант, что ПО придётся адаптировать под новые версии компилятора. С другой стороны, тип INTEGER имеет различный размер среди разных версий компиляторов Оберонов. Как тогда можно гарантировать компиляцию программы? Чтобы не перелопачивать весь код, я могу лишь заменить alias базового типа в одном модуле, а затем скомпилировать проект заново. Разве так не выгоднее? |
Автор: | Valery Solovey [ Среда, 27 Октябрь, 2010 14:41 ] |
Заголовок сообщения: | Re: Подходы к переводу типов в интерф. мод-х внешних библ-к |
Смотря для чего. Если ПО уже было написано для 32, то значит, что оно сможет корректно работать и на машине с 128 (правда, возможно, медленнее при прочих равных). А если делается обновление программы для работы со 128 (допустим, эти 128 открывают новые возможности), то перелопачивание кода будет долгим. |
Автор: | Info21 [ Среда, 27 Октябрь, 2010 16:10 ] |
Заголовок сообщения: | Re: Давайте адаптируем для ББ/XDS библиотеки SDL, SQLite и Z |
Роман М. писал(а): Если завтра выйдет новая версия сообщения об языке КП с указанием размера нового размера INTEGER, то А с какого бодуна это может произойти? Этак от определения любого языка можно ожидать, что оно в любой момент поменяется так, что мама не горюй. Так и жить нельзя будет ![]() |
Автор: | id_ler [ Четверг, 28 Октябрь, 2010 16:11 ] |
Заголовок сообщения: | Re: Подходы к переводу типов в интерф. мод-х внешних библ-к |
Евгений Темиргалеев писал(а): Думаю, лучше говорить о единообразности процесса переноса, когда будет использоваться не особый модуль, а общие соглашения (именование, выбор правильного типа) по переводу типов, записанные (и обновляемые) в общедоступном месте. Соответствие между типами данных удобно собрать в одной таблице, как сделано, например, на http://www.zel.org/oberon/osci.htm
|
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |