Инструменты пользователя

Инструменты сайта


oberon:generics

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
oberon:generics [2024/07/07 01:39]
comdiv
oberon:generics [2024/07/15 15:48] (текущий)
comdiv
Строка 1: Строка 1:
 ====== Обобщённые модули в стандартном Oberon ====== ====== Обобщённые модули в стандартном Oberon ======
  
-Обобщённые модули (дженерики) позволяют повысить переиспользуемость кода за счёт статической параметризации модулей по константам, процедурам и типам, не связанным генетическими связями (расширение записей).+Обобщённые модули (дженерики) — модулипараметризированные по константам, процедурам и типам без требования к генетичекой связи через расширение записей. Такое обобщение кода позволяет повысить либо его переиспользуемость, либо эффективность вместе со статическими гарантиями.
  
-Сам по себе язык не предусматривает специальной поддержки этого механизмано он может использоваться как принцип за счёт самой модульности.+Существуют диалекты Oberon с явной поддержкой параметризуемых модулей, но сам по себе исходный язык не предусматривает явных конструкций параметризации. Но что интересно, даже без явной поддержки обобщённые модули  всё равно могут использоваться как принцип за счёт самой модульности, требуя лишь расширенного понимания того, что стоит за IMPORT. Подход настолько прост, что может использоваться даже без инструментальной поддержки, хотя и не исключает её. Если при явном введении дженериков в Oberon используют обобщение понятия модуля, то здесь, наоборот, обобщённые модули рассматриваются как частный случай использования обычных модулей
  
 Здесь представлен схематичный пример. Дополнительные детали воплощения для достижения нужных качеств представить несложно. Здесь представлен схематичный пример. Дополнительные детали воплощения для достижения нужных качеств представить несложно.
  
-«Параметризированный» модуль может ничем не отличаться от обычного модуля, так как все необходимые объявления он берёт из импортированного модуля, который и служит параметром:+==== Параметризация модуля ==== 
 +«Параметризированный» модуль может ничем не отличаться от обычного модуля, так как все необходимые объявления он берёт из импортированного модуля, который и служит ему параметром:
  
   MODULE List; IMPORT Param;   MODULE List; IMPORT Param;
Строка 36: Строка 37:
   END List.   END List.
  
-Следующий исходный(формальный) параметр-модуль не только служит болванкой для фактических параметров-модулей, но также позволяет напрямую использовать исходный список как динамически типизированный, что тоже может иметь смысл:+==== Формальный и фактический параметры-модули ==== 
 + 
 +Следующий исходный(формальный) параметр-модуль не только служит заготовкой для фактических параметров-модулей, но также позволяет напрямую использовать исходный список как динамически типизированный, что тоже имеет смысл:
  
   MODULE Param; IMPORT V;   MODULE Param; IMPORT V;
Строка 50: Строка 53:
 При должном обобщённом подходе модули-параметры могут использоваться вместе с разными параметризированными модулями. При должном обобщённом подходе модули-параметры могут использоваться вместе с разными параметризированными модулями.
  
 +
 +==== Специализация параметризированного модуля ====
 Псевдо-код для специализации модуля где-то в сборочной системе: Псевдо-код для специализации модуля где-то в сборочной системе:
  
Строка 64: Строка 69:
   Modules.Spec("ListRec := List(Param := ParamRec)")   Modules.Spec("ListRec := List(Param := ParamRec)")
    
-Использование специализированного модуля:+==== Использование специализированного модуля ====
  
   MODULE UseList;   MODULE UseList;
Строка 87: Строка 92:
   END UseList.   END UseList.
  
 +==== Ссылки ====
 Весь код в [[https://vostok.oberon.org/sandbox.html?view=36fnga6vx46g-ListGeneric|песочнице]]. Весь код в [[https://vostok.oberon.org/sandbox.html?view=36fnga6vx46g-ListGeneric|песочнице]].
  
 [[https://vostok-space.blogspot.com/2023/11/primitive-generic.html|Источник]] [[https://vostok-space.blogspot.com/2023/11/primitive-generic.html|Источник]]
oberon/generics.1720305549.txt.gz · Последнее изменение: 2024/07/07 01:39 — comdiv