Comprehensive Perl Archive Network ( CPAN ) является хранилищем более 250 000 программных модулей и сопутствующая документация для 39000 распределений, написанных на Perl языке программирования более чем 12 000 участников. [1] CPAN может обозначать либо сеть архивов, либо программу Perl, которая действует как интерфейс к сети и как автоматический установщик программного обеспечения (что-то вроде диспетчера пакетов ). Большинство программ на CPAN - это бесплатное программное обеспечение с открытым исходным кодом . [2]
История
CPAN был задуман в 1993 году и работает в сети с октября 1995 года. [3] Он основан на модели CTAN и начался как место для унификации структуры разрозненных архивов Perl. [4]
Роль
Как и многие языки программирования , Perl имеет механизмы для использования внешних библиотек кода, благодаря чему один файл содержит общие процедуры, используемые несколькими программами. Perl называет эти модули . Модули Perl обычно устанавливаются в один из нескольких каталогов , пути к которым указываются в интерпретаторе Perl при его первой компиляции ; в Unix-подобных операционных системах общие пути включают / usr / lib / perl5 , / usr / local / lib / perl5 и несколько их подкаталогов.
Perl поставляется с небольшим набором основных модулей . Некоторые из них выполняют задачи начальной загрузки, такие как ExtUtils :: MakeMaker [5], который используется для создания файлов Makefile для сборки и установки других модулей расширения; другие, такие как List :: Util, [6] , просто широко используются.
Основная цель CPAN - помочь программистам найти модули и программы, не входящие в стандартный дистрибутив Perl. Его структура децентрализована. Авторы поддерживают и улучшают свои собственные модули. Разветвление и создание конкурирующих модулей для одной и той же задачи или цели - обычное дело. Существует сторонняя система отслеживания ошибок, которая автоматически настраивается для любого загруженного дистрибутива, но авторы могут выбрать использование другой системы отслеживания ошибок, такой как GitHub . Точно так же, хотя GitHub является популярным местом для хранения исходного кода для дистрибутивов, он может храниться в любом месте, которое предпочитает автор, или может быть вообще не доступен для всеобщего доступа. Сопровождающие могут предоставлять другим разрешения на обслуживание или прием своих модулей, а разрешения могут быть предоставлены администраторами тем, кто желает принять заброшенные модули. Предыдущие версии обновленных дистрибутивов сохраняются в CPAN до тех пор, пока они не будут удалены загрузчиком, а вторичная зеркальная сеть BackPAN сохраняет дистрибутивы, даже если они удалены из CPAN. [7] Кроме того, полная история CPAN и всех ее модулей доступна в виде проекта GitPAN, [8] что позволяет легко просматривать полную историю всех модулей и упрощает обслуживание форков. CPAN также используется для распространения новых версий Perl, а также связанных проектов, таких как Parrot и Raku .
Состав
Файлы на CPAN называются дистрибутивами . Дистрибутив может состоять из одного или нескольких модулей, файлов документации или программ, упакованных в общий формат архивации, такой как сжатый tar- архив или ZIP- файл. Дистрибутивы часто содержат сценарии установки (обычно называемые Makefile.PL или Build.PL ) и тестовые сценарии, которые можно запустить для проверки правильности работы содержимого дистрибутива. Новые дистрибутивы загружаются на сервер загрузки авторов Perl или на ПАУЗУ (см. Раздел « Загрузка дистрибутивов с ПАУЗой» ).
В 2003 году дистрибутивы начали включать файлы метаданных под названием META. yml с указанием названия дистрибутива, версии, зависимостей и другой полезной информации; однако не все дистрибутивы содержат метаданные. Когда метаданные отсутствуют в дистрибутиве, программное обеспечение PAUSE попытается проанализировать код в дистрибутиве, чтобы найти ту же информацию; это не обязательно очень надежно. В 2010 году была создана версия 2 этой спецификации [9] для использования через новый файл под названием META. json , причем файл формата YAML часто также включается для обратной совместимости .
С тысячами дистрибутивов CPAN должна быть структурирована, чтобы быть полезной. Авторы часто помещают свои модули в естественную иерархию имен модулей Perl (например, Apache::DBI
или Lingua::EN::Inflect
) в соответствии с назначением или доменом, хотя это не является обязательным.
Дистрибутивы модулей CPAN обычно имеют имена в форме CGI-Application-3.1 (где ::, используемый в имени модуля, был заменен тире, а номер версии был добавлен к имени), но это только соглашение ; многие известные дистрибутивы нарушают соглашение, особенно те, которые содержат несколько модулей. Ограничения безопасности предотвращают замену дистрибутива идентичным именем файла, поэтому практически все имена дистрибутивов включают номер версии .
Составные части
Инфраструктура распространения CPAN состоит из всемирной сети из более чем 250 зеркал в более чем 60 странах. [10] Каждое полное зеркало содержит около 31 гигабайта данных. [11]
Большинство зеркал обновляются ежечасно, ежедневно или раз в два дня с главного сайта CPAN. [12] Некоторые сайты являются основными FTP-серверами, которые отражают множество другого программного обеспечения, но другие - это просто серверы, принадлежащие компаниям, которые активно используют Perl. На всех континентах, кроме Антарктиды, есть как минимум два зеркала.
Было написано несколько поисковых систем, чтобы помочь программистам Perl разобраться в CPAN. Официальный поиск
Тестеры CPAN - это группа добровольцев, которые будут загружать и тестировать дистрибутивы по мере их загрузки в CPAN. Это позволяет авторам тестировать свои модули на многих платформах и средах, к которым они в противном случае не имели бы доступа, что способствует повышению переносимости, а также определенному уровню качества. Тестеры дыма отправляют отчеты, которые затем сопоставляются и используются для различных веб-сайтов с презентациями, включая основной сайт отчетов, статистику и зависимости.
Авторы могут загружать новые дистрибутивы в CPAN через Perl Authors Upload Server (PAUSE). Для этого они должны запросить учетную запись PAUSE.
После регистрации они могут использовать веб-интерфейс на pause.perl.org или FTP- интерфейс для загрузки файлов в свой каталог и их удаления. Модули в загрузке будут проиндексированы как канонические только в том случае, если имя модуля не использовалось ранее (предоставление первоочередного разрешения загрузчику), или если загрузчик имеет разрешение на это имя, и если версия модуля выше, чем у любого другого. существующая запись. [15] Это можно указать через веб-интерфейс PAUSE.
CPAN.pm, CPANPLUS и cpanminus
Существует также основной модуль Perl под названием CPAN; обычно он отличается от самого репозитория именем CPAN.pm. CPAN.pm - это в основном интерактивная оболочка, которую можно использовать для поиска, загрузки и установки дистрибутивов. Интерактивная оболочка cpan также предоставляется в ядре Perl и является обычным способом запуска CPAN.pm. После короткого процесса настройки и выбора зеркала он использует инструменты, доступные на компьютере пользователя, для автоматической загрузки, распаковки, компиляции, тестирования и установки модулей. Он также может обновляться.
Попытка заменить CPAN.pm чем-то более чистым и современным, привела к созданию набора модулей CPANPLUS (или CPAN ++). CPANPLUS отделяет внутреннюю работу по загрузке, компиляции и установке модулей от интерактивной оболочки, используемой для выдачи команд. Он также поддерживает несколько расширенных функций, таких как проверка криптографической подписи и отчет о результатах тестирования. Наконец, CPANPLUS может удалить дистрибутив. CPANPLUS был добавлен в ядро Perl в версии 5.10.0 и удален из него в версии 5.20.0.
Более компактная и компактная современная альтернатива этим установщикам CPAN была разработана под названием cpanminus. cpanminus был разработан, чтобы иметь гораздо меньший объем памяти, как это часто требуется в средах с ограниченным объемом памяти, и чтобы его можно было использовать в качестве автономного сценария, так что он мог даже установить себя, требуя, чтобы был доступен только ожидаемый набор основных модулей Perl. Он также доступен из CPAN как модуль App :: cpanminus, который устанавливает cpanm скрипт. Он не поддерживает и не полагается на постоянную конфигурацию, а настраивается только с помощью параметров среды и командной строки. cpanminus не имеет интерактивного компонента оболочки. Он распознает формат cpanfile для указания предварительных условий, что полезно в специальных проектах Perl, которые могут не быть предназначены для установки CPAN. cpanminus также может удалять дистрибутивы.
Каждый из этих модулей может проверять зависимости дистрибутива и рекурсивно устанавливать любые предварительные требования либо автоматически, либо с одобрения отдельного пользователя. Каждый из них поддерживает FTP и HTTP и может работать через брандмауэры и прокси.
Влияние
Опытные программисты Perl часто отмечают, что половина возможностей Perl находится в CPAN. Его назвали приложением-убийцей Perl . [16] Это примерно эквивалент PECL и PEAR для PHP ; PyPI (Python Index Package) хранилище для Python ; RubyGems для Ruby ; КРАН для R ; npm для Node.js ; LuaRocks для Lua ; Maven для Java ; и Hackage для Haskell . Использование CPAN арбитражных пространств имен, режима тестирования и четко определенного стиля документации делает его уникальным.
Учитывая его важность для сообщества разработчиков Perl, CPAN формируется и формируется культурой Perl . Его «самозваный главный библиотекарь», Яркко Хиетаниеми , часто принимает участие в розыгрыше первоапрельских шуток; 1 апреля 2002 г. сайт был временно назван CJAN , где буква «J» обозначала «Java». В 2003 году www.cpan.org
доменное имя было перенаправлено на Matt's Script Archive , сайт, печально известный в сообществе Perl из-за плохо написанного кода. [17] [18] [19]
Некоторые раздачи на CPAN распространяются в шутку. Acme::
Иерархия зарезервирована для шутки модулей; например, Acme::Don't
добавляет don't
функцию, которая не запускает переданный ей код (в дополнение к do
встроенному, который выполняет). Даже вне Acme::
иерархии некоторые модули все еще пишутся в основном для развлечения; один пример Lingua::Romana::Perligata
, который можно использовать для написания программ Perl в подмножестве латиницы.
В 2005 году группа разработчиков Perl, которые также интересовались JavaScript, собрались вместе, чтобы создать JSAN , сеть архивов JavaScript. JSAN - это почти прямой порт инфраструктуры CPAN для использования с языком JavaScript, который на протяжении большей части своего существования не имел сплоченного «сообщества».
В 2008 году, после случайной встречи с администратором CPAN Адамом Кеннеди на конференции разработчиков ПО с открытым исходным кодом, разработчик ядра Linux Расти Рассел создал CCAN, комплексную сеть архивов C. CCAN является прямым портом архитектуры CPAN для использования с языком C .
CRAN, комплексная сеть архивов R, представляет собой набор зеркал, на которых размещаются дистрибутивы языка программирования R , документация и дополнительные расширения. [20]
Администраторы
Адам Кеннеди
Адам Кеннеди - австралийский программист Perl и один из нескольких администраторов CPAN. Под своим идентификатором автора CPAN для ADAMK он поддерживает более 200 распределений модулей на CPAN, что ставит его на первое место в таблице лидеров CPAN. [21] Кеннеди является первым разработчиком более 200 модулей CPAN, многие из которых он позаимствовал у других авторов и включил в свой Открытый репозиторий, доступный для использования любым зарегистрированным автором CPAN. Он часто выступает на конференциях по открытому исходному тексту , таких как OSDC , OSCON и YAPC, а также на хакатонах Perl QA.
Кеннеди разработал несколько важных модулей для языка программирования Perl, особенно в области инструментов для улучшения разработки и построения цепочки инструментов, таких как PPI [22] (парсер Perl), CPAN :: Metrics [23] (генерирует метрики на 16 m + строк кода в CPAN), Portable Perl [24] (он же «Perl на палке») и Padre (Perl IDE) . Он также был ярым сторонником равенства платформ для Perl в Windows и основал как Win32 Perl Wiki, так и дистрибутив Strawberry Perl для Windows.
- PPI
Perl PPI Parser является важным строительным блоком для анализа кода Perl 5, документации и инструментов рефакторинга. Perl :: Critic [25] использует PPI для критики исходного кода Perl по критериям Perl Best Practices ; Padre IDE использует PPI для анализа кода и рефакторинга. Документация PPI ссылается на трюизм, что «только perl (интерпретатор) может анализировать Perl (исходный код)», потому что это динамический язык ; сообщение на PerlMonks представляет собой формальное доказательство. [26]
- Клубничный перл
Strawberry Perl - это двоичный дистрибутив Perl для операционной системы Windows. В отличие от большинства дистрибутивов Perl для Windows, Strawberry Perl также включает в себя компилятор C, инструмент make и некоторые предварительно сконфигурированные модули для улучшения совместимости со средой Windows. Цель этого дистрибутива - предоставить практическую среду для тестирования и использования последних модулей, доступных от CPAN. Ларри Уолл , создатель Perl, одобрил это как хороший порт для Windows. [27]
- Portable Perl (он же «Perl на палочке»)
Portable Perl [28] - это первый дистрибутив Perl, подходящий для установки на портативные устройства флэш-памяти, плееры iPod, мобильные телефоны, камеры и т. Д. Первый выпуск был распространен на флэш-накопителях USB на OSCON 2008. [29] Первоначальная работа над этим проектом была профинансирована. за счет гранта Фонда Perl.
- Обсуждение библиографии
Адам Кеннеди выступал на ряде технических конференций по всему миру, в том числе на OSCON , OSDC , Linux.conf.au и на многочисленных мероприятиях YAPC . Эти беседы включают:
- PITA - смехотворно крупномасштабное тестирование , YAPC :: NA 2006 [30]
- Ничего не может пойти не так , Linux.conf.au 2007 [31]
- Strawberry Perl, Достижение равенства платформ Win32 , OSCON 2008 [32]
- Padre - Perl IDE для нормальных людей , OSDC 2009 [33]
- Текущая работа
Адам переехал в Сан-Франциско , штат Калифорния, США в 2012 году. Он работал в Kaggle с 2012 по 2015 год и начал работать инженером в Apple в 2016 году. [34] В настоящее время он занимает должность менеджера по разработке данных Siri Search в Apple. [35]
Рекомендации
- ^ "Первая страница CPAN" . Проверено 27 января +2016 .
- ^ "Как лицензируются модули Perl и CPAN?" .
Большинство, хотя и не все, модули на CPAN находятся под лицензией GNU General Public License (GPL) или лицензией Artistic ...
- ^ «Хронология Perl и его культуры» .
- ^ "Взлом CPAN" (PDF) .
Я предлагаю нам сотрудничать для создания единой структуры, очень похожей на проект CTAN, который сумел создать коллекцию канонических сайтов для TeX.
- ^ «ExtUtils :: MakeMaker - Создать модуль Makefile - Perldoc Browser» . perldoc.perl.org . Дата обращения 18 ноября 2020 .
- ^ «List :: Util - Выбор подпрограмм общего назначения для работы со списком - Perldoc Browser» . perldoc.perl.org . Дата обращения 18 ноября 2020 .
- ^ «БэкПАН» . Проверено 20 декабря 2019 .
- ^ "Что такое Гитпан?" . 2 декабря 2015 . Проверено 16 ноября +2016 .
- ^ "CPAN :: Мета :: История" . Проверено 20 декабря 2019 .
- ^ "Зеркальная сеть CPAN" . Проверено 16 ноября +2016 .
- ^ «Как отразить CPAN» . CPAN.org . Проверено 15 ноября +2016 .
- ^ «Статус и статистика CPAN» . Проверено 9 мая 2010 года .
- ^ «Конец эпохи: прощаемся с search.cpan.org» . log.perl.org . Проверено 22 мая 2018 .
- ^ «Прощаемся с search.cpan.org» . perl.com . Проверено 26 июня 2018 .
- ^ «Операционная модель ПАУЗА» . Проверено 20 декабря 2019 .
- ^ «Re: Приложения-убийцы в PERL» . Проверено 24 февраля 2013 года .
- ^ «Элементы программирования на Perl» . 12 октября 2000 . Проверено 25 апреля 2013 года .
- ^ «Используйте этот formmail.pl для развлечения и веселья» . 7 августа 2001 . Проверено 25 апреля 2013 года .
- ^ «Архив сценариев Мэтта снова поражает!» . 4 июля 2001 . Проверено 25 апреля 2013 года .
- ^ "Что такое CRAN?" . Проверено 20 декабря 2019 .
- ^ http://thegestalt.org/simon/perl/wholecpan.html
- ^ https://metacpan.org/module/PPI
- ^ https://metacpan.org/module/CPAN::Metrics
- ^ https://metacpan.org/module/Portable
- ^ https://metacpan.org/module/Perl::Critic
- ^ http://www.perlmonks.org/?node_id=663393
- ^ http://www.computerworld.com.au/article/270267/-z_programming_languages_perl?pp=3&fp=&fpid=
- ^ «Архивная копия» . Архивировано из оригинала 21 июля 2011 года . Проверено 30 июня 2009 года .CS1 maint: заархивированная копия как заголовок ( ссылка )
- ^ «Архивная копия» . Архивировано из оригинала 6 июля 2010 года . Проверено 30 июня 2009 года .CS1 maint: заархивированная копия как заголовок ( ссылка )
- ^ http://www.media-landscape.com/yapc/2006-06-26.AdamKennedy/
- ^ http://lca2007.linux.org.au/talk/122.html
- ^ http://en.oreilly.com/oscon2008/public/schedule/detail/2769
- ^ «Архивная копия» . Архивировано из оригинального 24 -го октября 2009 года . Проверено 28 ноября 2009 года .CS1 maint: заархивированная копия как заголовок ( ссылка )
- ^ https://www.linkedin.com/in/adamatalias
- ^ «Спикер Био 2019» .
Внешние ссылки
- Официальный веб-сайт
- MetaCPAN
- Список официальных зеркал CPAN , статус зеркал
- ZCAN - «Дзен комплексных архивных сетей» - документ, целью которого является объяснение того, как и почему удалось добиться успеха CPAN и как его дублировать в аналогичных усилиях. (9 января 2003 г., Яркко Хиетаниеми ).