После года разработки опубликован релиз новой стабильной ветки языка программирования Perl - 5.42. При подготовке нового выпуска было изменено около 280 тысяч строк кода (без документации и автоматически сгенерированного кода - 93 тысячи), изменения затронули 1500 файлов, в разработке приняли участие 64 разработчика...Подробнее: https://www.opennet.me/opennews/art.shtml?num=63519
где-то в обломках 20+летней давности:sub all{@_==grep$_,@_}
sub one{1==grep$_,@_}
sub none{!grep$_,@_}
sub any{!&none}
WhiteDragon,ты? Нашёл твой qxp.pm недавно. ;)Ты где сейчас работаешь?
миац местный админю
а с кем имею честь?
Да так, аноним обычный :), просто вспомнил тебя из IRC.
ну на #perl я по прежнему болтаюсь
Ну таки да. Почему бы и не засунуть на уровень языка действительно полезные макросы? (Да знаю я, что это процедуры, но фактически такие однострочники можно считать другой формой записи макросов, если это не обёртка)
если мне склероз не изменяет, я их себе слепил увидев их в perl6, когда он только только
и вроде бы я ниразу ими не воспользовался :)
но то, что это засунут прямо в язык - это хорошо
засунули бы еще бы чтото в духе:sub find(&@){no strict 'refs';local(*{(caller).'::a'})=\(my$a=$_[1]);&{$_[0]}||($a=$_)for(@_[2..$#_]);$a}
sub first(&@){$_[0]->()&&return$_ for@_[1..$#_]}
Шикарный синтаксис!
Прям все просто, понятно и совсем нет лишних закорючек.
И эти люди гонят на другие языки...
>Шикарный синтаксис!Как всегда, местные ыксперыды ничего кроме синтаксиса не видят. А я скажу, что самое плохое тут не синтаксис, а семантика. Хотя я не знаю перла, но определённые места выглядят явно подозрительно.
>no strict 'refs';Тормоза придумали трусы.
>local(*{(caller).'::a'})=Удачи в IDE воспользоваться поиском по коду.
>$_[1]Экономия на аргументах в ущерб читаемости. Опять же, удачи в статическом анализе. Анонимных кортежей крайне желательно избегать, особенно если у элементов одинаковый тип. Иначе понять, что где лежит - не получится.
>[оверквотинг удален]
> что самое плохое тут не синтаксис, а семантика. Хотя я не
> знаю перла, но определённые места выглядят явно подозрительно.
>>no strict 'refs';
> Тормоза придумали трусы.
>>local(*{(caller).'::a'})=
> Удачи в IDE воспользоваться поиском по коду.
>>$_[1]
> Экономия на аргументах в ущерб читаемости. Опять же, удачи в статическом анализе.
> Анонимных кортежей крайне желательно избегать, особенно если у элементов одинаковый тип.
> Иначе понять, что где лежит - не получится.если видишь no strict 'refs' значит до закрывающей блок скобки лучше ничего не трогать - это будет внутренняя магия
вся эта кухня с выключением стрикта и дерганьем a из коллера - это вполне себе нормально для внутренних модулей
ну у меня это тоже внутренний модуль
в боевой код такое не идет, само собой
> sub find(&@){no strict 'refs';local(*{(caller).'::a'})=\(my$a=$_[1]);&{$_[0]}||>>($a=$_)for(@_[2..$#_]);$a}
> sub first(&@){$_[0]->()&&return$_ for@_[1..$#_]}У кого более забористый синтаксис: Rust или Perl?
> У кого более забористый синтаксис: Rust или Perl?Перл побеждает с большим отрывом.
Синтаксису раста до него еще деградировать и деградировать...
Это лаконичнов. Вам не понять.
А, что тут непонятного?... Лаконичность ценой доп.рисков ошибок и нечитабельности другими, плохой читабельности другими хорошо знающими язык, как и ухудшением своей вычитки. Зато код чуть лаконичней...
> доп.рисков ошибок и нечитабельности другими, плохой читабельностиКак это доказать в логике или цифрах?
Вы с другой стороны посмотрите, что бы наделать ошибок надо сперва хорошо по граблям походить. А далее снижение кол-во ошибок до минимума. Если, конечно же, человек не бросил.
> Вы с другой стороны посмотрите, что бы наделать ошибок надо сперва хорошо
> по граблям походить. А далее снижение кол-во ошибок до минимума. Если,
> конечно же, человек не бросил.я? не, я не бросил, для меня перл - основной инструмент
у APL
у перла же TMTOWTDI
perlstyle гласит Just because you CAN do something a particular way doesn't mean that you SHOULD do it that way. Perl is designed to give you several ways to do anything, so consider picking the most readable one.в моем случае я такие однострочники шлепал просто в формате перочинного ножа, чтобы были под руками
не нужно понимать что в них написано, считайте, что это уже компиленный бинарь
Самое забавное, что это как раз логичный и читаемый синтаксис, в отличие от раста.
> Самое забавное, что это как раз логичный и читаемый синтаксис, в отличие от раста.Да-да, $#_ очень логично и очень читабельно)) Прям совсем не writeonly йезычог.
Не зря попурность перла настолько упала.
$#_ максимально читаемо, кроме шуток. В расте ты бросив один взгляд на код, не сможешь понять, что он делает.
>> Самое забавное, что это как раз логичный и читаемый синтаксис, в отличие от раста.
> Да-да, $#_ очень логично и очень читабельно))Ну вообще-то да, читабельно. Нужно только мыслить в логике Perl.
Смотри, значит, как это работает:
- всё, что начинается на @ -- это массив
- всё, что начинается на $ -- это скаляр
- @_ -- это массив, который содержит все переданные в функцию аргументы
- $#_ -- это скаляр, который содержит индекс последнего элемента массива @_
- $_[$i] -- это скаляр, который возвращает $i-й элемент массива @_Таким образом, получаем вполне читаемый синтаксис:
sub print_args {
for (my $i = 0; $i <= $#_ ; $i++) {
print "$_[$i]\n";
}
}
> всё, что начинается на @ -- это массив
> всё, что начинается на $ -- это скалярДопустим логично.
> $#_ -- это скаляр, который содержит индекс последнего элемента массива @_
Как это следует из предыдущих утверждений?))
>Как это следует из предыдущих утверждений?))Вам плохо объясняют. Переменные в перле содержит сигил и имя. Сигил - это старнные непонятные символы, имя - привычная вещь в других языках.
Сигил перменных - это $
Сигил массивов - это @
Если у переменной поменять сигил, то интерпретатор будет иначе обрабатывать код. Например,$size = @array;
Это получить размер массива. Запись
$#имя_переменной
это ещё один способ получить тот же результат. Есть много разных способов сделать это.
Есть специальное имя переменной - подчёркивание. Это некая специальная перменная по умолчанию, в данном случае - аргумент функции. Если мы хотим обратится к ней, то пишем @_
$#_ - это размер этой самой переменной по умолчанию.
$_[индекс] - это обращение к элементу массива переменной по умолчанию.
В зависимости от того, нужно ли получить сам массив, его размер или его элемент - используется разный сигил.
Ну и куча разных подобных условностей.
C 5.36 параметрам функций можно давать человеческие имена, а не распаковывать их из @_
В баше что-то похожее, вроде ни разу проблем не возникало. Ты просто знаешь, как это сделать и что оно означает. Вот регулярные выражения, особенно жадные и с группировками, могут быть неочевидными.
> У кого более забористый синтаксис: Rust или Perl?Ты шутишь что-ли, или не видел кода на Rust в глаза? У Rust синтаксис аналогичный плюсам, даже чуть проще.
Пойду-ка полежу полчасика с закрытыми глазами...
>sub find(&@){no strict 'refs';local(*{(caller).'::a'})=\(my$a=$_[1]);&{$_[0]}||>($a=$_)for(@_[2..$#_]);$a}
>sub first(&@){$_[0]->()&&return$_ for@_[1..$#_]}Хитрожопый ты наш, ты же специально написал однострочники. Такие примеры ради лулзов прведены на Лурке. На самом деле, по-читаемости, синтаксис Перла намного лучше чем у Раста.
> На самом деле, по-читаемости, синтаксис Перла намного лучше чем у Раста.Ахаха. Ну да, ну да.
И это раст ругают за закорючки. Хоть в перловке почти весь код закорючки.
>>sub find(&@){no strict 'refs';local(*{(caller).'::a'})=\(my$a=$_[1]);&{$_[0]}||>($a=$_)for(@_[2..$#_]);$a}
>>sub first(&@){$_[0]->()&&return$_ for@_[1..$#_]}
> Хитрожопый ты наш, ты же специально написал однострочники. Такие примеры ради лулзов
> прведены на Лурке. На самом деле, по-читаемости, синтаксис Перла намного лучше
> чем у Раста.не, я это для себя писал - просто перочинный ножик, это было задолго до того патча бармина на лоре, который я, кстати, мгновенно разобрал (гуглите старые логи #perl руснета)
погугли qxp.pm, там есть даже дичь, которая все операторы функциями делает, например после use qxp; можно сказать '*'->(\@a,\@b,\@c) и на выходе получить массив произведений $a[0]*$b[0]*$c[0] и так до конца самого жирного массива
собственно там есть функция zip, которую я также подсмотрел в p6 на этапе его вылупления, однако же тамже автоматом есть и функция &,
тобишь zip(\@a,\@b) это тоже самое, что и ','->(\@a,@b) ну или, если вдруг так больше нравится: &,(\@a,\@b)
там даже есть функа с именем # которую как sub # не объявить, зато как *#=sub{} очень дажену и до кучи предлагаю понять что за хрень и нафига функа yuki
Мне на собеседовании подсунули похожую мутатень, типа, где ошибка?
С просил:
- Это у вас так пишут?
- Да. Это наш код. (С гордостью)
- Прощайте.
> Мне на собеседовании подсунули похожую мутатень, типа, где ошибка?
> С просил:
> - Это у вас так пишут?
> - Да. Это наш код. (С гордостью)
> - Прощайте.ну в продакшн такое пихать конечно не стоит, но как тест на скиловость, почему бы и да
опятьже если это основной код, если это какаято либа, лезть в которую не стоит - ну и хрен бы с ней
просто это низкоуровневый перл (кстати еще далеко не сильно низкоуровневый, можно закопаться глубже)
Какой же всё-таки выразительный, и при этом отвратный язык. Я очень рад что прошел в юности (в нулевых) через коммерческую разработку на нём, это много дало в понимании того как не надо делать. Единственная моя ошибка с этим связанная после - я потом (в десятых, уже в нормальной компании) вызвался переписывать легаси с перла (потому что был один из немногих в компании кто этот перл ещё помнил). Вот это конечно был ад, израиль и выгорание. Надо было сказать что никакого перла я уже не помню, и ищите любых оставшихся в конторе причастных к тому что это было допущено в прод, и пусть они сами переписывают как хотят.
Год 2025й от рождества христова, кодеры всё ещё не определились с кодировками файлов. Когда определятся, там уже и о строках подумать можно будет.Впрочем, booking.com наглядно показал, что язык реализации — десятое дело для любого коммерчески успешного проекта. Жаль, до кодеров это дойдёт приблизительно никогда.
Может я хочу файл с кодом сразу в нескольких кодировках CP1251/KOI8-R/UTF-8. Технически это возможно. Но нужно научить интерпретатор определять их на ходу.
> Технически это возможно.Возможно, но зачем?
Для чего вообще такое может понадобится? Какой реальный сценарий?
> Может я хочу файл с кодом сразу в нескольких кодировкахЯ про продакшен, а не про локалхост очередного Тэрри Дэвиса.
> Впрочем, booking.com наглядно показал, что язык реализации — десятое дело для любого коммерчески успешного проекта.Ну ничего себе. Как раз наоборот - они сейчас тратят деньги и время чтобы переписать перловое легаси на нормальные ЯП. Подумаешь, код написан на закорючках для которых разработчиков на рынке нет, ерунда какая - главное что проект коммерчески успешен. Потом, количество коммерчески успешных проектов как раз прекрасно показывает годится язык для прода или нет. В одном не взлетевшем коммерческом проекте на перле я сам участвовал (не могу сказать что он загублен прям таки языком, но загублен некомпетентным коммерческим и техническим руководством, а только такое Perl для прода и могло выбрать). И чсх, если посмотреть на 20 лет в прошлое, никто не скажет что тогда его выбор был оправдан. Он был убогим тогда, а нормальных языков был в достатке. Просто надо было хоть чуть-чуть понимать в разработке чтобы его никогда ни для чего не использовать.
Именно так. Главное, что проект коммерчески успешен, благодаря чему у компании есть деньги для любых переписываний на любых языках. В отличие от всего того, что не взлетело, хоть и было написано на самом правильном языке с самой правильной архитектурой. А секрет прост: людям надо решение их проблем, такое, чтобы было дешевле заплатить за него, чем мучаться самому. Как ни крути, язык программирования на успех если и влияет, то весьма опосредованно.> не могу сказать что он загублен прям таки языком, но загублен некомпетентным коммерческим и техническим руководством
Начал с хорошего понимания сути проблемы…
> только такое Perl для прода и могло выбрать)
Но не удержался и скатился до ad hominem. Почему? Ну про это классики психологии много писали, повторяться не буду.
Интересный язык с сомобытными идеями который к сожалению уже уходит в разряд ретроСейчас его место занимает python 3
Nim
Ну да, они новую версию пилят, снова все ломая.
Могу ошибаться, то Питон занял место не своё и фронтенд и бекенд. Везде один Питон.
Глистам в ведре тоже кажется, что небо - это просто круглая дыра. Когда кодишь на пестоне, вряд ли можно ожидать, что ты хоть что-то видишь вне пестонодыры.
Ну при этом я столкнулся с софтом которое на питоне, знакомый также в питонисты подался. Вакансий питонистов больше чем плюсовиков, зарплаты выше.
class Test:
x = 0def clsx(self):
Test.x += 1def objx(self):
self.x += 2ax = Test()
bx = Test()ax.clsx()
ax.objx()print("ax.x =", ax.x, "<= значение явно не корректное")
print("bx.x =", bx.x)
>который к сожалению уже уходит в разряд ретроНе вижу причин для сожаления. Хорошо, что очередной динмически типизированный язык уходит в историю, без малейшего намёка на статический анализ. Вот бы он ещё бы питон с жс-ом бы зацепил.
> Интересный язык с сомобытными идеями который к сожалению уже уходит в разряд ретроПочему к сожалению? Это эзотерический язык программирование, только сомам на нём и писать, людям не надо.
> сомобытные идеиэто уже что-то из сленга рыбаков?
> который к сожалению уже уходит в разряд ретро
Который слава богу уходит. Ничего хорошего в нем кроме идей не было.
"К сожалению" слишком медленно
(хотя это и понятно, никто не хочет разбирать авгиевые конюшни легаси, написанные на это Г)
Язык слишком эззотеричный. И для многих неясно, зачем писать скрипты на перле, когда есть баш -для админ.системы, и питон- для всего остального.
Господа забывают, что такое Perl. А это Practical Extraction and Report Language, и в этой области он по прежнему лучший!
А это уже область ИИ-агентов. Попробуй скормить данные Grok'у, тебе понравится.
Гроку 10гб не скормить. Ему не понравится.
Когда то и компы были гигантские, выделенную подстанцию требовали. И с 640кб были.
Будет подобное и локально.
Который настолько ЭТИЧЕН, что откажется обрабатывать любые, не утверждённые генеральной линии штатовских партий, данные?
Или который, в отличие от тупого скрипта, любит, умеет и практикует галлюцинации?Не, пасиб.
Ну пользуйся гомоморфным шифрованием, если боишься что тебе за данные Обама в подъезде лампочки снова бить начнёт.
Это не поможет. Нужна модель без цензуры, а не просто канал для передачи данных.
Поэтому, ненужно его пихать в другие области.
Но "все — текст" ;)
Регекспы уже давно есть во всех языках.
Да нет конечно. Нет в нём ничего специфического ни про extraction, ни про report. Регулярки и принты есть в любом ЯП, и пользоваться ими проще.
class Point {
field $x :reader :writer :param;
field $y :reader :writer :param;
}
my $p = Point->new( x => 20, y => 40 );А с каких пор в перле классы были? Мне с пеной у рта доказывали местные экперты, что "не нужно", есть bless!!
> А с каких пор в перле классы были?Дык с 5ки и начались ...
Посмотри на любой модуль - можно как класс использовать, можно вызовом функций.
прямо вот class завезли относительно недавно
нафига он нужен - я не понимаю
bless же есть
> прямо вот class завезли относительно недавно
> нафига он нужен - я не понимаю
> bless же естьНу видмо все устали делать вид и завезли привычный синтаксис?
Сабж сложен в изучении?
Много вакансий на сабже?
Сколько платят за знание сабжа?
В Перле сложно примерно ВСЁ. :) Но при этом это по-прежнему язык, кратно лучший похапэхи.
> В Перле сложно примерно ВСЁ.Ну не так всё плохо.
> Но при этом это по-прежнему язык, кратно лучший похапэхи.
Ну наблюдается понижения уровня программистов (для массовости), отсюда цепочка perl->php->python. Последний уже полное дно, дальше ухудшать уже некуда (была, конечно попытка при переходе 2->3 ...).
При том, что, как и в Похапехе, в глазах пестрит от этих $.
Вот если бы з/п перлопргера так пестрела этими значками, то тогда можно было бы мириться.
Не сложнее, чем делать сайты на ассемблере.
Обычно при выборе ЯП я оплату ставил на последнее место.
Например, мне тошнит php и нравится rust
Ну я вообще мало знаю любителей PHP. Но Rust не фанат, мне всё что содержит в названии C нравится: СИ, С++, С#, 1C.
> не всё что содержит в названии C нравится: СИ, С++, С#, 1C.Поржал, спасибо ! Только COBOL забыл :-).
Не, ну если первые два учил во времена учёбы, потом решил, вот недавно начал интересоваться 1С.
Слышал про Соболь, но никогда не интересовался, видимо не очень распространённый.
Идём на hh и смотрим. 80+ вакансий и ЗП 200к+. Поэтому пока лучше учить java/kotlin
А что лучше, Java или 1с?
а вы не задумывались, почему их так много и висят они годами?
его нельзя изучать, перлом нужно проникнуться, нужно научиться думать на перле, разговаривать на перле
> перлом нужно проникнуться, нужно научиться думать на перле, разговаривать на перлеА потом любой код на любом языке превращается в программу на перле.
Остальная команда очень любит таких разработчиков))
> Сабж сложен в изучении?Если с регулярными выражения уже хорошо знаком, то не сложнее, чем почти любой другой язык.
> Много вакансий на сабже?
Немного, так как новых разработок на нем почти не ведется. Но есть огромный пласт легаси, который надо поддерживать.
С точки зрения перспективы, самая веселуха начнется лет через 10, когда близость 2038 года потребует адаптации множества легаси.> Сколько платят за знание сабжа?
В среденем, явно больше чем за Python или js. Что, собственно говоря, объясняет, почему для новых разработок он не востребован. Стоимость разработки на Perl получается выше, чем на Python или js. А производительность у Perl ниже.
В некотором смысле, сейчас ситуация с Perl напоминает ситуацию с COBOL и RPG всего лет 20 назад.
RPG для меня это role play game, ЯП с таким названием впервые слышу.
> Доступен язык программирования Perl 5.42А раньше он был не доступен ?
Из какого очка вылез этот новостеписатель ?