Jump to content

Курица (Схема реализации)

(Перенаправлено из компилятора Chicken Scheme )
Схема курицы
Логотип для куриной схемы
Интерпретатор Chicken 5.0.0, работающий на macOS
Парадигмы Мультипарадигмальность : функциональная , императивная , мета.
Семья Лисп
Разработано Феликс Винкельманн
Разработчик Куриная команда
Впервые появился 20 июля 2000 г .; 24 года назад ( 20 июля 2000 ) [1]
Стабильная версия
5.4.0 / 16 июля 2024 г .; 20 дней назад ( 16.07.2024 )
Дисциплина набора текста Динамичный , скрытый , сильный
Объем Лексический
Язык реализации Схема , С
Платформа IA-32 , x86-64 , ARM , MIPS , SPARC 64, PowerPC
ТЫ Кроссплатформенность : Windows , Linux , macOS , FreeBSD , NetBSD , OpenBSD , Solaris , AIX , Haiku , Android , iOS.
Лицензия БСД
Расширения имен файлов .скм
Веб-сайт www .call-cc .org Отредактируйте это в Викиданных
Под влиянием
Лисп , Схема

Курица (стилизованная под CHICKEN ) — это язык программирования , в частности, и интерпретатор , реализующий диалект языка программирования Scheme и компилирующий исходный код Scheme в стандарт C. компилятор Он в основном совместим с R5RS и предлагает множество расширений стандарта. Новый стандарт R7RS поддерживается через библиотеку расширений . [2] Chicken — бесплатное программное обеспечение с открытым исходным кодом, доступное по лицензии BSD . Он реализован в основном на Scheme, а некоторые части — на C для повышения производительности или для облегчения встраивания в программы на C.

Цель компании Chicken быстро становится ясной из ее лозунга: « Практическая и портативная система Scheme ».

Основное внимание Chicken уделяется практическому применению Scheme для написания реального программного обеспечения. Scheme хорошо известен своим использованием в учебных программах по информатике и экспериментах с языками программирования, но в бизнесе и промышленности он мало применяется. [3] Сообщество Chicken’s создало большой набор библиотек для выполнения самых разных задач. Wiki Chicken (программное обеспечение, на котором она работает, также является программой Chicken) также содержит список программного обеспечения, написанного на Chicken. [4]

Другая цель Chicken — быть портативным . Путем компиляции в промежуточное представление , в данном случае портативный C (как это делают Gambit и Bigloo ), программы, написанные на Chicken, могут быть скомпилированы для распространенных популярных операционных систем, таких как Linux , macOS , другие Unix-подобные системы, Windows , Haiku и мобильные устройства. платформы iOS и Android . [5] Он также имеет встроенную поддержку кросс-компиляции программ и расширений. [6] что позволяет использовать его на различных платформах встроенных систем .

Как и многие компиляторы Scheme, Chicken использует стандарт C в качестве промежуточного представления . Программа Scheme транслируется на C компилятором Chicken, а затем компилятор C преобразует программу C в машинный код для целевой компьютерной архитектуры , создавая исполняемую программу. Универсальная доступность языка C делает его полезным для этой цели.

Дизайн курицы был вдохновлен статьей 1994 года. [7] Генри Бейкера , который изложил инновационную стратегию компиляции Scheme в C. Программа Scheme компилируется в функции C. Эти функции C никогда не достигают return оператора ; вместо этого они вызывают новое продолжение после завершения. Эти продолжения являются функциями C и передаются в качестве дополнительных аргументов другим функциям C. Они рассчитываются компилятором.

Пока что это суть стиля передачи продолжения . Новая идея Бейкера заключается в использовании стека вызовов C для кучи Scheme. Следовательно, можно использовать обычные операции стека C, такие как автоматическое создание переменных, выделение массивов переменного размера и т. д. Когда стек заполнится (то есть указатель стека достигнет вершины стека), сборка мусора может быть инициирована . Используемая конструкция представляет собой копирующий сборщик мусора, первоначально разработанный Си Джей Чейни, который копирует в кучу все живые продолжения и другие живые объекты. [8] Несмотря на это, код C не копирует кадры стека C, а только объекты Scheme, поэтому не требует знания реализации C.

В целом куча Scheme состоит из стека C в качестве питомника и двух куч, необходимых сборщику мусора поколений. Этот подход обеспечивает скорость стека C для многих операций и позволяет использовать продолжения как простые вызовы функций C. Кроме того, решение Бейкера гарантирует асимптотическое поведение хвостовой рекурсии, как того требует стандарт языка Scheme. Реализация в компиляторе Chicken Scheme даже асимптотически безопасна для пространства .

Ограничения и отклонения от стандарта

[ редактировать ]

Chicken Scheme в основном соответствует R5RS, с некоторыми заметными ограничениями и отклонениями. [9] Совместимость с R7RS предоставляется в виде библиотеки расширений. [2]

Базовая система имеет базовую поддержку символов UTF-8 , однако процедуры индексирования и манипулирования строками не поддерживают UTF-8. Существует библиотека расширений, которая добавляет поддержку полной поддержки UTF-8. [10]

Дополнительное программное обеспечение

[ редактировать ]

У Chicken есть большой репозиторий дополнительных библиотек и программ, называемый яйцами . [11] Эта система очень похожа на RubyGems . [12]

Изначально эти яйца разрабатывались в одном центральном репозитории svn, [13] при этом создание тега автоматически сделает новую версию расширения доступной для загрузки. В настоящее время яйца можно разрабатывать где угодно и под любой системой контроля версий , сохраняя при этом полуавтоматическое управление выпусками при использовании большинства популярных сайтов хостинга кода. [14] Этот метод выпуска не зависит от VCS в том смысле, что пользователю не требуется устанавливать эти системы VCS. Разработчик может размещать где угодно и даже может отказаться от общедоступного контроля версий и распространять только простые архивы.

Для всех выпущенных яиц последняя версия тестируется автоматически в рамках процесса непрерывной интеграции . Существует канонический тестовый сервер , [15] где основная система и все яйца ежедневно тестируются на соответствие самой последней версии разработки (чтобы выявить регрессивные ошибки) и самой последней стабильной версии (чтобы убедиться, что все работает для пользователей стабильной системы). Кроме того, любой может добровольно предоставить возможности для дальнейшего тестирования различного оборудования, операционных систем или основных выпусков.

Chicken поддерживает большую часть стандартной схемы R5RS , но также добавляет несколько нестандартных функций, которые доступны не во всех реализациях схемы.

Интерфейс внешних функций

[ редактировать ]

Компиляция Chicken в C позволяет вставлять собственный код C в скомпилированный результат, что упрощает интеграцию с библиотеками C. Его внешний интерфейс функций поддерживает преобразование туда и обратно между большинством встроенных типов C и соответствующими объектами Scheme.

Кроме того, существуют библиотеки расширений для взаимодействия с Python . [16] Два , [17] и Java через собственный интерфейс Java (JNI). [18] или мост. [19]

Кросс-компиляция

[ редактировать ]

Сравнительно легко скомпилировать код Scheme на другую платформу (например, для встроенного использования в устройстве).

Чтобы сделать кросс-компиляцию кода Scheme возможной, Chicken вводит модель раздельной компиляции: скомпилированный модуль состоит из двух общих библиотек . Одна библиотека содержит фактический код, который будет использоваться во время выполнения (скомпилированный для целевой платформы), а другая представляет собой модуль импорта , который будет использоваться для загрузки кода, который запускается во время компиляции (на хост-платформе), например как процедурный макрокод.

Компилятор Chicken также легко поддается кросс-компиляции. После завершения перевода на C можно просто использовать компилятор C, настроенный для сборки на другой платформе.

Модули и макросы

[ редактировать ]

Начиная с версии 4, Chicken имеет встроенную систему модулей и поддержку низкоуровневых гигиенических макросов посредством явного переименования макросов. [20] (до версии 4 это было доступно через дополнительную библиотеку). стандартные макросы синтаксических правил Также поддерживаются неявного переименования . и макросы [21] что по сути является обратной версией явного переименования.

Этот механизм жертвует производительностью ради удобства. Каждый идентификатор, который явно не указан как негигиеничный, будет автоматически переименован, чтобы избежать захвата имени. Затраты на производительность возникают потому, что неявное переименование требует от макрорасширителя повторного обхода выражений еще два раза. Эта стоимость оплачивается во время расширения, поэтому автор макроса должен учитывать, приемлемо ли более длительное время компиляции.

Удаленный отладчик

[ редактировать ]

Начиная с версии 4.11, Chicken поставляется с отладчиком Feathers . [22] Когда код схемы компилируется с необходимым параметром отладки, события отладки вводятся в определенные точки кода. Они реализованы как вызовы функции C, что требует относительно небольших затрат, если фактически не отлаживать код. При отладке он попытается установить TCP-соединение с серверным процессом Feathers, возможно, на другом компьютере. Процесс останавливается, пользователь может установить точки останова и запустить программу. Затем, когда достигается точка останова, клиент (отлаживаемый процесс) входит в командный цикл, который позволяет опрашивать клиента, считывать переменные или изменять их.

Ограниченный анализ статического типа

[ редактировать ]

Chicken поддерживает локальный анализ потока. Это позволяет компилятору обнаруживать ошибки типов переменных во время компиляции и выполнять специализацию типов. Эта специализация позволяет удалить несколько проверок безопасности для определения типа во время выполнения, когда тип можно определить во время компиляции. Это приводит к улучшению производительности во время выполнения.

Этот анализатор не позволяет выполнять межмодульный анализ потока, поэтому его можно использовать только для оптимизации кода, который является частью одного компилирующего модуля (или модуля).

Схема CHICKEN была первоначально разработана Феликсом Винкельманном для Cygwin /gcc, а затем для Visual C++ 5.0 в Windows 98 . [1] Он придумал название «КУРИЦА» произвольно, как «первое, что пришло мне на ум в тот день», думая о пластиковой игрушке Фезерса МакГроу на своем столе. По мере того, как проект созревал, он решил не менять название из суеверия. [23]

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б Винкельманн, Феликс. «Анонс компилятора Chicken Scheme-to-C» . Группы Google (comp.lang.scheme) .
  2. ^ Перейти обратно: а б Евхан (09.11.2018). «r7rs (Руководство по курице)» . Схема курицы . Проверено 28 февраля 2019 г.
  3. ^ «Схема FAQ» . , раздел "Для чего используется Схема?"
  4. ^ Бекс, Питер (шамаан) (16 августа 2018 г.). «Программное обеспечение, написанное на Chicken Scheme» . Схема курицы . Проверено 26 февраля 2019 г.
  5. ^ «Мобильность» . Схема курицы вики .
  6. ^ Бекс, Питер (шамаан) (28 мая 2016 г.). «Перекрестное развитие» . Схема курицы (вручную) . Проверено 26 февраля 2019 г.
  7. ^ Бейкер, Генри (1994). «CONS не должен аргументировать CONS, Часть II: Чейни о MTA» . Архивировано из оригинала 3 марта 2006 г.
  8. ^ Чейни, CJ «Нерекурсивный алгоритм сжатия списка». CACM 13,11 (ноябрь 1970 г.), 677-678.
  9. ^ Бекс, Питер (шамаан); Винкельманн, Феликс (28 мая 2016 г.). «Подтвержденные отклонения (Руководство по курице)» . Схема курицы . Проверено 28 февраля 2019 г.
  10. ^ Бекс, Питер (шаман); кодер; Марио; свнвики; лечить; ли; Марио (11 августа 2018 г.). "utf8 (Руководство по курице)" . Схема курицы . Проверено 28 февраля 2019 г.
  11. ^ «Куриные яйца» . Схема курицы .
  12. ^ «РубиДжемс» . RubyGems.org . Проверено 26 февраля 2019 г.
  13. ^ Бекс, Питер (шамаан). «Независимое от VCS распространение языковых расширений» . , запись в блоге «Больше волшебства»
  14. ^ «Инструкции для популярных методов размещения кода и систем контроля версий» . Куриная вики .
  15. ^ «Куриные автоматизированные тесты» . Схема курицы . Проверено 28 февраля 2019 г.
  16. ^ ирайков (11.06.2016). «пиффи» . Схема курицы вики . Проверено 3 марта 2019 г.
  17. ^ Бекс, Питер (шаман); ирайков (11 марта 2012 г.). "Убирайся" . Схема курицы вики . Проверено 3 марта 2019 г.
  18. ^ Марио; свнвики (04.06.2013). «ДжНИ» . Схема курицы вики . Проверено 3 марта 2019 г.
  19. ^ Винкельманн, Феликс; Марио (04.06.2013). «Явахак» . Схема курицы вики . Проверено 3 марта 2019 г.
  20. ^ Бекс, Питер (шамаан); Винкельманн, Феликс; Марио (23 сентября 2018 г.). «Модуль (Куриный синтаксис)» . Схема курицы . Проверено 28 февраля 2019 г.
  21. ^ Бекс, Питер (шамаан); Винкельманн, Феликс; Марио (23 сентября 2018 г.). «Модуль (Куриный синтаксис)» . Схема курицы . Проверено 28 февраля 2019 г.
  22. ^ Бекс, Питер (шамаан) (25 ноября 2018 г.). «Отладка» . Схема курицы .
  23. ^ Круасан, Джон (19 июня 2013 г.). «За кулисами CHICKEN Scheme и СПОКА (Часть 2)» . Атомный спин . Проверено 17 февраля 2023 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7f8f3de3d9d41412c6228575cb501ede__1721100900
URL1:https://arc.ask3.ru/arc/aa/7f/de/7f8f3de3d9d41412c6228575cb501ede.html
Заголовок, (Title) документа по адресу, URL1:
Chicken (Scheme implementation) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)