LINUX.ORG.RU

Сегодня языку Perl исполнилось 25 лет!

 , , ларри уолл


5

2

25 лет назад, 18 декабря 1987г., программист и лингвист Ларри Уолл выпустил первую версию языка программирования Perl.

>>> Подробности

★★

Проверено: JB ()
Последнее исправление: JB (всего исправлений: 4)

Ответ на: комментарий от true_admin

создаётся структура в памяти с идентификатором. У тебя есть другие предложения как это сделать? Причём, не просто «а я ненавижу пайпы и иноды», а настоящее предложение которое _хотя бы_ опишет недостатки текущей реализации.

мне-то зачем? Читай SICP, если тебе так интересно, зачем этот костыль нужен, и как он реализован. (про файлы там, кстати, ни слова).

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

Он хотел показать и рассказать про pipes и иже с ними

А, ясно. Это делается на генераторах, причём я могу даже сделать аналог перлового кода, но будет много неудобных обёрток. За это питон и не люблю.

Кстати, а в перле есть генераторы?

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

Читай SICP, если тебе так интересно, зачем этот костыль нужен,

и как он реализован.

Не стесняйся, расскажи своими словами.

про файлы там, кстати, ни слова

яничегонепонял. Ты меня отсылаешь к sicp в котором ни слова по теме?

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

в «спецификации bf» нет никакого stdio. Не туда смотришь. Там есть просто «вывод в файл», в какой - не сказано. Stdout просто для удобства подцепили.

То есть вывод в разные файлы в пределах одной программы - mission impossible, ага.

у тебя есть продвинутая команда условного перехода while. Этого достаточно для организации _любого_ алгоритма. В т.ч. и подпрограммы. В т.ч. и в системе (память в bf бесконечное, место для твоих гигов найдётся).
а бесконечность теперь меньше 30К? Или ты путаешь чью-то реализацию с ЯП?

Reference implementation - 30000 байт, это раз. Это не «чья-то» реализация, а непосредственно автора.

И два - никакой while не поможет в вызове int 0x80 (сисколлов), если нету закорючки для вызова сисколла по заданным ячейкам. Есть, правда, костыльный вариант, не меняющий систему команд bf: делаем интерпретатор с выделенной областью памяти для системных вызовов/прерываний/чёрта лысого (управляющая ячейка и ячейки аргументов) и отслеживаем изменение управляющей ячейки в реальном времени, вызывая нужные системные вещи. Но это уже нифига не reference implementation получается.

border-radius
()
Ответ на: комментарий от true_admin

Не стесняйся, расскажи своими словами.

пошутил? в SICP tl;dr а я одним словом?!

яничегонепонял. Ты меня отсылаешь к sicp в котором ни слова по теме?

этот перловый конвейер, без которого «в линуксе никак», в этом вашем линуксе реализован через специальные файлы (дык всё - файлы). Но на самом деле, абстракция потоков никак к файлам не относится, и файл pipe это всего лишь одна из реализаций. В SICP подробно обсасывается данная структура данных, которая на самом деле является одной из фундаментальных, наряду со списком или там массивом. Как-то странно смотреть на перловцев, которые гордятся фундаментальной структурой...

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

Тебе пример выше привели с IO::All

Я продолжу. Итак, TIMTOWTDI в действии:

А у меня другие идеи возникли (в обработчике оставлю простой echo-ответ для примера). Fork-based (вариант1):

perl -e'package Echo_Srv;use base "Net::Server::Fork"; sub process_request{while(<>){print $_;}};Echo_Srv->run(port => 3000);'

Fork-based (пример2):

perl -MIO::Socket::INET -e'$s=IO::Socket::INET->new(LocalPort => 3000, Listen => 1);{$c=$s->accept;fork && redo;print $c $_ while <$c>;}'

Event-based обработка (async i/o):

perl -MIO::Select -MIO::Socket::INET -e'$a=IO::Select->new;$s=IO::Socket::INET->new(LocalPort => 3000, Blocking => 0, Listen =>1);$a->add($s);while(1){for $e($a->can_read){$e==$s?$a->add($e->accept):do{$e->recv($msg,4096);$msg?$e->send($msg):$a->remove($e);}}}'

HTTPD Application server. Event-based (async i/o):

perl -MAnyEvent::HTTPD -e'$s=AnyEvent::HTTPD->new(port=>3000);$s->reg_cb(request=>sub{$_[1]->respond({content=>["text/plain","The internet is full! Go away!"]});});$s->run;'

Классический на Perl эквивалентный Си коду с использованеим select,socket,connect,accept,listen,bind,fcntl,recv,send приводить не буду. Лень.

Можно продолжать и дальше примеры приводить.

А Если надо c web поработать - делать то лучше взять фреймворк Mojolicious. С ним в комплекте идет Mojo::Server::Morbo который реализует HTTP и WebSocket сервера.

DOOOOOOOOOOOOOOOOOOM!, xD

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

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

все-таки в эмиграцию всегда едет унылое меньшинство. поэтому стоит смотреть не на то, как устроен рынок труда в америке, а на то, как устроен рынок труда у нас

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

Perl позволил красиво решить задачу на должном уровне не вваливаясь ни на уровень объекта, ни в на уровень итератора, ни в контекст вывова метода объекта

Да, в питоне из коробки этого нет, но он позволяет написать это на генераторах. Proof of concept:

#!/usr/bin/env python3

#!/usr/bin/env python3

class Pipe:
    def __init__(self):
        self.prev = self

    def __iter__(self):
        return self

    def __next__(self):
        raise NotImplementedError

    def __or__(self, other):
        other.prev = self
        return other


class cat(Pipe):
    def __init__(self, path):
        self.fd = open(path)
        super().__init__()

    def __next__(self):
        v = next(self.fd)
        return v

class grep(Pipe):
    def __init__(self, pattern):
        self.pattern = pattern
        super().__init__()

    def __next__(self):
        while True:
            v =next(self.prev)
            if v.find(self.pattern) != -1:
                return v


for x in cat("/etc/resolv.conf") | grep("nameserver"):
    print(x)

PS sublime text сошёл с ума. Если поехало форматирование то извините.

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

в этом вашем линуксе реализован через специальные файлы (дык всё - файлы).

Но на самом деле, абстракция потоков никак к файлам не относится, и файл pipe это всего лишь одна из реализаций.

я так и не понял как это всё жить мешает.

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

А он устроен как в Америке или любой другой стране. Никто не будет вкладывать деньги в сомнительные технологии типа perl или похапе. Можно нанять индусов (такжиков или молдаван) на ASP.NET или явские технологии. И получить лучший результат, намного быстрее и за гораздо меньшие деньги.

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

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

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

Вот я, например, никак не утопаю в Perl-коде (уже всяких масштабов проекты поковырял). Можно ли говорить что мой скилл в Perl круче твоего? Но если мой круче - то стоит ли слушать букашек вроде тебя, которые со своего уровня способны сформулировать лишь однострочники и увидеть вокруг лишь пуганых нубов?Ответь мне, пожалуйста. Дилемма же.«Всего вам доброго» (с)

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

Фу...какой отстой.

Ну покажи мне реализации grep/sub/итп внутри перла. Или ты думаешь что чем отстой глубже закопан тем он менее отстойный?

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

Ну покажи мне реализации grep/sub/итп внутри перла. Или ты думаешь что чем отстой глубже закопан тем он менее отстойный?

Нет, я так не думаю. Слово отстой было в сторону концепции питона (не путать с оступами). Реализация - это лишь следствие.

PS: Не в первый раз уже замечаю за вами выпады, основанные на поверхностном суждении. Это чести не добавляет.

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

Слово отстой было в сторону концепции питона (не путать с оступами). Реализация - это лишь следствие.

Ммм, какая конструктивная критика. Но отвечу- концепция там отличная.

Не в первый раз уже замечаю за вами выпады, основанные на поверхностном суждении. Это чести не добавляет.

В чём поверхностность проявляется? Конкретные примеры.

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

кстати, а в перле это ленивые функции? Я так, на всякий случай спрашиваю :)

Есть модули на CPAN которые при подключении замещают встроенные функции на ленивые. Как видите, свобода выбора за девелопером сохраняется. Если что не устраивает - патч всегда приветствуется.

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

Ммм, какая конструктивная критика. Но отвечу- концепция там отличная.

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

В чём поверхностность проявляется? Конкретные примеры.

Я похож на бесплатного консультанта? Думайте сами, решайте сами, иметь или не иметь (с)

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

кстати, вот это http://search.cpan.org/~asg/List-Gen-0.974/lib/List/Gen.pm занимает 130кб в архиве. Некислая такая кодовая база. Или это считается нормальным у перл-программистов?

Тебе не нравится что модуль поставляется в архиве с метаинформацией и сценарием для автоматической сборки и тестирования? Или может тебя смущает то что unit-тесты идут сразу в комплекте которые запускаются автоматом при установке модуля если только вы не устанавливается с отменой запуска тестов. Или может тебе не нравится то что несущий код модулей идет сразу с документацией из чего потому генерируется man-страница или сам рабочий модуль служит справочной информацией доступной для чтения perldoc? Что тут не так? За удобства надо платить, а объем архива - это наименьшее из зол сегодня.

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

Я и говорю что концепция вокруг чего стоится питон - отстой.

и вокруг чего же она строится? А так же: у кого концепция не отстой? У перла?

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

Или может тебе не нравится то что несущий код модулей идет сразу с документацией из чего потому генерируется man-страница или сам рабочий модуль служит справочной информацией доступной для чтения perldoc?

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

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

и вокруг чего же она строится?

ООП.

А так же: у кого концепция не отстой? У перла?

Perl, Lisp, С и С++ при грамотном использовании.

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

perl -MIO::Select -MIO::Socket::INET -e'$a=IO::Select->new;$s=IO::Socket::INET->new(LocalPort => 3000, Blocking => 0, Listen =>1);$a->add($s);while(1){for $e($a->can_read){$e==$s?$a->add($e->accept):do{$e->recv($msg,4096);$msg?$e->send($msg):$a->remove($e);}}}'

ИМХО совершенно нечитаемые writeonly макароны.

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

я так и не понял как это всё жить мешает.

не мешает. Но и какой смысл на эту древнюю идиому фапать - мне непонятно.

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

ИМХО совершенно нечитаемые writeonly макароны.

1. Почему не отвечаешь на это?

Вот я, например, никак не утопаю в Perl-коде (уже всяких масштабов проекты поковырял). Можно ли говорить что мой скилл в Perl круче твоего? Но если мой круче - то стоит ли слушать букашек вроде тебя, которые со своего уровня способны сформулировать лишь однострочники и увидеть вокруг лишь пуганых нубов?Ответь мне, пожалуйста. Дилемма же.«Всего вам доброго» (с)

2. Все читаемо. То что ты не можешь распарсить - это твоя проблема. Более того, если ты не заметил - то тут как бы код лежит линейно в одну строку. Это как бы намекает на то что содержание строки надо осмысливать последовательно. Я поражаюсь таким как ты. Какие же вы программисты если вы на уровне восприятия/анализа кода захлебываетесь? Программистики-слабаки. Не ной больше. Не позорился бы. Такие как вы - отстой.

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

Вот я, например, никак не утопаю в Perl-коде (уже всяких масштабов проекты поковырял). Можно ли говорить что мой скилл в Perl круче твоего?

нет. я вообще перловку плохо знаю.

Но если мой круче - то стоит ли слушать букашек вроде тебя, которые со своего уровня

есть другие известные мне ЯП. Я могу сравнивать. И могу диагностировать перл головного мозга.

способны сформулировать лишь однострочники и увидеть вокруг лишь пуганых нубов?Ответь мне, пожалуйста.

дык у вас _любой_ скрипт - как однострочник. Не читаемые макароны. Примеров в этом треде достаточно. Ты думаешь, круто писать непонятную никому(и тебе) НЁХ? Нет. На это способен любой дебил.

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

Ну покажи мне реализации grep/sub/итп внутри перла. Или ты думаешь что чем отстой глубже закопан тем он менее отстойный?

хороший вопрос, плюсую.

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

Какие же вы программисты если вы на уровне восприятия/анализа кода захлебываетесь? Программистики-слабаки.

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

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

Я и говорю что концепция вокруг чего стоится питон - отстой.

говоришь. А можно поконкретнее? Я читал концепцию Гвидо (в его правилах), ИМХО вполне разумно написано. Ты против?

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

1. Почему не отвечаешь на это?

потому-что перед ответом мне надо пост _прочитать_. См. выше ответ.

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

а если он записан в столбик, каждое выражение/терм в своей строке, как это принято в любом другом ЯП, то это надо воспринимать параллельно? В C/C++ тоже можно всё писать в одну строку, у нас это детектор говнокода.

Я поражаюсь таким как ты. Какие же вы программисты если вы на уровне восприятия/анализа кода захлебываетесь? Программистики-слабаки. Не ной больше. Не позорился бы. Такие как вы - отстой.

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

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

и чем-же тебе bash не подходит?

раз ты по прежнему упорно отказываешься смотреть оригинальную документацию я, так и быть, сделаю для тебя сверхкраткую выжимку - специально в рамках недели помощи идиотам, не знающим всех прелестей английского и гугла :)

1. Огромные накладные расходы 2. Сложный синтаксис

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

Но и какой смысл на эту древнюю идиому фапать - мне непонятно.

с каких пор конвеерная обработка данных перестала быть актуальной?

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

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

дык у вас _любой_ скрипт - как однострочник. Не читаемые макароны. Примеров в этом треде достаточно. Ты думаешь, круто писать непонятную никому(и тебе) НЁХ? Нет. На это способен любой дебил.

Во, кстати, приведи пример своих программ. А то пришёл на праздник и н@#$%л в прихожей, кто такой - непонятно.

Кстати, писать непонятную никому НЁХ - да, это круто, если сделано специально. А тетрис на sed? Бессмысленно, но круто. Тебе слабо? Не завидуй так громко, не всем быть мастерами, ремесленники даже более востребованы.

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

router ★★★★★
()
Ответ на: комментарий от border-radius

Можно выложить ещё дамп бинарника и назвать остальных слабаками-позорниками-неосиляторами.

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

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

Когда-то реверсил виндовозные бинарники, так что кое-что помню ещё. А ещё раньше набирал прямо в hex-редакторе досовский com-файл-заставку а-ля «матрица» из 14 байт. Но ведь не называю неосиляторами тех, кто не знает системы команд x86.

А вот когда человек пишет на языке эльфов - это слабоумие.

Или просто показной «Ылитизм». В общем, да, ничто так не портит команду, как её фанаты.

border-radius
()
Ответ на: комментарий от flareguner

Вот и хоббит с роковой горы вернулся, про область видимости и ока Саурона расскажет нам. А потом мы продолжим обсуждать Perl- язык эльфов.

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

ООП - отстой.

у кого концепция не отстой?

C и С++ при грамотном использовании.

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

А с C я трахаюсь прямо сейчас, о его чудесной концепции можно мне не рассказывать.

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

sed -r 's/.*/\n&\n/;tl;:l;s/(\n.)(.*)(.\n)/\3\2\1/;tl;s/\n//g'

хоспаде, еще один базовые утилиты не осилил? есть же rev, да даже awk-ом будет лучше

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

Вот когда сделаешь интерпретатор который будет хранить символы которыми обозначается scope, a lookup переменных будет осуществляться поиском в тексте, вот тогда обозначение области видимости переменных отступами можно будет с гордостью назвать маразмом!

Ты не поверишь, детка :D Сегодня нет времени, завтра найду в книге по перлу пример, как выполнять поиск по области видимости. Если забуду - ты не стесняйся, сбрось напоминание.

Perl именно что хранит список переменных из каждой области видимости в переменной ( ЕМНИП, в хэше )

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

дык у вас _любой_ скрипт - как однострочник

Ну, не любой. Я думаю если всё же потратить время и выучить синтаксический сахар то жить будет легче. Я ковырялся в кишках request tracker и скриптах к spamassasin, так вот на перле вполне можно писать в «традиционном» ключе. Мне, правда, от этого он нравится не стал.

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

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

1. Огромные накладные расходы

4.2

даже на третьем пне bash не тормозит (в слаке вся инициализация на bash'е, и грузится так, что твой systemd причмокивает в сторонке, когда у мну уже все уведомления на ЛОРе отвечены). Тормозит железо, но что я поделаю с роутером своего провайдера?

2. Сложный синтаксис

во первых ты неосилятор. Во вторых, shell _обязан_ знать любой системный администратор. Т.ч. это не проблема.

раз ты по прежнему упорно отказываешься смотреть оригинальную документацию я, так и быть, сделаю для тебя сверхкраткую выжимку - специально в рамках недели помощи идиотам, не знающим всех прелестей английского и гугла :)

видел я вашу говнодокументацию...

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

с каких пор конвеерная обработка данных перестала быть актуальной?

я не говорил, что она неактуальна. Я говорил, что этой идиоме уже как минимум лет 40, она в LISP'е испокон веков.

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

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

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