Введение
Ранний язык программирования
CORAL, сокращение от Computer On line Real time Applications Language, – это язык программирования, первоначально разработанный в 1964 году в Королевском радиолокационном заведении (Royal Radar Establishment, RRE) в Малверне, Ворчестершир, Великобритания. На него оказали влияние прежде всего JOVIAL, а значит, и ALGOL, однако он не является подмножеством ни одного из этих языков. Наиболее известная версия, CORAL 66, была впоследствии разработана И. Ф. Кьюри и М. Гриффитсом под руководством Межведомственного комитета по компьютерным приложениям (Inter Establishment Committee for Computer Applications, IECCA). Официальное определение, под редакцией Вудворда, Уэзеролла и Гормана, было впервые опубликовано в 1970 году. В 1971 году Министерство обороны Великобритании выбрало CORAL в качестве языка для будущих военных приложений, и для поддержки этого была внедрена программа стандартизации, чтобы гарантировать соответствие компиляторов CORAL установленным требованиям. Этот процесс впоследствии был использован Министерством обороны США при разработке стандарта Ada.
Обзор
Coral 66 – это язык программирования общего назначения, основанный на ALGOL 60, с элементами языков Coral 64, JOVIAL и Fortran. Он включает структурированные типы данных (как в Pascal) и поддерживает упаковку данных для ограниченного объема памяти (также как в Pascal). Подобно Эдинбургскому IMP, он допускает использование встроенного ассемблерного языка, а также обеспечивает надежную проверку и диагностику во время выполнения. Язык разработан для вычислительных систем реального времени и встраиваемых приложений, а также для компьютеров с ограниченной вычислительной мощностью, включая машины с фиксированной точкой арифметики и без поддержки динамического выделения памяти. Coral 66 являлся межведомственным стандартом для военного программирования в Великобритании и широко применялся в гражданской промышленности управления и автоматизации. На нем разрабатывалось программное обеспечение для компьютеров Ferranti и General Electric Company (GEC) начиная с 1971 года. Существуют реализации для платформ Interdata 8/32, PDP 11, VAX и Alpha, серверов HPE Integrity, Honeywell и Computer Technology Limited (CTL, позднее ITL) Modular 1.
Поскольку Coral был ориентирован на широкий спектр задач реального времени, а не на общую обработку офисных данных, стандартизированного аналога библиотеки stdio не существовало. IECCA рекомендовала использовать базовый пакет ввода/вывода (I/O) вместе с любым компилятором (в документе под названием «Ввод/вывод символьных данных в утилитах Coral 66»). Большинство разработчиков избежали этого, создав интерфейсы Coral к существующим библиотекам Fortran и, позднее, C. Возможно, наиболее значительным вкладом CORAL в вычислительную технику стало обеспечение контроля качества коммерческих компиляторов. Для одобрения компилятора CORAL организацией IECCA, и, следовательно, для возможности его продажи как компилятора CORAL 66, кандидат-компилятор должен был успешно скомпилировать и выполнить стандартный набор из 25 тестовых программ и 6 эталонных программ. Эта процедура являлась частью процесса утверждения британского стандарта (BS) 5905. Эта методология была замечена и адаптирована впоследствии Министерством обороны США для сертификации компиляторов Ada. Исходный код компилятора Coral 66 (написанного на BCPL) был восстановлен, а официальное определение Coral 66, опубликованное канцелярией Ее Величества (HMSO), было отсканировано. Патентное ведомство Министерства обороны выдало лицензию проекту «История вычислительной техники Эдинбурга», позволяющую разместить как код, так и документацию по языку в сети Интернет для некоммерческого использования.
Варианты
Вариант языка Coral 66 под названием PO CORAL был разработан в конце 1970-х – начале 1980-х годов британским Генеральным почтовым отделением (GPO) совместно с компаниями GEC, STC и Plessey для использования в управляющих компьютерах цифровой телефонной станции System X. Позже он был переименован в BT CORAL, когда British Telecom была выделена из почтового ведомства. Уникальными особенностями этого языка являлись акцент на выполнении в реальном времени, обработке сообщений, ограничения на время выполнения операторов между ожиданием ввода данных и запрет на использование рекурсии для исключения необходимости в стеке.