FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.
Email: Нажмите что бы посмотреть
BCPL разрабатывался как компактный язык для системного программирования и написания компиляторов, в частности, на нем должен был быть написан компилятор CPL (отсюда вариант названия Bootstrap CPL). В итоге первый компилятор, переписанный на BCPL же, занимал около 1000 строк и требовал менее 20 кБ памяти для запуска.
В свое время язык использовался достаточно широко: к 1979 году существовали компиляторы для как минимум 25 архитектур, на нем даже писали операционные системы (TRIPOS и AmigaDOS). Он оказал значительное влияние на B, который, в свою очередь, стал прародителем C. Именно из BCPL создатели этих языков позаимствовали идею предоставления программисту свободы, не ограниченной возможностями языка. В настоящее время язык не используется в практических целях; существует только одна реализация языка, созданная Мартином Ричардсом и предназначенная для Cintpos (варианта TRIPOS).
Единственный тип данных в языке — целое число, обычно 16-битное, позднее 32-битное. При этом применяется контекстная типизация — переменные трактуются как числа, символы, указатели, битовые паттерны или логические значения в зависимости от того, какие операторы к ним применяются. Проверки того, может ли конкретная операция применяться к конкретному значению переменной, не проводятся — за этим должен следить программист. Некоторые реализации добавляли в язык числа с плавающей точкой и специальные операторы для их обработки.
Структура блоков и управляющих команд BCPL близка к использующейся в CPL. Блок может использоваться вместо команды или вместо выражения; во втором случае перед блоком добавляется слово VALOF, а результат его выполнения задается словом RESULTIS внутри блока. В любом блоке могут присутствовать объявления локальных переменных и процедур. Позднее язык был расширен возможностью определения сопрограмм, что сделало системное программирование еще более удобным.
Имена процедур, если рассматривать их как значения, являются указателями на соответствующие фрагменты кода. Они могут храниться в переменных, передаваться в функции/процедуры как аргументы и т.д. Возможны переходы между процедурами при помощи псевдофункций level() и longjmp(). Принципы работы с процедурами позднее были заимствованы для C.
Набор библиотек языка предельно лаконичен: они содержат только базовые функции ввода-вывода данных и динамического распределения памяти.