~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ FAD19894CD2E549D4DB36FB49D51FACA__1680671400 ✰
Заголовок документа оригинал.:
✰ Chicken (Scheme implementation) - Wikipedia ✰
Заголовок документа перевод.:
✰ Курица (Схема реализации) — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Chicken_(Scheme_implementation) ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/fa/ca/fad19894cd2e549d4db36fb49d51faca.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/fa/ca/fad19894cd2e549d4db36fb49d51faca__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 09:29:53 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 5 April 2023, at 08:10 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Курица (Схема реализации) — Википедия Jump to content

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

Из Википедии, бесплатной энциклопедии
Схема курицы
Логотип для куриной схемы
Интерпретатор Chicken 5.0.0, работающий на macOS
Парадигмы Мультипарадигмальность : функциональная , императивная , мета.
Семья Лисп
Разработано Феликс Винкельманн
Разработчик Куриная команда
Впервые появился 20 июля 2000 г .; 23 года назад ( 20 июля 2000 ) [1]
Стабильная версия
5.3.0 / 18 ноября 2021 г .; 2 года назад ( 18.11.2021 )
Дисциплина набора текста Динамичный , скрытый , сильный
Объем Лексический
Язык реализации Схема , С
Платформа 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 (Руководство по курице) " курицы Схема Получено 2 февраля 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
Номер скриншота №: FAD19894CD2E549D4DB36FB49D51FACA__1680671400
URL1:https://en.wikipedia.org/wiki/Chicken_(Scheme_implementation)
Заголовок, (Title) документа по адресу, URL1:
Chicken (Scheme implementation) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)