Jump to content

GNU Коварство

GNU Коварство
Семья Лисп
Разработано Обри Джаффер, Том Лорд, Майлз Бэйдер
Разработчик Проект GNU
Впервые появился 1993 год ; 31 год назад ( 1993 ) [1]
Стабильная версия
3.0.9 [2] / 25 января 2023 г .; 17 месяцев назад ( 25.01.2023 ) [2]
Платформа IA-32 , x86-64 , AArch64 , Armel , Armhf , mips , mips64el , mipsel , ppc64el , s390x
ТЫ Linux , BSD , Windows (через MinGW или Cygwin )
Лицензия LGPL-3.0 или более поздняя версия
Расширения имен файлов .scm .go (объект Guile)
Веб-сайт ГНУ .org /программное обеспечение /Коварство
Под влиянием
Лисп , Схема , SCM

Повсеместный интеллектуальный язык GNU для расширений [3] ( GNU Guile ) — предпочтительная языковая система расширений для проекта GNU. [4] и содержит реализацию языка программирования Scheme . Его первая версия была выпущена в 1993 году. [1] В дополнение к значительной части стандартов Scheme, Guile Scheme включает модульные расширения для множества различных задач программирования. [5] [6]

Для расширения программ Guile предлагает библиотеку libguile , которая позволяет встраивать язык в другие программы и тесно интегрировать его через C языка интерфейс прикладного программирования (API) ; Аналогичным образом, новые типы данных и подпрограммы, определенные через C API, могут быть доступны как расширения Guile. [7]

Guile используется во многих программах под эгидой проекта GNU ( GDB , Make , Guix , GNU TeXmacs , GnuCash , LilyPond , Lepton-EDA ...) [8] но он также находит применение и за пределами этого, например, в расколе Google .

Коварная схема [ править ]

Guile Scheme — это общего назначения , язык программирования высокого уровня гибкость которого позволяет выражать концепции в меньшем количестве строк кода как C. , чем это было бы возможно в таких языках , Например, его гигиеничная система макросов позволяет добавлять элементы синтаксиса, специфичные для предметной области, без изменения Guile. Guile реализует стандартную схему R5RS, большую часть R6RS и R7RS, [9] несколько запросов на реализацию схемы (SRFI) и множество собственных расширений.

Основная идея Guile Scheme заключается в том, что «разработчик реализует важные алгоритмы и структуры данных на C или C++ и экспортирует функции и типы для использования интерпретируемым кодом. Приложение становится библиотекой примитивов, управляемых интерпретатором, сочетая в себе эффективность скомпилированных код с гибкостью интерпретации». [10] Таким образом, Guile Scheme (и другие языки, реализованные Guile) можно расширить за счет новых типов данных и подпрограмм, реализованных через C API.

Стандартный дистрибутив предлагает модули для интерфейса переносимой операционной системы ( POSIX системных вызовов ), планирования , интерфейса внешних функций , S-выражений на основе обработки XML через SXML , SXPath и SXSLT, HTTP и других World Wide Web API , продолжений с разделителями , программирования массивов. , [11] и другой функционал. [5] [6] Программы Guile могут использовать возможности SLIB , переносимой библиотеки Scheme. [12]

Детали реализации [ править ]

При использовании продолжений с call/cc , что является требованием стандарта Scheme, Guile копирует стек выполнения в кучу и обратно. [13] В его руководстве предлагается вместо этого использовать продолжения с разделителями, потому что они имеют более эффективную реализацию. [14]

Поскольку внешний код может иметь указатели на объекты Scheme, Guile использует консервативный Бема-Демерса-Вайзера (BDW) сборщик мусора . [15]

История [ править ]

Руководство Guile подробно описывает возникновение и раннюю историю языка. [16] Ниже приводится краткое изложение:

После успеха Emacs в сообществе свободного программного обеспечения как широко расширяемого и настраиваемого приложения посредством расширения (и частичной реализации) языка Emacs Lisp , сообщество начало рассматривать, как эту стратегию проектирования можно применить к остальной части системы GNU. Том Лорд первоначально начал работу над встраиваемой средой выполнения языка под названием GNU Extension Language (GEL), которая была основана на реализации схемы SCM Джорджа Карретта Обри Джаффера (которая, в свою очередь, была основана на SIOD ). [17] [18] Лорд убедил Ричарда Столлмана сделать GEL официальным языком расширения проекта GNU, основываясь на аргументе, что Scheme является более чистым диалектом Lisp, чем Emacs Lisp, и что GEL может развиваться для реализации других языков в той же среде выполнения, а именно Emacs Lisp. После того, как Лорд обнаружил, что у GEL конфликт имен с другим языком программирования, он запросил предложения по новому имени. Из нескольких публикаций в нескольких группах новостей Usenet Лорд неоднозначно выбрал Гайла по предложению Ли Томаса. [19] [20] [21] [22]

Во время разработки Guile (тогда GEL) и до его публичного выпуска язык расширения Tcl набирал популярность и продвигался как универсальный язык расширения. Столлман считал, что Tcl недостаточно силен в качестве языка расширения, и опубликовал критику в группе новостей comp.lang.tcl, которая инициировала пламенную войну, известную как «Война Tcl». [23] Поскольку публичное объявление о проекте Guile совпало с дебатами по Tcl, стало распространенным заблуждением, что Guile возник как реакция на это.

После первого выпуска Guile разработка замедлилась на долгие годы, но в 2009–2010 годах произошли серьезные улучшения. [24] и Guile 2.0 был выпущен в 2011 году с новой инфраструктурой компилятора , реализацией виртуальной машины , переходом на сборщик мусора Бёма-Демерса-Вайзера , множеством улучшений языка Guile Scheme и другими важными изменениями. [25]

Одна из целей Guile — позволить использовать другие языки вместе со Scheme, чтобы Guile фактически был языково-нейтральной средой выполнения. В прошлых версиях были предприняты различные попытки сделать это: диалект Scheme, по существу отличающийся только C-подобным синтаксисом, перевод Emacs Lisp , конвертер Tcl, мотивированный tkWWW , и что-то примерно напоминающее язык Logo . [26] В версии 2.0 проект успешно перешел к подходу «башня компилятора» , позволяющему определять компиляторы с одного языка на другой, обычно от высокоуровневого к промежуточному представлению более низкого уровня , и, в конечном итоге, виртуальной машины к байт-коду или собственному машинному коду . [27] [28]

16 марта 2017 года была выпущена версия Guile 2.2.0 с новым оптимизирующим компилятором и высокопроизводительной регистровой виртуальной машиной. Согласно объявлению о выпуске Энди Винго, реальные программы часто показывали ускорение на 30% и более с Guile 2.2 по сравнению с предыдущей серией 2.0. Guile 2.2.0 также снизил использование памяти, ускорил интерпретатор «eval», обеспечил лучшую поддержку многоядерного программирования и удалил любые фиксированные ограничения на рекурсивные вызовы функций. Он также поддерживал создание средств параллелизма в пользовательском пространстве, которые мультиплексируют миллионы одновременных легких «волокон» и обеспечивал полную Emacs-совместимую реализацию Elisp, реализуя все функции и особенности Elisp так же, как Emacs. [29]

16 января 2020 года был выпущен Guile 3.0.0 с JIT -генерацией собственного кода для гораздо большей производительности. По сравнению с версией 2.2 производительность микротестов в целом примерно в два раза выше, а некоторые отдельные тесты — до 32 раз быстрее. Он также включал поддержку чередующихся определений и выражений в лексическом контексте, встроенную поддержку структурированных исключений, улучшенную поддержку стандартов схем R6RS и R7RS и множество оптимизаций. [30] [31]

1958 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 2020
ЛИСП 1, 1.5, ЛИСП 2 (заброшенный)
 Маклисп
 Интерлисп
 леев
 Лисп-машина Лисп
 Схема Р5РС Р6РС R7RS маленький
 НОЛЬ
 ЗИЛ (язык реализации Zork)
 Франц Лисп
 Общий Лисп стандарт ANSI
 Лисп
 Схема СО
 XLISP
 Т
 На схеме
 Эмакс Лисп
 АвтоЛИСП
 ПикоЛисп
 Гамбит
 EuLisp
 ИСЛИСП
 ОпенЛисп
 Схема PLT  Ракетка
 новыйЛИСП
 GNU Коварство
 Визуальный ЛИСП
 Кложур
 Дуга
 ЛФЭ
 Он
 Хиалисп

Интеграция Emacs [ править ]

В прошлом было несколько незавершенных попыток заменить или дополнить язык расширения Emacs Lisp с помощью Guile, параллельно с усилиями по поддержке других языков в Guile. [ нужна ссылка ]

С версией Guile 2.0 началась новая попытка реализовать Elisp в башне компилятора Guile и заменить реализацию Elisp в Emacs на реализацию libguile, которая достигла значительного прогресса в рамках проектов Google Summer of Code . [32] Emacs на основе Guile может обеспечить более высокую производительность выполнения Emacs Lisp, упростить поддержку новых функций языка Emacs Lisp, сделать библиотеки Guile, написанные на других языках программирования, доступными для кода Emacs Lisp, а также позволить писать расширения Emacs на других языках программирования, поддерживаемых Guile. при этом оставаясь полностью обратно совместимым с существующими базами кода Emacs Lisp.

По состоянию на октябрь 2014 г. , реализация достигла стадии, когда Guile Emacs может надежно запускать большую часть кода Emacs Lisp. Остающиеся проблемы или возможные проблемы включают в себя различное внутреннее представление строк Emacs Lisp из строк Scheme, разницу между тем, как Emacs Lisp и Scheme обрабатывают логические объекты ложного и пустого списка, макросы Emacs Lisp, не интегрируемые со Scheme, Emacs Lisp не предназначен для параллелизм и переносимость Guile на платформы, поддерживаемые Emacs. Другие опасения, поднятые сообществом Emacs, включают относительные размеры сообществ Emacs и Guile, а также то, приведет ли это к расколу сообщества, если Emacs будет расширяться на других языках программирования, кроме Emacs Lisp. [33]

Интеграция GNU Make [ править ]

GNU make может быть построен с поддержкой GNU Guile как встроенного языка расширений. [34]

Ссылки [ править ]

  1. ^ Jump up to: Перейти обратно: а б Блэнди 1997, с. 102.
  2. ^ Jump up to: Перейти обратно: а б «Выпущен GNU Guile 3.0.9» . gnu.org.
  3. ^ «Коварство GNU (О коварстве)» . Проект ГНУ. Guile — это вездесущий интеллектуальный язык расширений GNU, официальный язык расширений для операционной системы GNU.
  4. ^ «Стандарты кодирования GNU, какие языки использовать» . Проект ГНУ.
  5. ^ Jump up to: Перейти обратно: а б «Руководство Guile, Справочник по API» . Проект ГНУ.
  6. ^ Jump up to: Перейти обратно: а б «Руководство по Guile, Модули Guile» . Проект ГНУ.
  7. ^ «Чтобы стимулировать настройку, Guile предоставляет обширные интерфейсы, позволяющие коду C взаимодействовать с миром Scheme. Код C может свободно создавать, получать доступ и изменять объекты Scheme; функции C могут вызывать функции Scheme и наоборот; код C может добавлять новые типы в мир Scheme и воспользоваться преимуществами сборки мусора Guile… Большинство стандартных процедур Scheme реализованы функциями C, видимыми для клиентов Guile, например, приложения могут вызывать функцию C; scm_cons, который является базовой реализацией процедур Scheme cons.» Блэнди 1997, стр. 94, 96.
  8. ^ «Приложения, использующие Guile» . Проект ГНУ. Архивировано из оригинала 24 ноября 2017 г.
  9. ^ «Несовместимость R7RS (Справочное руководство Guile)» . Проект ГНУ . Проверено 20 января 2020 г.
  10. ^ Бланди 1997, с. 87.
  11. ^ «Руководство по хитрости, Массивы» . Проект ГНУ.
  12. ^ «Руководство по коварству, СЛИБ» . Проект ГНУ. SLIB не входит в дистрибутив Guile, но может быть установлен отдельно.
  13. ^ «Поскольку Guile позволяет сторонним функциям и функциям Scheme свободно вызывать друг друга, продолжение Guile может включать в себя кадры стека как C, так и Scheme. Для простоты реализация Guile call/cc копирует весь стек C в кучу; вызов продолжения копирует стек обратно из кучи и использует метод longjmp функцию, чтобы повторно активировать ее. Эта реализация имеет ряд недостатков...», Blandy 1997, стр. 99.
  14. ^ «Руководство по коварству, Продолжение» . Проект ГНУ.
  15. ^ «Руководство по коварству, консервативный GC» . Проект ГНУ.
  16. ^ «Руководство по коварству, История» .
  17. ^ "Трудно определить, кто разработал Guile. Большая часть заслуг, несомненно, принадлежит Обри Джафферу, чей превосходный интерпретатор Scheme, SCM, составляет ядро ​​реализации. Система модулей была спроектирована и построена Майлзом Бейдером…" "An Анатомия хитрости, Интерфейс к Tcl/Tk", 1995 г.
  18. ^ «Вот очень, очень краткая история этого интерпретатора. Я надеюсь, что люди, участвовавшие в его прошлом, внесут больший вклад в этот документ. SIOD: Джордж Карретт написал SIOD, самую раннюю версию. Хотя большая часть этого кода была переписана или заменена со временем сборщик мусора из SIOD по-прежнему остается важной частью SIOD, он по-прежнему активно развивается и доступен бесплатно. Коварная схема 1995.
  19. ^ «Имя Guile было впервые предложено Ли Томасом в обсуждении в Usenet». Коварная схема 1995.
  20. ^ Ли Томас (4 ноября 1994 г.). «Имя розы» . Группа новостей : gnu.misc.discuss .
  21. ^ «КОЛОВАРСТВО – еще две причины предпочесть его» .
  22. ^ «ГЕЛЬ: Важное изменение имени» .
  23. ^ Архивы войны Tcl
  24. ^ Винго, Энди. «Старые записи в блоге для wingo (начиная с номера 328)» . Адвокато.
  25. ^ «Гиловые новости» . Проект ГНУ. Архивировано из оригинала 28 марта 2014 г.
  26. ^ Лорд, Томас (июль 1995 г.). «Анатомия хитрости. Интерфейс Tcl/Tk» ( PostScript ) . Третий ежегодный семинар Tcl/Tk . Торонто, Онтарио, Канада: Usenix . Проверено 23 ноября 2010 г.
  27. ^ «Руководство по хитрости, другие языки» . Проект ГНУ. Guile по своей сути по-прежнему является схемой, но он пытается поддерживать широкий спектр строительных блоков языка, чтобы другие языки могли быть реализованы поверх Guile.
  28. ^ «Руководство по коварству, Башня компилятора» . Проект ГНУ. Guile определяет башню языков, начиная со Scheme и постепенно упрощая до языков, напоминающих набор команд виртуальной машины.
  29. ^ «Выпущен GNU Guile 2.2.0» . 16 марта 2017 г. Проверено 20 января 2020 г.
  30. ^ «Выпущен GNU Guile 3.0.0» . 16 января 2020 г. Проверено 20 января 2020 г.
  31. ^ «Выпущен GNU Guile 3.0.0» . 16 января 2020 г. Проверено 20 января 2020 г.
  32. ^ «Реализация Re. Elisp?» . Б. Т. Темплтон.
  33. ^ «Будущее Emacs, Guile и Emacs Lisp» .
  34. ^ «12.1 Интеграция GNU Guile» . gnu.org . Проверено 16 марта 2020 г.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2022b8d396499eb82674b71ae9c549b6__1717372980
URL1:https://arc.ask3.ru/arc/aa/20/b6/2022b8d396499eb82674b71ae9c549b6.html
Заголовок, (Title) документа по адресу, URL1:
GNU Guile - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)