Введение

Компьютерная система Flex была разработана Майклом Фостером и Ианом Карри из Royal Signals and Radar Establishment (RSRE) в Малверне, Англия, в конце 1970-х и 1980-х годов. Она использовала схему хранения с тегами для реализации архитектуры возможностей и была спроектирована для безопасного и эффективного внедрения строго типизированных процедур. Аппаратное обеспечение было специализированным и микропрограммируемым, с операционной системой, (модульным) компилятором, редактором, сборщиком мусора и файловой системой, все написанные на ALGOL 68RS. Существовало (по крайней мере) два воплощения Flex, реализованных на аппаратном обеспечении с перезаписываемым микрокодом. Первый был поставлен компанией Logica по проекту RSRE, а второй использовал ICL PERQ. Микрокод отвечал за выделение, освобождение памяти и сбор мусора. Это сразу же исключало целый класс ошибок, возникающих из-за неправильного использования (преднамеренного или случайного) указателей. Примечательной особенностью Flex было файловое хранилище с тегами и возможностью однократной записи. Это позволяло прозрачно записывать и извлекать произвольный код и структуры данных, без использования внешних кодировок. Таким образом, данные можно было безопасно передавать от программы к программе. Аналогичным образом, удаленные возможности позволяли получать доступ к данным и процедурам на других машинах через сетевое соединение, опять же без участия прикладной программы во внешних кодировках данных, параметров или возвращаемых значений. Вся схема позволяла безопасно реализовывать абстрактные типы данных, поскольку элементы данных и процедуры, которым разрешен доступ к ним, могли быть связаны вместе, а полученные возможности свободно передаваться. Возможность предоставляла доступ к процедурам, но не могла быть использована для получения доступа к данным. Еще одной примечательной особенностью Flex было понятие «шатких указателей», которые в последнее время часто называют «слабыми ссылками», указывающими на блоки памяти, которые могут быть освобождены при следующем сборе мусора. Это используется, например, для кэшированных блоков диска или списка свободных рабочих пространств процедур. COMFLEX, сеть коммутации пакетов, способная передавать данные со скоростью магнитного диска, разрабатывалась параллельно с Flex. Это сделало возможным использование удаленных файловых хранилищ, удаленных возможностей и удаленных вызовов процедур.