ICL VME - ICL VME - Wikipedia

Среда виртуальной машины
РазработчикInternational Computers Limited, Fujitsu
Написано вS3, C
Рабочее состояниеСнято с производства
изначальный выпусксередина 1970-х
ПлатформыICL 2900 серии, ICL серии 39 мэйнфреймы
Официальный веб-сайтСайт VME

VME (Среда виртуальной машины) это мэйнфрейм Операционная система разработан Великобритания Компания International Computers Limited (ICL, теперь часть Fujitsu группа). Первоначально разработан в 1970-х годах (как VME / B, потом VME 2900) для управления ICL тогда новыми 2900 серии мэйнфреймы, операционная система теперь известна как OpenVME включение Unix подсистема и работает на ICL серии 39 и Триметра[1] мэйнфреймы, а также стандартные x64 серверы.[2]

Происхождение

Программа развития Новый диапазон система началась после слияния Международные компьютеры и табуляторы (ИКТ) и Английские электрические компьютеры в 1968 году. Одним из фундаментальных решений было то, что он будет включать новую операционную систему. В ICL был проведен ряд различных технико-экономических обоснований и проектных исследований, из которых наиболее заметны три:

  • VME / B (первоначально System B), предназначенная для крупных процессоров, таких как 2970/2980, и разработанная в Kidsgrove, Стаффордшир и West Gorton, Манчестер
  • VME / K (первоначально System T), предназначенная для систем среднего уровня, таких как 2960, и разработанная в Bracknell после того, как первоначальная конструкция этих небольших процессоров, System D, была снята. VME / K был разработан и представлен на рынке, но в конечном итоге был заменен на VME / B
  • VME / T, который на самом деле так и не был запущен, но заслуживает упоминания, поскольку был задуман для поддержки «отказоустойчивости» и предшествовал усилиям успешной американской стартап-компании. Тандемные компьютеры в этой области.

Главный архитектор VME / B был Брайан Варбойз, который впоследствии стал профессором программной инженерии в Манчестерский университет. В его дизайне прослеживается ряд влияний, например Мультики и ранее ICL Георгий 3 Операционная система; однако он был разработан с нуля.

Сравнения

VME рассматривалась как в первую очередь конкурирующая с Система / 370 Мэйнфрейм IBM как коммерческую операционную систему и принял EBCDIC кодировка символов.[3]

Созданная в середине 1970-х годов и не имеющая ограничений для совместимости с более ранними операционными системами, VME во многих отношениях более современна по своей архитектуре, чем сегодняшняя. Unix производные (Unix был разработан в 1960-х) или Майкрософт Виндоус (которая начиналась как операционная система для однопользовательских компьютеров, но до сих пор выдает то происхождение).

Номенклатура

Когда New Range был впервые запущен в октябре 1974 года, его операционная система называлась «Система B». К тому времени, когда он был доставлен впервые, он стал «VME / B».[4]

VME / K был разработан независимо (по словам Кэмпбелл-Келли, «по прихоти Эда Мака»), и позже был доставлен с меньшими мейнфреймами, такими как 2960.

После финансового кризиса 1980 года в ICL было введено новое руководство (Кристофер Лейдлоу в качестве председателя и Робб Уилмот в качестве управляющего директора). Первым решением нового руководства было отказаться от VME / K.[4][5] Таким образом, в июле 1981 года был запущен «VME2900»: хотя он был представлен клиентской базе как слияние VME / B и VME / K, на самом деле это была база VME / B с некоторыми привитыми функциями от VME / K. Это дало возможность отказаться от некоторых устаревших функций, которые остались доступными для клиентов, которые в них нуждались, в виде опции «BONVME».

Суффикс «2900» был исключен в версии системы 213 (SV213), когда ICL запустила Series 39 в 1985 году в качестве преемника исходной серии 2900; а префикс "Открыть" был добавлен после SV294. VME получила возможность размещать приложения, изначально написанные для Unix через UNIX System V, выпуск 3 подсистема на основе VME / X, адаптированная для работы под VME и использующая ASCII кодировка символов.[6][7][8]

В 2007 году Fujitsu анонсировала версию VME, работающую как размещенную подсистему, под названием сверхновая, в Майкрософт Виндоус, или же SUSE или же Red Hat Enterprise Linux на x86-64 аппаратное обеспечение.[2]

В 2012 году группа пользователей VME, AXiS, объявила, что через почти 40 лет она будет распущена из-за сокращения базы пользователей.[9]

Архитектура

VME структурирован как набор уровней, каждый из которых имеет доступ к ресурсам на разных уровнях абстракции. Виртуальные ресурсы, предоставляемые одним уровнем, создаются из виртуальных ресурсов, предлагаемых уровнем ниже. Доступ к ресурсам каждого уровня контролируется с помощью набора уровней доступа: чтобы процесс мог использовать ресурс на определенном уровне доступа, он должен иметь ключ доступа, предлагающий доступ к этому уровню. Концепция аналогична «кольцам защиты» в Мультики. Архитектура допускает 16 уровней доступа, из которых 6 внешних зарезервированы для кода уровня пользователя.

Ортогонально уровням доступа операционная система делает ресурсы доступными для приложений в виде виртуальной машины. Виртуальная машина может запускать несколько процессов. На практике виртуальная машина VME ближе к концепции процесса в других операционных системах, а процесс VME больше похож на поток. Для выделения ресурсов виртуальной машине используется модель стека: когда стек выталкивается, все ресурсы, выделенные на этом уровне стека, высвобождаются. Таким образом, вызовы из приложения в операционную систему выполняются вызовом, который сохраняет тот же стек процессов, но с изменением уровня защиты; итоговая эффективность системных вызовов - одна из характеристик, делающих архитектуру конкурентоспособной.

Связь между виртуальными машинами осуществляется с помощью событий (именованные каналы связи) и общих областей памяти. Аппаратная архитектура также обеспечивает семафор инструкции INCT (приращение и проверка) и TDEC (проверка и декремент).

Файлы и другие постоянные объекты записываются в репозиторий, называемый Каталогом. В отличие от других операционных систем, иерархия именования файлов не зависит от расположения файла на конкретной ленте или томе диска. В те дни, когда было больше необходимости в автономном хранилище, это позволяло легко отслеживать файлы независимо от их местоположения и перемещать файлы между местоположениями без их переименования. Помимо файлов, Каталог отслеживает пользователей и группы пользователей, тома, устройства, сетевые подключения и многие другие ресурсы. Метаданные для файлов могут храниться в объекте, называемом описанием файла. Каталог был, вероятно, первым примером того, что позже будет называться базой данных сущностей-отношений.

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

Исключения времени выполнения, называемые непредвиденные обстоятельства, захватываются обработчиком ошибок объектной программы (OPEH), который может создавать отчет (эквивалентный трассировки стека ) либо в интерактивном режиме, либо в журнале.

OMF

Скомпилированный объектный код поддерживается в формате, называемом OMF (формат объектного модуля). В отличие от многих других операционных систем, этот формат также используется загрузчиком. Доступны различные компиляторы, а также утилиты, в частности, Collector, который связывает код в нескольких модулях OMF в один модуль для более эффективной загрузки во время выполнения, и Module Amender, который позволяет исправлять инструкции в OMF. модуль для исправления ошибок с использованием синтаксиса ассемблера.

SCL

Командный язык для VME известен как SCL (язык управления системой).

Это гораздо более узнаваемый типизированный язык программирования высокого уровня чем языки управления заданиями или языки оболочки, присутствующие в большинстве других операционных систем: его можно сравнить с языками сценариев, такими как JavaScript, хотя его поверхностный синтаксис происходит от Алгол 68.

SCL предназначен для одновременного интерактивного использования построчно с консоли или с командный файл и создание исполняемых скриптов или программ (когда язык компилируется в формат объектного модуля так же, как и любой другой язык программирования VME). Объявление процедуры в SCL также действует как определение простой формы или шаблона, позволяющего вызывать процедуру из интерактивного терминала, с полями, проверенными в соответствии с типами данных параметров базовой процедуры или с использованием значений параметров процедуры по умолчанию.

Во встроенном словаре команд используется согласованное соглашение об именах с императивным глаголом, за которым следует существительное: например, DELETE_FILE или DISPLAY_LIBRARY_DETAILS. Команда может быть написана полностью или в сокращенной форме, которая объединяет стандартные сокращения для глагола и существительного: например, XF (X для УДАЛИТЬ, F для ФАЙЛА) или DLBD (D для DISPLAY, LB для LIBRARY, D для DETAILS) .

SCL имеет блочную структуру, с блоками начала и конца, выполняющими двойную и взаимодополняющую роль: определение лексической области объявления переменных и определение точек, в которых ресурсы, полученные от операционной системы, должны быть освобождены. Переменные в языке (которые доступны из приложений в виде переменные среды ) могут иметь несколько простых типов, таких как строки, суперстроки (последовательности строк), логические значения и целые числа, а также используются для хранения ссылок на системные ресурсы, такие как файлы и сетевые соединения.

Можно «дизассемблировать» программу SCL из OMF обратно в исходный код SCL с помощью команды READ_SCL (или RSCL). Однако результат не всегда идеален и часто будет содержать ошибки, которые остановят повторную компиляцию без вмешательства пользователя.

Простой пример кода можно увидеть на 99 бутылок пива интернет сайт.[10]

Более реалистичный пример, где SCL используется для компиляции программы, написанной на S3, показано ниже. Этот пример взят из Колумбийский университет Архив внедрений Кермит.[11]

НАЧАТЬ, КОГДА РЕЗУЛЬТАТ GT 0 + _ THEN + _ SEND_RESULT_MESSAGE (RES = RESULT, ACT = "QUIT ()") FI INT KMT_SRC, KMT_OMF, KMT_REL ASSIGN_LIBRARY (NAM = KERMIT.SOURCE, LNA = KMT_SRC) ASSIGN_L , LNA = KMT_OMF) ASSIGN_LIBRARY (NAM = KERMIT.REL, LNA = KMT_REL) НАЧАТЬ УДАЛИТЬ_ФАЙЛ (NAM = * KMT_OMF.KMT_DATA_MODULE (101)) DELETE_FILE (NAM = * KMT_AMF_OMH.KMODLE (NAM = * KMT_AMF_OMH.KMOD) (101)) DELETE_FILE (NAM = * KMT_OMF.KMT_FH_MODULE (101)) DELETE_FILE (NAM = * KMT_OMF.KMT_HELP_MTM (101)) DELETE_FILE (NAM = * KMT_OMF.KMT_MAIN_MODE (NAM = * KMT_OMF.KMT_MAIN_MOD) (NAMT_OMF.KMT_MAIN_MOD) )) DELETE_FILE (NAM = * KMT_OMF.KMT_PP_MODULE (101)) DELETE_FILE (NAM = * KMT_OMF.KMT_SP_MODULE (101)) DELETE_FILE (NAM = * KMT_OMF.KMT_OMF.MET_MET_MET (*)) (101) KMT_OMF.KMT_SP_MET_MET (*)) DELETE_F ILE (NAM = * KMT_REL.KERMIT (101)) DELETE_FILE (NAM = * KMT_REL.KERMIT_MODULE (101)) END S3_COMPILE_DEFAULTS (LIS = OBJECT & XREF, DIS = ERRORLINES) S3_COMPATA_S3_COMPILE_S3_COMPILE_COMPILE_S3_COMPILE_ = * KMT_OMF.KMT_DATA_MODULE (101)) S3_COMPILE (INP = * KMT_SRC.KMT_DH_MODULE (101), OMF = * KMT_OMF.KMT_DH_MODULE (101)) (* KMT_MODULE___ = 101)) S3_COMH.MODULE_ = * KOMHMODULE_ = * KOMPILE_ = * KMODU_MODU_S3_COMPILE_ = * 101)) S3_COMPILE (INP = * KMT_SRC.KMT_FH_MODULE (101), OMF = * KMT_OMF.KMT_FH_MODULE (101)) NEW_MESSAGE_TEXT_MODULE (CON = * KMT_SRC.KMT_MODULE) (CON = * KMT_SRC.KMT_HELP) (101) KMT_MT_MF_MHELP (* 101) = * KMT_SRC.KMT_MAIN_MODULE (101), OMF = * KMT_OMF.KMT_MAIN_MODULE (101)) S3_COMPILE (INP = * KMT_SRC.KMT_PH_MODULE (101_), OMF = * KMT_MTLE_PODI (101_), OMF = * KMT_MTLE_PODI_MT_MT_MF_MPOD_MF_MF_MPOD_MPOD_MF_MF_MPOD_MF_MF_MPOD_MF_MF_MPOD_MF_MF_MF_MT_MPOD_MF_MPOD_MF_MT_MF_MPOD_MF_MF_MT_M_MT_MPOD_M_MT_MF_MP 101), OMF = * KMT_OMF.KMT_PP_MODULE (101) ) S3_COMPILE (INP = * KMT_SRC.KMT_SP_MODULE (101), OMF = * KMT_OMF.KMT_SP_MODULE (101)) NEW_MESSAGE_TEXT_MODULE (CON = * KMT_SRC.KMT_MF_MODULE (*) KMT_SRC.KMT_SP_MF (*) (*) KMT_SRC.KMT_SP_MTM (*) KMT_SRC.KMT_UI_MODULE (101), OMF = * KMT_OMF.KMT_UI_MODULE (101)) COLLECT () ---- INPUT (* KMT_OMF.KMT_DATA_MODULE (101) & * KMT_OMF.KMT_DATA_MODULE (101) & * KMT_OMF. * KMT_OMF.KMT_FH_MODULE (101) & * KMT_OMF.KMT_HELP_MTM (101) & * KMT_OMF.KMT_MAIN_MODULE (101) & * KMT_OMF.KMT_PH_MODULE (101) KMT_OMT.KMT_PH_MODULE (101) KMT.MT_MT_MT_MT_MT_MT_MT_MODULE (101) & * KMT_OMPMT_OMPMT_MODULE (101) .KMT_SP_MTM (101) & * KMT_OMF.KMT_UI_MODULE (101)) NEWMODULE (* KMT_REL.KERMIT_MODULE (101)) ПОДДЕРЖИТЬ СОХРАНЕНИЕ (KERMIT_THE_FROG) LISTMODULE PERFORM_ +++M _SRC.KERMIT (101), OUT = * KMT_REL.KERMIT (101), COD = NOTIFWARNINGS, OPT = FIL) END

Команды, проиллюстрированные в этом фрагменте, включают WHENEVER (объявляет политику обработки ошибок), ASSIGN_LIBRARY (связывает локальное имя для каталога файлов), DELETE_FILE (делает постоянный файл временным, а затем он удаляется в КОНЦЕ блока), S3_COMPILE (компилирует программа, написанная на S3: эта команда нарушает обычное соглашение между глаголами и существительными), NEW_MESSAGE_TEXT_MODULE (создает модуль, содержащий параметризованные сообщения об ошибках, подходящие для локализации) и COMPILE_SCL, который компилирует программу SCL в объектный код.

Команда COLLECT объединяет различные модули объектного кода в один модуль и управляется собственным локальным командным файлом, который встроен в SCL между разделителями «----» и «++++». Подкоманды INPUT и NEWMODULE определяют имена модулей ввода и вывода; SUPPRESS и RETAIN определяют внешнюю видимость именованных процедур в собранном модуле; и LISTMODULE запрашивает отчет с описанием модуля вывода.

Обратите внимание, что "." используется для разделения частей иерархического имени файла. Звездочка в начале обозначает локальное имя библиотеки, привязанное с помощью команды ASSIGN_LIBRARY. Число в скобках после имени файла - это номер поколения. Операционная система связывает номер поколения с каждым файлом, и запросы на файл получают последнее поколение, если не указано иное. Создание нового файла по умолчанию создает следующее поколение и оставляет без изменений предыдущее поколение; эта программа, однако, сознательно выбрала создание поколения 101, чтобы идентифицировать общедоступный выпуск.

Варианты повышенной безопасности

В результате ICL активное участие в предоставлении компьютерных услуг государственному сектору Великобритании, в частности, тех, которые имеют особые требования безопасности, такие как OPCON CCIS, он был одним из первых участников рынка Безопасные системы.

VME составляла основу деятельности ICL на арене безопасных систем. У нее было то преимущество, что, будучи последней крупномасштабной операционной системой, когда-либо разработанной и созданной с нуля, ее базовая архитектура включала в себя многие примитивы, необходимые для разработки защищенной системы, в частности, регистры контроля доступа с аппаратной поддержкой (ACR) для ограничения к привилегиям, которые могут быть получены любым процессом (включая пользователей).

Это привело к созданию Центрального агентства по вычислениям и телекоммуникациям при правительстве Великобритании (CCTA ) финансирование Project Spaceman в середине 1980-х для ICL Defense Technology Center (DTC) был разработан вариант VME с повышенной безопасностью. ICL запустила его как пару дополнительных продуктов, при этом коммерческий выпуск назывался High Security Option (HSO), а выпуск для государственного сектора, включая технологии государственного шифрования (GFE), назывался Government Security Option (GSO).

HSO и GSO были официально протестированы в рамках CESG Схема оценки безопасности Великобритании, одна из предшественниц ITSEC и Общие критерии, и тем самым стала первой основной операционной системой, официально сертифицированной.

Серии 39

В Серии 39 представила Nodal Architecture, новую реализацию распределенная разделяемая память что можно рассматривать как гибрид мультипроцессор система и кластер дизайн. Каждая машина состоит из нескольких узлы, и каждый узел содержит свой собственный процессор кода заказа (ЦП) и основную память. Виртуальные машины обычно располагаются (в любое время) на одном узле, но могут работать на любом узле и перемещаться с одного узла на другой. Диски и другие периферийные устройства используются узлами совместно. Узлы подключаются с помощью высокоскоростной оптической шины, которая используется для предоставления приложениям виртуальной общей памяти. Сегменты памяти, помеченные как общие (общедоступные или глобальные), реплицируются на каждый узел, а обновления транслируются по сети между узлами. Процессы, использующие сегменты неразделенной памяти (узловые или локальные), выполняются полностью изолированно от других узлов и процессов.

Процесс разработки

VME изначально был написан почти полностью на S3, специально разработанный язык системного программирования на основе Алгол 68R (однако VME / K был написан в основном на языке ассемблера SFL). Хотя язык высокого уровня используется, операционная система не предназначена для независимости от базовой аппаратной архитектуры: наоборот, программная и аппаратная архитектура тесно интегрированы.

С начала 1990-х годов некоторые совершенно новые подсистемы VME были частично или полностью написаны в Язык программирования C.

С самого начала VME разрабатывался с помощью программная инженерия система репозиториев известный как CADES, изначально разработан и управляется Дэвид Пирсон (ученый-компьютерщик) и построен для этой цели с использованием базового IDMS база данных. CADES это не просто система контроля версий для модулей кода: он управляет всеми аспектами жизненного цикла программного обеспечения, от сбора требований, методологии проектирования и спецификации до обслуживания на месте. CADES был использован при разработке модуля VME для хранения отдельных определений структур данных (режимов), констант (литералов), процедурных интерфейсов и основных алгоритмов. Могут существовать несколько версий («жизней») каждого из этих компонентов. Алгоритмы были написаны на языке разработки систем (SDL), который затем был преобразован в S3 источник[12] препроцессором. Могут быть созданы несколько версий одних и тех же модулей.

Инструменты разработки приложений

Инструменты разработки приложений, предлагаемые с VME, делятся на две категории:

Набор инструментов в VME необычайно однороден, и большинство клиентов используют один и тот же базовый набор языков и инструментов. В результате инструменты также очень хорошо интегрированы. Сторонние инструменты произвели относительно небольшое впечатление.

В течение многих лет подавляющее большинство пользователей VME писали приложения на КОБОЛ, обычно используя IDMS база данных и TPMS обработка транзакции монитор. Включены другие языки программирования Фортран, Паскаль, АЛГОЛ 68RS, Коралловый 66 и РПГ2, но это служило интересам меньшинства. Позже, в середине 1980-х, компиляторы для C стали доступны как в подсистеме Unix, так и вне ее, в основном для того, чтобы обеспечить перенос такого программного обеспечения, как реляционная база данных системы. Интересно, что PL / I Компилятор подмножества был написан EEC для помощи в переносе программ с IBM на оборудование ICL.

Компиляторы, разработанные в ICL, имеют общую архитектуру, а в некоторых случаях используют общие компоненты, такие как генераторы кода. Многие из компиляторов использовали модуль ALICE [внутренняя общая среда языка ассемблера] и создали раннюю форму предварительно скомпилированного кода (P-Code), названную ROSE, благодаря чему скомпилированные библиотеки формата объектных модулей (OMF) загружались на любую машину в этом диапазоне. .

Языки системного программирования: S3 и SFL

Основным языком, используемым для разработки как самой операционной системы VME, так и другого системного программного обеспечения, такого как компиляторы и мониторы обработки транзакций, является S3. Это язык высокого уровня, во многом основанный на Алгол 68, но с типами данных и низкоуровневыми функциями и операторами, тесно согласованными с архитектурой серии 2900.

An язык ассемблера SFL (Sсистема Fсоборование Lязык) также доступен. Это было использовано для разработки VME / K, разработчики которого не были уверены, что язык высокого уровня может обеспечить адекватную производительность, а также для IDMS система баз данных из-за того, что она возникла как сторонний продукт. SFL изначально назывался Mакро Ассемблер ппрограммирование LангуагE (MAPLE), но поскольку архитектура 2900 позиционировалась как состоящая из машин высокого уровня, название было изменено по запросу ICL Marketing. Он был разработан как часть инструментария для System D, который впоследствии был отменен. Родственные семейства ассемблеров для других архитектур (CALM-xx, работающий под VME, PALM-xx, разработанный на Паскале и работающий на различных хостах) были разработаны для внутреннего использования.

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

QuickBuild

Среда разработки приложений QuickBuild на VME оказалась весьма успешной, несмотря на то, что приложения в значительной степени привязаны к среде VME. В основе этой среды лежит система словарей данных (DDS, также называемая OpenDDS), ранняя и очень успешная попытка создания всеобъемлющего хранилище поддержка всех других инструментов с полной поддержкой жизненного цикла разработки. Помимо схем баз данных и описаний файлов и записей, словарь отслеживает такие объекты, как отчеты и запросы, дизайн экрана и код 4GL; он также поддерживает множество моделей на уровне сбора требований, например сущность-связь модели и модели процессов.

QuickBuild 4GL поставляется в двух формах:

  • ApplicationMaster для создания онлайн-приложений TP
  • ReportMaster для пакетной отчетности.

Оба являются декларативными языками высокого уровня, использующими Структурированное программирование Джексона как парадигма их дизайна. ApplicationMaster необычен в своем подходе к разработке приложений, поскольку он фокусируется на пользовательском сеансе, как если бы он выполнялся в едином диалоговом процессе, полностью скрывая сложность поддержания состояния при взаимодействии с пользователем. Поскольку 4GL и другие инструменты, такие как конструктор экранов, работают только со словарем DDS, который также содержит схемы базы данных, существует значительное повторное использование метаданных, которое редко достигается с другими 4GL.

Рекомендации

  1. ^ http://www.fujitsu.com/downloads/EU/uk/pdflite/VME_brochure.pdf#page=3
  2. ^ а б Введение в архитектуру superNOVA (PDF) (Отчет). Fujitsu. Январь 2007. Архивировано с оригинал (PDF) 28 сентября 2007 г.
  3. ^ Барри Дж. Грэм (2002). «Стоимость Fujitsu OpenVME по сравнению со стоимостью мэйнфрейма IBM» (PDF). Услуги Fujitsu. Получено 28 января 2014.
  4. ^ а б Кембелл-Келли, Мартин (1989). ICL: история бизнеса и техники. Кларендон Пресс. ISBN  0-19-853918-5.
  5. ^ Рыцарь, Майкл (2008). "Маяк 1963-7: система, опережающая свое время?". Компьютерное воскрешение (43).
  6. ^ Дэйв Бейли (powerpoint) (30 ноября 2000 г.). «Постоянное развитие OpenVME». ICL. Получено 28 января 2014.
  7. ^ «Open VME от ICL оказывается подмножеством Unix под VME; скоро появятся приложения». Обзор компьютерного бизнеса. 10 февраля 1992 г.. Получено 28 января 2014.
  8. ^ Коутс, П. (1993). «VME-X: открытие VME» (PDF). Технический журнал ICL. ICL. ISSN  0142-1557. Получено 7 ноября 2015.
  9. ^ Клаутт, Гарольд (2012). «Группа пользователей ICL будет распущена после почти 40 лет верной службы сообществу VME». Ось. Получено 11 июля 2018.
  10. ^ Пример кода SCL на сайте 99 бутылок пива
  11. ^ «Архив исходного кода программного обеспечения Kermit». Проект Кермита Колумбийского университета. 22 августа 2011 г.. Получено 1 марта 2013.
  12. ^ Хуан Ф. Рамиль. «Продолжение оценки усилий для эволюции - тематическое исследование» (PDF).

Источники

внешняя ссылка