LINUX.ORG.RU

(PragmaticPerl) Выпуск 26

 


1

4

Выпуск 26

В этом номере:

- От редактора, Вячеслав Тихановский

- Анонс конференции YAPC::Russia 2015, YAPC::Russia — ежегодная конференция, посвященная языку программирования Perl и его сообществу, которая проводится в Москве (под названием May Perl), Киеве (під назвою Perl Mova) и Санкт-Петербурге.

- Работа с WebSocket в Perl, Вячеслав Тихановский
Рассмотрены несколько подоходов при работе с технологией WebSocket из Perl

- Промисы в Perl 6, Андрей Шитов
Вторая часть обзора возможностей Perl 6 для параллельных и конкуррентных вычислений

- Грамматики в Perl 6, Андрей Шитов
В этой статье рассказано об одной из наиболее мощных возможностей Perl 6 — грамматиках

- Обзор CPAN за март 2015 г., Владимир Леттиев
Рубрика с обзором интересных новинок CPAN за прошедший месяц.

- Интервью с Виктором Турским, Вячеслав Тихановский
Виктор Турский (koorchik) — украинский Perl-программист, сооснователь компании WebbyLab

★★★★★

Проверено: Shaman007 ()
Ответ на: комментарий от mongo

Как на простом человеческом языке, TMTOWTDI в Perl служит в т.ч. для более элегантного и лаконичного выражения своих мыслей. С твоих слов получается примерно так: «Ты чё б*, умный д*я? Будь как все, ёпту!» Если ты знаешь меньше кого-либо, это твой минус, а не его.

fero ★★★★
()
Ответ на: комментарий от crutch_master

И что толку от этой компактности? С ней что делать в реальном проекте? Лично я ставлю целью написание надёжного и easily maintanable code а не «чем компактнее тем лучше». Да будет вам известно что $1 в ruby тоже есть

while s = gets do puts $1 if s =~ /(regexp)/ end

как и возможность писать компактный код. Написать обфусцированный код как в знаменитых пёрловых однострочниках можно на чём угодно

ry{var e=this.i(a,b,c);d.get(e,function(){})}catch(f){}};G.error=function(a,b){this.send("ERROR",a,b)};
G.warn=function(a,b){this.send("WARN",a,b)};G.info=function(a,b){this.send("INFO",a,b)};G.d=function(a){var b=this;return function(){try{return a.apply(null,arguments)}catch(c){throw b.error("Uncatched exception: "+c),c;}}};var Gk=function(){};var Gm=Gm||new Gl("uri"),Gn=RegExp("^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([\\w\\d\\-\\u0100-\\uffff.%]*)(?::([0-9]+))?)?([^?#]+)?(?:\\?([^#]*))?(?:#(.*))?$"),Go=function(a){return"http"==a.toLowerCase()?80:"https"==a.toLowerCase()?443:null},Gp=function(a,b){var c=b.match(Gn)[1]||null,d,e=b.match(Gn)[3]||null;d=e&&decodeURIComponent(e);e=Number(b.match(Gn)[4]||null)||null;if(!c||!d)return Gm.error("Invalid origin Exception",[String(b)]),!1;e||(e=Go(c));var f=a.match(Gn)[1]||null;if(!f||f.toLowerCase()!=
c.toLowerCase())return!1;c=(c=a.match(Gn)[3]||null)&&decodeURIComponent(c);if(!c||c.toLowerCase()!=d.toLowerCase())return!1;(d=Number(a.match(Gn)[4]||null)||null)||(d=Go(f));return e==d};var Gq=Gq||new Gl("check_connection"),Gr=null,Gs=null,Gt=null,Gu=function(a,b){this.c=a;this.b=b;this.a=!1};G=Gu.prototype;G.h=function(a,b){if(!b)return!1;if(0<=a.indexOf(","))return Gq.error("CheckConnection result contains comma",[a]),!1;var c=b.value;

Вопрос в том а надо ли?

mongo
()
Ответ на: комментарий от outtaspace

Я не про модули, а про сам интерпретатор. Модули вполне могут быть поломаны, особенно, маловостребованные. Но, в отличие от пыхпыха не надо патчить рабочие проекты, все работает годами. Идеального в этом мире нет ничего. А вот с точки зрения совместимости - Perl мне кажется весьма стабильным инструментом.

nempyxa ★★
()
Ответ на: комментарий от fero

Для обфусцирования кода оно там служит. К счастью, я не один, так думаю и в адекватных фирмах пёрл уже давно хранится в музее. А изпользуют его либо из-за legacy либо, как уже говорилось, вские упёртые ларри которые никак не решаются похоронить этого мамонта.

mongo
()
Ответ на: комментарий от mongo

Код написанный 15 лет назад надо mantain'ить.

_maintenance_

А зачем? чтобы разводить бизнес на дополнительные издержки? если код работает, пускай работает. точно так же как кофеварка или СКУД. пока не сломается по объективным причинам.

Язык программирования должен быть продуман а не являться сборником версий.

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

mongo, Вы или троль или школяр. Пишите чушь, не желая воспринимать разумные доводы. Разговор с Вами - это пустая трата времени.

nempyxa ★★
()
Последнее исправление: nempyxa (всего исправлений: 1)
Ответ на: комментарий от mongo

И что толку от этой компактности?

Однострочники очень удобно писать.

Вопрос в том а надо ли?

Надо. У тебя там не однострочник, а говно какое-то.

easily maintanable code

Ты упоролся? Нахрена кому-то поддерживать МОЙ код? Это МОЙ код. Я автоматизирую на нём СВОЮ работу. И Я хочу, чтобы МОЙ код был кратким и лаконичным. Нахрена мне пром.язык для парсинга ЛОРа или для перегона JSON в БД или еще чего-нибудь подобного?

easily maintanable code

И когда ты станешь не нужен тебя выкинут, как использованный контрацептив и наймут другого помоложе и с требованиями поменьше, а костыльшика с перл скриптами 10 раз передумают трогать. И тогда ты поймешь чего стоит этот твой easily maintanable в продакшене.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от nempyxa

Перл для продакшена и правда не совсем уместен. Говнокодеры будут писать ужас типа того, что mongo пишет, а когда они уйдут и что-нибудь сломается ни один нормальный программист за это не возьмётся.
Хотя на руби можно еще хуже написать, я думаю.

maintanable

Кстати, я тут как-то хотел внедрить что-то на руби (гитлаб кажется), посмотрел на то, что они хотели сделать с моим серваком на debian 7, да передумал. А на перле тулза для создания тунелей через прокси нормально работают.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 3)
Ответ на: комментарий от mongo

Да будет вам известно что $1 в ruby тоже есть

..там и $_ есть и ~/regex/ для матчинга значения $_ - какой-то TMTOWTDI выходит, не правда ли?

vividsnow
()
Ответ на: комментарий от nempyxa

Язык программирования не может быть статичным десятилетиями.

А следовательно язык программирования не может существовать так долго и должен заменяться со временем языком нового поколения.

_maintenance_

А зачем?

Меняются требования к проекту, добавляются новые функции, и т.д. А вот пёрлокодеры как раз славятся написанием unmaintanble readonly code.

mongo
()
Ответ на: комментарий от crutch_master

Однострочники очень удобно писать.

Зачем это говно вообще писать?

Ты упоролся? Нахрена кому-то поддерживать МОЙ код? Это МОЙ код. Я автоматизирую на нём СВОЮ работу. И Я хочу, чтобы МОЙ код был кратким и лаконичным.

Ну да, мелкие говноскрипты это всё для чего подходит код. А костыльщиков сейчас вообще на работу не возьмут что бы потом не пришлось

10 раз передумают трогать

. Так что прошли ваши времена, костыльщики, отправляйтесь в ад со своим пёрлом.

mongo
()
Ответ на: комментарий от vividsnow

Так в чём проблема, зачем пёрл? Повторюсь, в ruby есть всё что было хорошего в пёрле и других языках предшествующего поколения но при этом качественно организовано и продумано а не как в пёрле помойка где всё валяется как попало.

mongo
()
Ответ на: комментарий от crutch_master

Ну нам приходится поддерживать код на Perl, написанный иносранцами 5,10 и видмо более лет назад. Ничего там страшного нет, качество кода ужасное, но это проблема не языка, а квалификации горе-разработчиков. Ненадежный код можно написать на чем угодно, даже на Джаве. При этом исходники выглядят не как шифр - а вполне прилично. Зато, этот код просто работает, а при миграции на современные версии, выловлено было все две-три плюшки и они зависели от дистра и внешней программы. Т.е. при переходе с древних дебиан и бубунты на свежий центос практически ничего не сломало. Все остальное работает без изменений. И это реальный продакшен, который приносит бизнесу деньги, а не мифические блаблабла.

Хотя на руби можно еще хуже написать, я думаю.

Да чего далеко ходить, сколько дырок было закрыто в мерзком битриксе по причине быдлокода - думаю, не счесть. А казалось бы продукт массовый, типа профессионально написан, код открытый - смотри. А нет же. А те кто не видел эксепшенов Java - тот Java и не познал )). Да и бездумно брать проекты на Java я уже зарекся, мне хватило утекающей JIRA... Кароче, коряво написать можно на любом языке.

nempyxa ★★
()
Ответ на: комментарий от mongo

Меняются требования к проекту, добавляются новые функции

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

пёрлокодеры как раз славятся написанием unmaintanble readonly code.

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

nempyxa ★★
()
Ответ на: комментарий от mongo

Так в чём проблема, зачем пёрл?

проблемы нет - perl просто есть и для многих является превосходным инструментом решения задач

а в чём ваша проблема, что-то не понятно в perl?

vividsnow
()
Ответ на: комментарий от mongo

зачем пёрл?

Он Вам не нужен. Не пользуйтесь. А то будете писать быдлокод, а потом жаловаться какой Перл плохой )))

в ruby есть всё что было хорошего в пёрле

Опять сравниваете несравнимое, инструмент надо брать по задаче. А не по симпатиям.

Вот не уверен, что вот все хорошее взяли и перетащили, хотя бы потому, что Ruby не заменяет Perl. А что перетащили, немного изменили до удивления http://habrahabr.ru/post/144139/

про траблы с питоном замечено точно тут http://habrahabr.ru/post/140939/#comment_4711312

nempyxa ★★
()
Ответ на: комментарий от mongo

Зачем

Мне - чтобы быстро сделать простые вещи.

Ну да, мелкие говноскрипты это всё для чего подходит код.

На баше, вон, не пишут в продакшене больших проектов и чо? Если мне надо сделать какую-нибудь обработку, для которой баша не хватает, то перл отлично для этого подходит.

А костыльщиков сейчас вообще на работу не возьмут

Как так? Меня же взяли..

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от mongo

Так в чём проблема, зачем пёрл?

Как мне кажется у него более добродушное сообщество.

crutch_master ★★★★★
()
Ответ на: комментарий от mongo

так что прошли ваши времена, костыльщики

Угу. Начальнику вдруг надо сайты помониторить он для этого будет отдельного рубиста/пистонщика/жабиста нанимать.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Но почему для того чтобы сделать простые вещи обязательно писать криптооднострочники на пёрле? С таким же успехом можно написать на ruby. А вообще чего с вами говорить, вы больших проектов где подход ruby даёт реальные преимущества похоже даже и не нюхали.

mongo
()
Ответ на: комментарий от mongo

Но почему для того чтобы сделать простые вещи обязательно писать криптооднострочники на пёрле?

Потому что в терминале быстрее и проще набрать криптооднострочник, чем хрень, которую ты привёл.

С таким же успехом можно написать на ruby.

А еще можно на C/C++/Java/Pascal/Python/PHP/JS. Можно даже на sed roguelike написать.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Потому что в терминале быстрее и проще набрать криптооднострочник, чем хрень, которую ты привёл

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

перл давно и уверенно движется в страну вечной охоты. не надо ему мешать в этом

anonymous
()
Ответ на: комментарий от mongo

Сам набыдлокодил - сам виноват.

Когда я, как ты выразился, «быдлокодил», виртуальные окружения в Ruby ещё не сделали так, чтобы работало. Так что вне зависимости от быдловатости когда, админить RoR было невозможно вообще.

anonymous
()
Ответ на: комментарий от mongo

И это ты мне только что рассказывал про какой-то быдлокод? Ну-ну.

anonymous
()
Ответ на: комментарий от mongo

А следовательно язык программирования не может существовать так долго и должен заменяться со временем языком нового поколения.

То-то я смотрю ядро Linux кинулись на Groovy переписывать.

В общем, видна птица по полёту. И ты уже, пожалуй, налетал.

anonymous
()
Ответ на: комментарий от nempyxa

Ну нам приходится поддерживать код на Perl, написанный иносранцами 5,10 и видмо более лет назад. Ничего там страшного нет, качество кода ужасное, но это проблема не языка, а квалификации горе-разработчиков. Ненадежный код можно написать на чем угодно, даже на Джаве.

Просто на Перле можно написать совершенно непонятный код намного легче, чем на Питоне, например. На Питоне горожение метаклассов считается harmful, но если надо — на, вперёд, инструменты есть. А на Перле это единственный способ вообще суметь в ООП. Соответственно, и кода больше, и выстрелить в ногу проще. Организация пакетов и классов — лютый ад, после которого питоньи __init__.py вообще не замечаешь. Невозможность нормальной интроспекции мешает легко документировать код (в том же Doxygen приходится руками описывать ВСЁ, хотя в каком-нить Sphinx ограничиваешься нарративом). Молчаливое приведение типов, аутовивификация, феерически неряшливая работа с аргументами функций...

Ну да, если у тебя скрипт на экран, то проблемы вообще нет, пусть и нойзи. Но когда проект на многие сотни тысяч строк... doctah, my brain hurts. И да, тут уже проблема именно в языке, потому что среднестатистический разработчик такого кошмара на Питоне физически не смог бы наваять: там простое выглядит просто, а кривое криво. В перле же кривое может выглядеть изящно, а простое уродливо. Поэтому перловик обязан быть опытным и талантливым, чтобы не наломать дров в сложном проекте. Там, где с Питоном справился бы и средний програмист. С тем же результатом.

Ладно, поворчал, пойду дальше перловку писать :\

amix ★★★
()
Ответ на: комментарий от anonymous

удобство для разработки больших современных проектов.

Народ говорит, что и проекты по-больше писать можно. Я просто этим не занимаюсь.

crutch_master ★★★★★
()

Очень информативный замечательный выпуск. Особенно порадовали статьи Андрея Шитова. Спасибо.

mihalych ★★★
()
Ответ на: комментарий от outtaspace

getLines возвращает итератор с ленивой семантикой, который читает stdin при каждом вызове next

anonymous
()
Ответ на: комментарий от crutch_master

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

Zenom ★★★
()
Ответ на: комментарий от Zenom

foreach
Например, не вовлекающая цикл.

Мда.
Поясни за синтаксис, кстати. С первым куском понятно, а дальше - набор операторов.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от crutch_master

Это не цикл, это функция высшего порядка. Код полностью аналогичен вот такому:

Source.stdin.getLines().find(str => str.matches("regex")).foreach(matched => println(matched))
Zenom ★★★
()
Ответ на: комментарий от crutch_master

Во-первых, не цикл, а рекурсия. Во-вторых удивительно, что никто её ещё не написал. Нормальный путь сокращения количества строк кода - введение новых абстракций. А в перле используется подход, состоящий из придумывания пиктограмм. И знание N этих пиктограмм никак не помогает, когда встречаешь N+1-ю.

Zenom ★★★
()
Ответ на: комментарий от Zenom

И знание N этих пиктограмм, когда встречаешь N+1-ю.

Конечно не помогает. Ведь главное знать, где искать ответы.

crutch_master ★★★★★
()
Ответ на: комментарий от mongo

Он умрет тогда когда в школах олимпиады перестанут на нем проводить и уроки, а это как с виндовс - пока он будет на компах в школах, до тех пор все о нем будут знать. Так что ты неправ.

mul4 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.