Введение
X3J13 – название технического комитета, входившего в состав Международного комитета по стандартам информационных технологий (INCITS, ранее известного как X3). Комитет X3J13 был сформирован в 1986 году для разработки стандарта Common Lisp Американского национального института стандартов (ANSI) на основе первого издания книги «Common Lisp the Language» (также известной как CLtL или CLtL1) Гая Л. Стила-младшего, которая ранее фактически являлась стандартом для этого языка. Основным результатом работы X3J13 стал американский национальный стандарт для языка программирования Common Lisp (X3.226/1994), утвержденный 8 декабря 1994 года. Впоследствии X3J13 сотрудничал с рабочей группой SC22/WG16 Международной организации по стандартизации (ISO) над созданием международного стандартизированного диалекта Lisp под названием ISLISP.
Организация
Первоначальным председателем комитета был доктор Роберт Мэтис из Университета штата Огайо, а секретарем — Мэри ван Деусен. Гай Л. Стил-младший изначально был вице-председателем. Позднее Мэтис сложил с себя полномочия председателя, и Стил занял этот пост. Деятельность комитета руководствовалась его уставом, успешное создание которого связывают с координирующими усилиями Сьюзан П. Эннис, представителя Amoco Production Company. Устав определяет цели и приоритеты комитета, а также содержит широкий перечень тем для обсуждения.
Подкомитеты
Комитет сформировал несколько подкомитетов, чтобы помочь своим членам более эффективно направить усилия.
Подкомитет по очистке
Подкомитет по очистке, возглавляемый Ларри Масинтером, разработал стандартизированный формат для подачи предложений на голосование. Эти описания проблем, хотя и не являются частью стандарта, были признаны достаточно полезными для включения в Common Lisp HyperSpec и перекрестных ссылок на них, чтобы предоставить читателям информацию об изначальных намерениях комитета при принятии решений. Эти описания также служат исторической летописью альтернативных решений, которые в конечном итоге не были приняты.
Подкомитет по сборке
Под председательством Сандры Лоуземор этот подкомитет разработал предложения по вопросам, касающимся компиляции Lisp. Гай Стил отметил во втором издании Common Lisp the Language значительный вклад Подкомитета по компиляции в уточнение процесса компиляции, описанного в первом издании, части которого Стил называет "расплывчатыми".
Подкомитет по итерации
Джон Л. Уайт был председателем подкомитета по итерациям. В числе вопросов, которыми занималась эта группа, был обобщенный макрос LOOP – предметно-ориентированный язык, которому вторая редакция CLtL посвящает целую главу. Синтаксис этого макроса, напоминающий ALGOL и отличающийся от более привычного синтаксиса S-выражений Lisp, был и остаётся несколько спорным.
Подкомитет по вопросам характера
Подкомитет по символам под председательством Тома Линденa был поставлен задача определить, как стандарт будет обрабатывать вопросы, связанные с различными наборами символов. Решение этих вопросов, особенно возможность использования любого символа в имени символа, должно было упростить Common Lisp для пользователей из разных стран.
Подкомитет по устранению ошибок
Под председательством Кента Питмана подкомитет по обработке ошибок устранил то, что было описано как "самая большая нерешенная проблема в Common Lisp", внедрив единую систему для обработки исключительных ситуаций различных типов – фатальных и нефатальных, продолжаемых и непродолжаемых, вызванных ошибкой программы или, например, исчерпанием ресурсов (таким как переполнение стека). Сигнализация условий происходит в одной точке кода, а обработка – в другой. Использование термина "сигнал" в данном контексте отличается от общепринятого понимания сигналов в операционных системах (за исключением машин Lisp, где это значение термина исторически сложилось); вопросы сигнализации операционной системы не входили в компетенцию комитета и, следовательно, не были отражены в стандарте ANSI Common Lisp. Асинхронные прерывания и обработка исключений с плавающей точкой по стандарту IEEE также не входили в сферу деятельности комитета и не были включены в стандарт.
Подкомитет по разработке
Кэти Чепмен возглавляла Рабочую группу по разработке проекта, которая отвечала за подготовку текста самого стандарта. Кроме того, рабочая группа контролировала поддержание единообразия и точности терминологии во всей работе комитета.
Заключительный документ
Окончательный стандарт, разработанный комитетом X3J13, был опубликован как американский национальный стандарт X3.226 и также в виде гипертекста под названием Common Lisp HyperSpec.
Связь с языком Common Lisp
Книга Common Lisp the Language, хотя авторство в основном принадлежит Гаю Л. Стил-младшему, являлась результатом работы временного комитета, сформировавшегося около 1980 года и совместно работавшего над созданием первоначального де-факто стандарта для Common Lisp до образования X3J13. X3J13 начал свою работу, взяв Common Lisp the Language за основу, и на её базе разрабатывал то, что впоследствии стало ANSI Common Lisp. Стил входил в состав комитета и дал им разрешение использовать любые части первого издания в своей работе. Документы, опубликованные X3J13, позднее были использованы, вместе с цитатами отдельных членов комитета, при создании Common Lisp the Language Second Edition, выпущенного в 1990 году, что позволило сообществу Common Lisp ознакомиться с многими функциями, которые ожидалось увидеть в окончательном стандартном документе комитета. Это издание по содержанию схоже со стандартом, но отличается по форме. Однако между публикацией книги и окончательным проектом стандарта ANSI были внесены существенные изменения, как дополнения, так и исключения. В целом, оригинальное издание Common Lisp the Language было документом, от которого X3J13 первоначально отталкивался в своей работе. Второе издание, напротив, было самостоятельной работой Стила, а не результатом работы комитета и не имело официального статуса ни в X3J13, ни в ANSI. Как указано в предисловии ко второму изданию, оно не было санкционировано X3J13, выбор содержания как моментального снимка текущей работы не был формально согласован с X3J13, а окончательная версия не была рассмотрена или одобрена X3J13.