The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Релиз языка программирования Perl 5.22.0

03.06.2015 06:43

После года разработки представлена новая стабильная ветка языка программирования Perl - 5.22. При подготовке нового выпуска было изменено около 590 тыс. строк кода, изменения затронули 2400 файлов, в разработке приняли участие 94 разработчика.

Ветка 5.22 выпущена в соответствии с утверждённым четыре года назад фиксированным графиком разработки, подразумевающим выпуск новых стабильных веток раз в год и корректирующих релизов - раз в три месяца. Примерно через месяц планируется выпустить первый корректирующий релиз Perl 5.22.1, в котором будут исправлены наиболее значительные ошибки, выявленные в процессе внедрения Perl 5.22.0. Одновременно с выходом Perl 5.22 прекращена поддержка ветки 5.18, для которой в будущем могут быть выпущены обновления только в случае выявления критических проблем с безопасностью. Также начался процесс разработки экспериментальной ветки 5.23, на базе которой в мае 2016 года будет сформирован стабильный релиз Perl 5.24.

Ключевые улучшения, добавленные в Perl 5.22:

  • Модули CGI и Module::Build исключены из стандартной поставки и более не поставляются вместе с интерпретатором perl в базовой стандартной сборке. Они могут быть установлены из CPAN в случае необходимости.
  • Новый двойной ромбовидный оператор: "<<>>", работает как "<>" с той лишь разницей, что использует трёхаргументный вызов функции open() для открытия файлов из массива @ARGV, т.е. не обрабатывает спецсимволы в именах файлов. Новый оператор позволят блокировать возможные атаки, связанные с обработкой спецсимволов в именах файлах, например, указание "|foo" не приведёт к открытию неименованного потока и запуску программы "foo";
  • Новая экспериментальная возможность задания алиасов для переменных и подпрограмм через указатели указателей: \\$c = \\$d и \\&x = \\&y. В том числе можно сразу создать алиас в цикле foreach, например, после указания "foreach \\%hash (@array_of_hash_refs){" хэши можно перебирать через "foreach my $key ( keys %hash )". Варианты использования и детали в perlref, секция "Assigning to References".
  • Новый модификатор регулярного выражения "/n" отключает переопределение и заполнение позиционных скаляров $1, $2 и т.п., но при этом сохраняет возможность отрицания на групповой оператор, и сохраняется именованное заполнение. Например, указание "/(hi|hello)/n" не приведёт к заполнению $1. Детали о модификаторе "/n" в perlre.
  • Введен обсуждаемый ранее новый атрибут ":const", который может быть применен к анонимным функциям, что приведёт к немедленному выполнению подпрограммы в месте её определения с последующей подстановкой сохранённого результата в моменты обращений к ней в коде. Атрибут имеет экспериментальный статус. Детали perlsub, секция "Constant Functions".
  • Схема с оператором повторения "x" ("(...) x ...") может быть использована в присвоениях к списку. Например, конструкция "(undef,undef,$foo) = that_function()" теперь может быть задана в форме "((undef)x2, $foo) = that_function()". Особенно полезно использование данной возможности при заполнении переменных оператором split, например, вместо серии undef можно написать "my(undef, $card_num, (undef)x3, $count) = split /:/;"
  • Новые экспериментальные битовые операторы для работы со строками по аналогии работы с числами: "&." "|." "^." "~." "&=" "|=" "^=" "&.=" "|.=" "^.=". Детали доступны в документации perlop секции "Bitwise String Operators";
  • Новые операторы "\\b" регулярных выражений: "qr/\\b{gcb}/" , "qr/\\b{wb}/" , "qr/\\b{sb}/", определяющие границу между последовательностями символов (которые выглядят как один символ), словами (например, содержащими апостроф) и предложениями. Детали доступны в описании регулярных масок "\\b{}", "\\b", "\\B{}", "\\B" в perlrebackslash.
  • Новая директива "use re 'strict'", которая применяет более строгие правила для компиляции регулярного выражения в текущей области видимости.
  • Поддержка Unicode 7.0.
  • Директиве "use locale" теперь можно передать параметр для выборочного задания категорий локализации, на которые будут отражаться свойства локали. Детали в perllocale.
  • В возвращаемых значениях вызова POSIX::localeconv() появились новые поля int_p_cs_precedes, int_p_sep_by_space, int_n_cs_precedes, int_n_sep_by_space, int_p_sign_posn, int_n_sign_posn, реализованные в соответствии с POSIX.1-2008;
  • Улучшен эвристический анализатор для обнаружения UTF-8 в текущей локали. Эвристика работает на платформах, которые не реализуют ни один из стандартов (С99 и/или POSIX 2001).
  • Закрыта проблема, связанная с вызовом prototype() без параметра. Теперь используется скаляр $_;
  • Вызов fileno() теперь работает с дескрипторами директорий. Поведение filen на дескрипторе директории зависит от операционной системы. Детали доступны в описании вызова по perldoc -f fileno.
  • Для платформы Win32 завершена реализация формы организации неименованного канала через вызовы open my $fh, "-|", "program", @arguments'.
  • Дробные числа теперь могут хранить специальные значения неопределенностей: бесконечность, отрицательную бесконечность и значение "не число" NaN. Детали в perldata.
  • Доработаны вывод и разбор дробных чисел. Добавлена поддержка hex-форм в виде "0x1.23p-4" и введен формат "%a" для printf. Подробности в perldata, секция "Scalar value constructors".
  • Упаковка беконечностей (Inf) и "не чисел" (NaN) в символ (вызовами pack, "chr" и printf "%c") теперь завершается ошибкой.
  • Появилась новая опция сборки usecbacktrace (./Configure -Dusecbacktrace) которая позволяет из perl-кода выполнить трассировку стека и получить си-фреймы из perl-кода, путем использования API уровня Си-кода. Работает на платформах Linux и OS X, возможна работа на *BSD. Детали в perlhacktips, секция "C backtrace".
  • Безопасность:
    • Perl по умолчанию собирается с -fstack-protector-strong если это возможно.
    • Модуль Safe обновлен до версии 2.38, которая закрывает критическую уязвимость, позволяющую заменить внешнее пространство имен.
    • Perl по умолчанию собирается с -D_FORTIFY_SOURCE=2 если это возможно.
  • Несовместимые изменения:
    • Изменен позиционный порядок введенной в v5.20 экспериментальной возможности определения сигнатуры подпрограммы. Теперь сигнатура может быть задана до атрибутов (в v5.20 сигнатуры можно определить лишь после атрибутов).
    • Прототипы "&" и "\\&" теперь принимают только анонимные функции (sub {...}).
    • По уровню действия директива "use encoding" теперь является лексической.
    • Срез списка теперь может вернуть пустой список только в случае если исходный список был пустым;
    • Ранее объявленная устаревшей (в v5.18) форма записи "\\N{}" с последовательностью из множества пробелов теперь приводит к ошибке: "\\N{TOO MANY SPACES}" or "\\N{TRAILING SPACE}.
    • Ранее объявленная устаревшей (в v5.12) возможность импорта функции через use UNIVERSAL '...' теперь приводит к ошибке. Форма поведения "use UNIVERSAL" без аргументов осталась неизменной.
    • Символы "X" в двойных кавычках в форме "\\cX" теперь должны быть печатными ASCII-символами (printable ASCII character). Ранее допускались непечатаемые символы, но с выводом предупреждения.
    • Ранее объявленная устаревшей (в v5.18) возможность разделения управляющих конструкции "(?" и "(*" регулярного выражения теперь приводит к фатальной ошибке.
    • Под модификатором "/x" в регулярном выражении в комментариях теперь игнорируются все Unicode-побелы, включая U+0085, U+200E, U+200F, U+2028 и U+2029. !!!!! Начиная с v5.18 данное поведение было объявлено устаревшим, и задание в регулярном выражении этих символов без экранирования вне квадратных скобок приводило к выводу предупреждения.
    • Изменение поведения введенной в v5.18 экспериментальной формы "(?[...])" которая позволяет задать форматирование в регулярном выражении (сходно с действием модификатора "/x"). Теперь конец строки коментария ("#-строка") определяется исключительно по символу "\\n" (ранее qr[\\R]).
    • В введенной в v5.18 экспериментальной форме регулярного выражения "(?[...])", которая позволяет записать выражение для выполнения операции над множествами (бинарные &,+,|,-,^ и унарный !), изменен приоритет операторов, и теперь он следует совпадает с системой приоритетов принятой в perl (man perlop). Детали в секции "Extended Bracketed Character Classes" в документации perlrecharclass.
    • Ранее объявленное устаревшим (в v5.000, 1994 год) поведение, позволявшее пропускать спецификаторы "%" в именах хэшей и "@" в именах массивов, в некоторых случаях более не допускается.
    • Текст переменной "$!" теперь сохраняется на английском языке, если в текущей области видимости не задействована директива "use local". Отказ от ранее принятой более сложной эвристической схемы произошел из-за того, что в некоторых случах пользователи могут получить нечитаемый текст.
    • Строки "$!" и $^E теперь будут содержать установленный флаг UTF-8 в случаях когда текст не является ASCII UTF-8 [perl #112208].
    • Ранее объявленная устаревшей (в v5.14.0) альтернативная форма конструкции "m?PATTERN?" в виде "?PATTERN?" теперь приводит к синтаксической ошибке.
    • Ранее объявленные устаревшей (в v5.6.1, 2000 год) конструкции "defined(@array)" and "defined(%hash)" теперь также приводит к ошибке;
    • Ранее объявленные устаревшими (в v5.8, 2002 год) формы косвенной адресации через хэши и массивы (например %foo->{"bar"}) теперь приводят к ошибке компиляции.
    • Изменение поведения "*" в прототипе функции когда присутствует неоднозначность: форма вызова с функцией теперь является более приоритетной, в остальных случаях прежнее поведение сохраняется.
  • Устаревшие и нежелательные формы использования и конструкции (deprecations):
    • Использование введенной в v5.8.2 переменной "${^ENCODING}".
    • Использование непечатаемых (non-graphic, invisible) символов в именах переменных длиной в один символ.
    • Инлайнинг (inlining) переменных анонимных функции, имеющих пустой прототип ("sub ()") в замыканиях. Конструкция при которой происходит встраивание (inlining) переменной, которая является потенциально изменяемой, приводит к выводу предупреждения.
    • Множественное задание модификатора "/x" в регулярном выражении (qr/foo/xx, use re qw(/amxx), ..).
    • Использование "NO-BREAK SPACE" в форме "\\N{...}".
    • Анонсированное в v5.16 литеральное использование "{" в регулярном выражении теперь следует либо записывать в экранированной форме "\\\\{", либо заключить в квадратные скобки "[{]", либо использовать в теле оператора экранирования "\\\\Q" нелитеральных символов. В противном случае будет выдано предупреждение.
    • Не рекомендуется к использованию форма "use warnings FATAL => ''all''".
  • Производительность:
    • Известные имена классов и методы на фазе компиляции приводят к более быстрому исполнению кода. Составные формы вызова, такие как SUPER::new, аналогичным образом обрабатываются на фазе компиляции если это возможно.
    • Значительное ускорение обращения к массивам и хэшам (особенно к вложенным формам) в случаях когда в качестве ключа используется простая переменная или константа.
    • Конструкции "(...)x1", "("constant")x0" и "($scalar)x0 оптимизированы для исполнения в списочном контексте.
    • Оптимизация 4-х аргументной (с присвоением) формы вызова "substr".
    • Ускорение исполнения "\\\\L...", "\\\\Q...", и т.п. (the extra "stringify" op)
    • Присвоение на пустой список теперь может завершиться быстрее в некоторых случаях.
    • Повышение производительности до 20% на вызовах "length" в некоторых случаях при обращении к связанным (tied) переменным.
    • Уменьшение потребления памяти скаляра на хранение 64-битных чисел в вещественной форме.
    • Оптимизировано исполнение "@array = split".
    • Вызов "join" может быть оптимизирован (свернут, folding) за счет вычисления на фазе компиляции.
    • Реализована возможность ускоренния исполнения конструкции "qq(@array)".
    • Выражения "our $var" и "our($s,@a,%h)" более не обрабатываются на фазе исполнения. Аналогичным образом пропускается обработка последовательностей "our $foo". Оптимизация также применена и по отношению к статическим (state) переменным.
    • Многие внутренние функции переработаны с целью улучшения производительности и уменьшения потребления памяти.
    • Ускорена работа файлтест-вызовов "-T" и "-B" на пустом файле.
    • Реализована более быстрая схема поиска в хэше если в качестве ключа используется константа.
    • Функции с пустым прототипом и телом, содержащим лишь "undef", теперь могут быть свернуты.
    • Оптимизировано потребление памяти на содержание функции в его скомпилированной форме.
    • Оптимизация исполнения utf8::native_to_unicode() и utf8::unicode_to_native() (модуль utf8) на ASCII-платформах.
    • Win32 perl теперь использует на 8KB меньше памяти на процесс за счет маппинга данных с дисковой памяти двоичного exe-образа perl на оперативную с ее последующим разделением (sharing) между процессами.
  • Обновление модулей и директив. Полный список обновленных модулей и их актуальные версии поставляемые вместе с perl обновленные с версии v5.20.0 к выпуску версии v5.22.0 можно получить, выполнив команду "corelist --diff 5.20.0 5.22.0"
    • Модуль attributes обновлён до версии 0.27. Закрыты проблемы с использованием memEQs в XS-подсистеме и возможностью чтения данных за границей буфера.
    • Обновлен бэкенд компилятора perl - модуль B до версии 1.58 и связанные с ним модули: B::Concise => 0.996, B::Deparse => 1.35, добавлен B::Op_private. Исправлено множество ошибок в модуле B::Deparse.
    • Модуль constant обновлён до версии 1.33. Начиная с версии 1.32 при объявлении констант можно задавать полностью квалифицированное имя константы, что позволяет оперировать константами вне текущего пакета. Кроме того, имена констант начинающиеся с двойных символов подчеркивания заявлены как зарезервированные и не рекомендуются к использованию. Объявление таких констант приведет к выводу предупреждения на фазе компиляции если установлен соответствующий режим исполнения.
    • Data::Dumper обновлён до версии 2.158. Закрыта уязвимость CVE-2014-4330.
    • Модуль Fcntl обновлён до версии 1.13. Реализована возможность взаимодействия с каналами в Linux (операции над pipe, команды F_SETPIPE_SZ и F_GETPIPE_SZ).
    • HTTP::Tiny обновлен до версии 0.054. Использование keep_alive теперь безопасно для работы с fork и потоками (fork-safe, thread-safe).
    • Коллекция модулей libnet обновлена до версии 3.05. Поддержаны IPv6 и SSL для "Net::FTP", "Net::NNTP", "Net::POP3" and "Net::SMTP". Усовершенствована "Net::SMTP" аутентификация.
    • Модуль POSIX обновлен до версии 1.53. Поддержаны математические функции и константы стандарта С99 (такие как "acosh", "isinf", "isnan", "round", "trunc"; "M_E", "M_SQRT2", "M_PI"). Вызов POSIX::tmpnam() теперь выводит предупреждение о том что его использование объявлено устеревшей (deprecation warning).
    • Обновлен модуль Win32. Вызов GetOSName() теперь поддерживает Windows 8.1. Обеспечена возможность сборки модуля в режиме C++.
    • Модуль Win32API::File обновлен до версии 0.1202. Обеспечена возможность сборки модуля в режиме C++.
    • XSLoader обновлен до версии 0.20. Появилась возможность загрузки модулей из разных пространств имён.
  • Изменения утилит perl:
    • Исключение директории "x2p/" из perl привело к удалению утилит find2perl, s2p and a2p. Данные утилиты теперь развиваются как отдельные приложения доступные из CPAN "App::find2perl", "App::s2p", "App::a2p".
    • Утилита h2ph теперь может обрабатывать hex-константы в макросах, задаваемых компилятору
    • Утилита encguess более не зависит от модулей не входящих в стандартную поставку perl (non-core)
  • Поддержка платформ:
    • Восстановлена работоспособность perl в ОС IRIX, Tru64 и z/OS.
    • Прекращена поддержка unix-подобной платформы NeXTSTEP/OPENSTEP в связи с их историчностью (последний выпуск NeXTSTEP был в 1995 году)
    • Cущественные улучшение процесса сборки на платформах: EBCDIC, HP-UX, Android (кросс-сборка), VMS, Win32, OpenBSD и Solaris.
  • Обновлена и дополнена pod-документация, система диагностики (директива diagnostics) и система предупреждений (warnings). Добавлены новые опции для конфигурирования и сборки perl, доработана и дополнена система тестирования.
  • Известно, что выход perl v5.22.0 привел к тому, что сборка некоторых модулей стала невозможной из-за ошибок на этапе тестирования. В связи с этим ожидается обновление следующих модулей:
    • B::Generate => 1.50
    • B::Utils => 0.25
    • Coro => 6.42
    • Dancer => 1.3130
    • Data::Alias => 1.18
    • Data::Dump::Streamer => 2.38
    • Data::Util => 0.63
    • Devel::Spy => 0.07
    • invoker => 0.34
    • Lexical::Var => 0.009
    • LWP::ConsoleLogger => 0.000018
    • Mason => 2.22
    • NgxQueue => 0.02
    • Padre => 1.00
    • Parse::Keyword 0.08

Некролог. 8 мая 2015 года сообщество perl лишилось одного из активных участников Brian McCauley. Он был одним из активных публицистов в Usenet, Perl Monks и других тематических форумах, посвященных языку программирования perl. Он опубликовал ряд своих работ под псеводнимом NOBULL в хранилище CPAN, принял участие в развитии Perl FAQ. Он посещал большинство конференций YAPC::Europe, и помог в организации YAPC::Europe 2006 и QA Hackathon 2009. Perl-сообщество скорбит в связи с потерей талантливого активиста.

  1. Главная ссылка к новости (http://perlnews.org/2015/06/pe...)
Автор новости: Аноним
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/42349-perl
Ключевые слова: perl
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (66) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.4, Аноним (-), 09:42, 03/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    Респект за такое подробное описание.
     
     
  • 2.7, Аноним (-), 09:50, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +8 +/
    >  Респект за такое подробное описание.

    Не за что, мне и самому было очень интересно узнать о perl 5.22. Разбирая не знакомые мне ранее конструкции я узнал немало интересного и нового.

     
     
  • 3.8, Аноним (-), 10:00, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +8 +/
    > Не за что, мне и самому было очень интересно узнать о perl 5.22. Разбирая не знакомые мне ранее конструкции я узнал немало интересного и нового.

    Кроме того, я должен выразить благодарность тому и тем кто подкорректировал и немного дополнил мое первоначальное сообщение тем как опубликовать новость здесь. Редактура отработала на высоте, а я принал ко вниманию.
    Спасибо.

     

  • 1.10, S. (?), 10:22, 03/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    вчера весь вечер разбирал ужасный перл код какого-то то ли индуса, то ли китайца

    матерился адски: ничего не понятно

    потом выяснилось, что код написан мной, месяц назад

     
     
  • 2.12, Филимон Утренний (?), 10:27, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +15 +/
    > потом выяснилось, что код написан мной, месяц назад

    И не на Perl ?

     
     
  • 3.15, annualslayer (ok), 10:55, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +7 +/
    да и не код вовсе, а ридми
     
     
  • 4.32, Kodir (ok), 13:31, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    причём на суахили.
     
  • 2.13, Аноним (-), 10:32, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Вот-вот, накодят задницей, а потом им perl виноват.
     
  • 2.14, Аноним (-), 10:32, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я думаю вам не стоило рекламировать свой уровень навыков По ситуации определе... большой текст свёрнут, показать
     
  • 2.16, Moomintroll (ok), 10:55, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > потом выяснилось, что код написан мной, месяц назад

    http://lurkmore.to/%D0%92%D1%8B%D1%81%D1&#

    «Perl: Вы стреляете себе в ногу, и никто не может понять, как вы сделали это. Через шесть месяцев не можете и вы.»

     
  • 2.19, Аноним (-), 11:31, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +4 +/
    >вчера весь вечер разбирал ужасный перл код какого-то то ли индуса, то ли китайца
    >
    >матерился адски: ничего не понятно
    >
    >потом выяснилось, что код написан мной, месяц назад

    Я так и не понял. Ты индус или китаец?

     
     
  • 3.36, Аноним (-), 17:18, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Он перловщик. Тех хотя бы можно простить ...
     
     
  • 4.48, Аноним (-), 12:56, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Он перловщик. Тех хотя бы можно простить ...

    Нет, он - кретин. Вы похоже никогда сталкивались с настоящими perl-программистами.

     

  • 1.17, Аноним (-), 11:09, 03/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Лично я давно ожидал:
    - оператор "<<>>" в perl, очень удобно для всяких однострочников и для написания фильтров обработки потоковых данных когда нужно на входе забирать список файлов
    - алиасы через указатели
    - работу с константами другого пакета через его полное имя

    Еще очень интересно развитие возможности задания сигнатуру функции и атрибута ':const'.

     
  • 1.18, Ydro (?), 11:15, 03/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Новый релиз Perl(a) всё равно, что новость о успешной реализации криогенной заморозки человека.
     
     
  • 2.70, Аноним (-), 16:01, 05/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Очередное достижение в науке и технике? Да, что похожее есть.
     

  • 1.20, the joker (ok), 11:44, 03/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Надо бы его, наконец, выучить...
     
     
  • 2.23, Аноним (-), 12:01, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Не учить его нужно, а понять его. Если вы разберетесь в нем то поймете что он на самом деле он очень прост, логичен и лаконичен. Попытка выучить perl влоб без желания понять (это как выучить физику, а не понять ее) обычно заканчивается очень плачевно..
     
  • 2.25, Andrey Mitrofanov (?), 12:27, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Надо бы его, наконец, выучить...

    "Завещать детям выучить язык." [Пусть мучаются.]

     
  • 2.29, Аноним (-), 13:21, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Чтение 2х man'ов perlfunc/perldata - и забудешь написание башевых портянок как страшный сон. Ещё до кучи: https://metacpan.org/pod/Shell
     
     
  • 3.31, Аноним (-), 13:30, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Ещё до кучи: https://metacpan.org/pod/Shell

    Про shell не знал, но знаком с этим: https://metacpan.org/pod/PerlPowerTools

     
  • 3.42, Crazy Alex (ok), 20:13, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Истинная правда. Для писания самопальных скриптов он великолепен, и осваивается быстро. А больше от скриптового языка, в общем, и не требуется.
     
     
  • 4.43, chinarulezzz (ok), 20:28, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И тем не менее, для написания сложных программ всё в perl/cpan имеется. Например, есть ли в каком скриптовом языке профайлер уровня NYTProf, или доступ к компилятору кода, или синтаксическому дереву?
     
     
  • 5.44, Crazy Alex (ok), 22:40, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да я, в общем-то, на перле писал несколько лет full time, так что в курсе и с плюсами/минусами знаком хорошо. Именно поэтому что-то большое на нём делать не рвусь. Кстати, B почти весь выкинули по причине устаревания, насколько я помню. И поверьте - в большом проекте очень нежелательно извращаться с генерацией кода на ходу или модификацией ST - это ж потом ещё и поддерживать надо будет.

    В общем, не то чтобы для больших проектов перл подходил хуже, чем, скажем, JS или питон, но всё же для этого есть более подходящие языки - хотя бы плюсы те же, или Си на худой конец (на котором я пишу сейчас, если что - так что насчёт "худого конца" - из личного опыта). В перле либо надо брать какой-нибудь Moose, тормозной до неприличия, либо самому что-то колхозить и потом очень жестко следить за стилем, обвешиваться тестами как новогодняя ёлка - игрушками... В общем, много совсем лишней мороки, от которой компилируемый (и статически типизированный) язык избавляет.

    А вот чтобы быстро наваять пришедшее в голову извращение - CPAN - идеален, наверняка все кубики найдутся и можно будет их сравнительно просто слепить в кучу. Для продакшна же разговор совсем другой - качество кода очень варьирует, смотреть надо. В половине там такое легаси... чуть ли не из четвертой версии, вешаться можно.

     
     
  • 6.46, Аноним (-), 02:39, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > В перле либо надо брать какой-нибудь Moose

    зачем?

    > либо самому что-то колхозить

    зачем?

    > потом очень жестко следить за стилем
    > обвешиваться тестами

    Это хорошая идея безотносительно языка.

    > В общем, много совсем лишней мороки, от которой компилируемый (и статически типизированный) язык избавляет.

    и что же это за идеальный язык со сравнимой скоростью разработки? Имя, сестра! (вобщем-то я за статическую типизацию, но это не серебряная пуля)

     
     
  • 7.50, Crazy Alex (ok), 18:30, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Затем, что сам по себе перл допускает очень много свободы и соблазнов. Для скрипта или для гения-одиночки - это хорошо. Для команды, в которой люди время от времени меняются и должны понимать и поддерживать код предшественников - плохо. Поэтому берётся некий стандарт, чтобы не гадать, каким из восьмидесяти путей сделано что-то тривальное вроде наследования - изобретательность лучше использовать там, где она нужна.

    Насчёт тестов - это хорошая идея, но тесты по сравнению с проверками компилятора дороги. И когда тестами надо проверять то, проверку чего можно захардкодить (типы те же) - это бесполезная трата времени разработчика.

    Идеальных языков как-то не встречал. А вот более пригодных для продакшна - валом. Сравнимую скорость разработки можно хоть на джаве (гадость-то какая) получить, хоть на плюсах (которые я и предпочитаю), это если о мейнстриме говорить. C# тот же хорош как язык, если отвлечься от того, что он MS-овская поделка. Что в скорости изначальной писанины потеряете - то на отладке и поддержке десятикратно вернёте. Ну или модный Go или менее модный D - там уже и изначально пишется быстро.

     
     
  • 8.51, rob pike (?), 19:04, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Ну вот и что у вас в результате получается, если переформулировать - Perl плохо ... текст свёрнут, показать
     
     
  • 9.54, Crazy Alex (ok), 19:34, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Вот честно - вы сами на нём писали что-то большое Текучка есть всегда, если у в... текст свёрнут, показать
     
     
  • 10.56, Аноним (-), 20:27, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Очень плохой пример 1 Ошибку в ДНК программиста не должен компенсировать ЯП 2 ... текст свёрнут, показать
     
     
  • 11.57, Crazy Alex (ok), 21:18, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ошибаются все Отвлёкся, задумался о чём-то - и готова тупая ошибка Тесты на фу... текст свёрнут, показать
     
     
  • 12.59, Аноним (-), 22:45, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ошибки бывают разгоного плана, но то к чему вы тут пишете оправдания - это прост... большой текст свёрнут, показать
     
  • 10.64, rob pike (?), 23:44, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну что вы, тут ведь все чисто потрещать вышли, а писали только маленькое, на dBa... текст свёрнут, показать
     
     
  • 11.72, Ярослав (??), 15:36, 11/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    А у вас открывающий тег потерялся ... текст свёрнут, показать
     
  • 9.63, Добрый Дохтур (?), 23:37, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    знаете, есть языки где люди спокойно могут ковырять код в продакшен без серьёзно... текст свёрнут, показать
     
  • 6.47, rob pike (?), 03:55, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +2 +/
    А что такое скриптовый язык И чем он отличается от нескриптового Вот Java и C ... большой текст свёрнут, показать
     
     
  • 7.52, Crazy Alex (ok), 19:13, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    В общем случае - скриптовые языки - это те, которые создавались в расчёте на быс... большой текст свёрнут, показать
     
  • 6.49, Аноним (-), 13:01, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Для продакшна же разговор совсем другой - качество кода очень варьирует, смотреть надо.

    Вот это вы верно подметили, но не назвали причину вариации качества кода. Я вам сообщаю что качество кода зависит от программиста и perl тут имеет сильно опосредственное отношение.

     
     
  • 7.53, Crazy Alex (ok), 19:20, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Язык имеет значение. На перле очень легко написать что-то, что будет кое-как работать, из-за этого он многим казался лёгким, и они именно кое-как и писали. И отправляли в CPAN. А чтобы на нём хорошо писать надо знать довольно много, а иногда - ещё и следить за развитием, как было, скажем, с реализацией уникода.
     
     
  • 8.55, Аноним (-), 19:55, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Это безответственный подход к делу низкоквалифицированных программистов Кто вам... большой текст свёрнут, показать
     
     
  • 9.58, Crazy Alex (ok), 21:25, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    А кто спорит Я говорил о том, откуда в CPAN взялась гора кривого кода Его част... текст свёрнут, показать
     
     
  • 10.60, Аноним (-), 23:06, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сложно сказать Я не думаю что мне добавит чести выступать в роли судьи в случае... большой текст свёрнут, показать
     
  • 5.62, Добрый Дохтур (?), 23:34, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > И тем не менее, для написания сложных программ всё в perl/cpan имеется.
    > Например, есть ли в каком скриптовом языке профайлер уровня NYTProf, или
    > доступ к компилятору кода, или синтаксическому дереву?

    python. а вот давайте вы покажете как в perl в рантайме можно добавлять новые синтаксические конструкции в язык. например, goto.

     
     
  • 6.65, chinarulezzz (ok), 23:46, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >> И тем не менее, для написания сложных программ всё в perl/cpan имеется.
    >> Например, есть ли в каком скриптовом языке профайлер уровня NYTProf, или
    >> доступ к компилятору кода, или синтаксическому дереву?
    > python.

    профайлер назови, хотя б :)

    > а вот давайте вы покажете как в perl в рантайме можно добавлять новые синтаксические конструкции в язык. например, goto.

    в perl, в отличие от того же python, goto уже есть :D Так что покажи как это можно сделать в питоне, раз уж взялся безапелляционно отвечать.

     
     
  • 7.67, Добрый Дохтур (?), 12:53, 05/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >профайлер назови, хотя б :)

    Тысячи их! (с)

    cProfile, line_profiler, plop.
    на linux еще пробы для systemtap, а в pypy - только появившийся vmprof.

    > Так что покажи как это можно сделать в питоне, раз уж взялся безапелляционно отвечать.

    http://habrahabr.ru/post/140356/

     
     
  • 8.69, chinarulezzz (ok), 13:45, 05/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    и все они - гавно plop так вообще не для питона, а все остальные - таки мелочи ... текст свёрнут, показать
     
  • 6.66, rob pike (?), 23:49, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Простите, а можно не добавлять в рантайме новых синтаксических конструкций в язык, если этот язык не Lisp?
    Спасибо.
     
     
  • 7.68, Добрый Дохтур (?), 13:00, 05/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Простите, а можно не добавлять в рантайме новых синтаксических конструкций в язык,
    > если этот язык не Lisp?
    > Спасибо.

    можно. патчить байткод или ковырять AST.

     

  • 1.21, Зенитарка (?), 11:46, 03/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Перл мертв.
     
     
  • 2.22, Аноним (-), 11:57, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Перл мертв.

    Не люблю гуманитариев, больше уважаю тех кто занимается точной умственной деятельностью. Читаем внимательнее:

    > После года разработки представлена новая стабильная ветка языка программирования Perl - 5.22. При подготовке нового выпуска было изменено около 590 тыс. строк кода, изменения затронули 2400 файлов, в разработке приняли участие 94 разработчика.

     
     
  • 3.24, ... (?), 12:26, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Точной умственной деятельностью?

    https://github.com/Perl/perl5

    vs

    https://github.com/rust-lang/rust
    https://golang.org/CONTRIBUTORS

     
     
  • 4.26, Аноним (-), 12:32, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Ты что-то хотел сказать?
     
     
  • 5.37, Аноним (-), 17:21, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > Ты что-то хотел сказать?

    То что пёрл - мёртвЪ! (С)

     
  • 4.27, oops (ok), 12:33, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    О да, это, конечно, очень показательно.
    https://github.com/python/cpython ваще мертвее даже perl'а получается?
     
  • 4.34, Crazy Alex (ok), 13:52, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Угу. Правда, живого работающего кода на перле роаз в тысячу больше, чем на этих двух вместе взятых, но это мелочи, конечно. Главное - количество коммитов, что же ещё.
     
     
  • 5.35, Аноним (-), 13:57, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ...тем более на гитхабе, который младше *пятой* ветки в 2 раза.
     
  • 5.38, Аноним (-), 17:36, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Угу. Правда, живого работающего кода на перле роаз в тысячу больше,

    Где? Из мира во FreeBSD - выкинули, в Линуксах тоже - везде питон.

    Посмотрел на версии перла (я олдскул - у меня он на всех юниках всегда есть!):
    В продакшене и под нагрузкой: от 5.10.1 до 5.14.2 (и даже v5.8.4 built for i86pc-solaris-64int :)
    В продакшене second line, присматриваюсь: 5.16.3(Centos) и v5.20.2(FreeBSD 10)
    И только в джесси к которой тоже присматриваюсь - тоже v5.20.2

    >Главное - количество коммитов, что же ещё.

    Скорее - количество новых проектов начатых с использованием языка. Но тогда - перл мёртв. :(

     
     
  • 6.41, Crazy Alex (ok), 20:11, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    Насчёт BSD не знаю и знать не хочу. В дебиане и генте перл в дефолтной поставке. Хотя суть не в дефолтах, а в количестве софта, который на нём написани  работает. Наерное, одного SpamAssassin больше копий крутится, чем копий всего софта на Go и Rust.

    Кстати, в дебиане куча служебки на нём - начиная с кусков dpkg и debconf и заканчивая tasksel. В генте тоже служебных скриптов хватает.

    А новые... я всякими поветриями не особо интересуюсь. Вон, пару лет назад все на Ruby кинулись - и где тот Ruby?

     
     
  • 7.61, Добрый Дохтур (?), 23:32, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Насчёт BSD не знаю и знать не хочу. В дебиане и генте
    > перл в дефолтной поставке. Хотя суть не в дефолтах, а в
    > количестве софта, который на нём написани  работает. Наерное, одного SpamAssassin
    > больше копий крутится, чем копий всего софта на Go и Rust.

    Зачем этот тормоз и поглотитель ресурсов, если есть rspamd?

    Ну и если вы упомянули Go: сколько времени у вас займет написание простенького http-сервиса, который умеет раскладываться по ядрам и может держать сотни тысяч запросов в секунду?


     
  • 6.45, Аноним (-), 01:30, 04/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    > Где? Из мира во FreeBSD - выкинули

    Его выкинули потому что он там нафиг не сдался: в базовой системе ничего не перле не было, и стоял он там, по сути, для галочки. При этом его надо было поддерживать, и он по мере устаревания поддерживаемых релизов FreeBSD сильно отставал от актуальной версии в портах. При этом огромное количество софта из портов просто ставило себе свежий перл из портов же. Собственно с тех пор софта на перле в портах стало только больше.

     
  • 6.73, Ярослав (??), 16:00, 11/06/2015 [^] [^^] [^^^] [ответить]  
  • +/
    >> Угу. Правда, живого работающего кода на перле роаз в тысячу больше,
    > Где? Из мира во FreeBSD - выкинули, в Линуксах тоже - везде
    > питон.

    Расскажите пожалуйста подробнее про питон в base FreeBSD :)

    А если машина хотя бы чуть серьёзнее роутера, Perl по любому будет установлен из портов. Вот поизучайте, какой софт от перла зависит: http://www.freshports.org/lang/perl5.20/

    git, vim, qemu, gcc5... да вы сами посмотрите, там интересно.

     

  • 1.28, Аноним (28), 13:09, 03/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Когда уже будет Perl7?
     
     
  • 2.30, Аноним (-), 13:22, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тебе циферки или работать?
     
  • 2.33, Pilat (ok), 13:33, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Когда уже будет Perl7?

    ln -s /usr/bin/perl /usr/bin/perl7

    Проблемы у людей бывают очень разные, некоторые решить очень легко :)

     

  • 1.39, тигар (ok), 19:53, 03/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    а пегл6 когда уже родят?;)
     
     
  • 2.40, Andrey Mitrofanov (?), 20:04, 03/06/2015 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > а пегл6 когда уже родят?;)

    Нудк, новость-то кто за тебя читать будет??! (6.00-5.22) / ( 0.01 / 3 месяца ) = ...

     

  • 1.71, max (??), 17:31, 06/06/2015 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Думаю, большинство перл программистов знают и С, Java много чего другое. Из тех кого я встречал - это обычно это скромные и самодостаточные программисты или админы (так сказать старой закалки ребята!). Большинство их ненавидят за их любовь к перл, но уважают их, это однозначно. Сам я, скорее любитель перл, не профессионал, но пару раз он здорово выручал когда надо было быстро и качественно сделать сервисы по сборке, разборке, фильтрации и рапределению почты и данных с базы. Наверное это можно было бы сделать и на питоне, но это лично мой опыт, отсюда и лично мое мнение о перл. В случае перл, как языка программирования, конечно он не для новичков, что бы ее изучить нужно, как минимум, терпение, а любовь к нему, в моем случае, пришла с годами! ;-)
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру