LINUX.ORG.RU

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

 , , ларри уолл


5

2

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

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

★★

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

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

Хм...(смущенно). А что вы хотите на деле? Прошу привести более полный пример (а лучше всю программу) что/как и для чего хотите использовать.

очевидно, я хочу захватить мир; а разве бывают еще какие-то другие желания? сделать DSL, работающий с файлами-процессами-строками, и максимально похожий на bash

но можно поставить чуть более общую задачу — просто сделать DSL, работающий с файлами-процессами-строками

ладно, допустим облом в п.1 можно объяснить тем, что оператор > это оператор сравнения, а не запихивания чего-то во что-то; облом п.2 объяснить уже сложнее, тем более что Негибкие™ Статически Типизированные Языки Вроде Скалы И Хаскеля п.2 умеют, но ладно — не срослось; тогда:

3. как могла бы решаться эта задача (DSL, работающий с файлами-процессами-строками) в С++?

File f("/home/user/test.txt"); // ничего на диске не происходит
f = "foo"; // файл /home/user/test.txt затирается и записывается туда "foo"
f += "\nbar"; // в конец файла дописывается "\nbar"
std::cout << f; // печатается весь файл сразу
char* s = f; // весь файл сразу записывается в s (ну почти так)

на перле так можно? ну с некоторыми изменениями из-за отсутствия статической типизации, скажем так:

$f = file("/home/user/test.txt"); # ничего на диске не происходит
$f = "foo"; # файл /home/user/test.txt затирается и записывается туда "foo"
$f .= "\nbar"; # в конец файла дописывается "\nbar"
print $f; # печатается весь файл сразу
$s = "" . $f; # весь файл сразу записывается в *строку* $s 
www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

ладно, допустим облом в п.1 можно объяснить тем, что оператор > это оператор сравнения, а не запихивания чего-то во что-то; облом п.2 объяснить уже сложнее, тем более что Негибкие™ Статически Типизированные Языки Вроде Скалы И Хаскеля п.2 умеют, но ладно — не срослось;

Как у вас все запущено... Я не буду рассматривать варианты с похождениями в страну XS или работой с фильтрами (они помогут реализовать что требуется один-к-одному), а приведу простой пример.

BEGIN{
    package Obj;

    use Exporter;

    our @ISA = qw/Exporter/;
    our @EXPORT = qw/new r/;

    use overload '>' => sub{$_[0]->[0] ? `echo '$_[1]' > $_[0]->[1]` :  `echo '$_[0]->[1]' > $_[1]`};

    sub new{bless [0, @_]}
    sub r{bless [1, @_]}
}

package main;

BEGIN{Obj->import};

# теперь можно использовать так
my $o = new(1);
$o > "/proc/net/blah1";

# так
new(1) >"/proc/net/blah2";

# и еще так
3 > r"/proc/bet/blah2";

# а можно new заменить на `n' и использовать по схеме n(1) >"/proc/net/blahX"
anonymous
()
Ответ на: комментарий от www_linux_org_ru

Все же решил и на следующий пример ответить хотя подобной ерундой в угоду ООП заниматься желания никакого нет (похоже что у вас ооп головного мозга).

$f = file(«/home/user/test.txt»); # ничего на диске не происходит $f = «foo»; # файл /home/user/test.txt затирается и записывается туда «foo» $f .= «\nbar»; # в конец файла дописывается «\nbar» print $f; # печатается весь файл сразу $s = «» . $f; # весь файл сразу записывается в *строку* $s

BEGIN{
    package file;
    use Exporter;
    our @ISA=qw/Exporter/;
    our @EXPORT = qw/file/;

    sub file{my $s={file => $_[0]};open $s->{_fh},(-e $s->{file} ? "+<" : ">"), $s->{file} or die "$!"; bless $s;}

    use overload
	'<' => sub{my $f=$_[0]->{_fh}; truncate $f,0; print $f $_[1]},
	'.=' => sub{my $f=$_[0]->{_fh}; seek($f,0,2); print $f $_[1]},
	'""' => sub{local $/;my $f=$_[0]->{_fh}; print <$f>},
	'<<' => sub{local $/;my $f=$_[0]->{_fh};my $o=$_[1]; print $o (<$f>)},
	'<>' => sub{local $/;my $f=$_[0]->{_fh};return <$f>};
}

package main;
BEGIN{file->import};

my $f = file('/tmp/asd.txt');
$f < "foo"; # вариант "foo" > $f  реализуете сами

$f .= "\nbar";

# тут на выбор
STDOUT << $f;
print $f;

$s = <$f>;
anonymous
()
Ответ на: комментарий от www_linux_org_ru

Пока все ваши примеры лишь в рамках ООП и, вообще говоря, ориентированы на несущественную вещь - то как выглядит вызов. Неужели это важно как выглядит вызов? Ведь ерунда же, ну.

anonymous
()

Re: Промолчать, коллега, иной раз лучше. И я знаю почему так...

Нахрена вы это к каждому посту лепите?

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

Нахрена вы это к каждому посту лепите?

Автоматом подставляется в поле «заглавие». Не замечал. Учту.

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

Пока все ваши примеры лишь в рамках ООП

где ты увидел «рамки ооп» в пожелании определить оператор |> ?

тут нет не только рамок, но, скорее всего, нет даже *пересечения* с ооп — нет ни инкапсуляции, ни наследования, ни полиморфизма, ни identity — есть всего лишь небольшая модульность (т.е. вася пупкин может продолжить использовать оператор > для сравнения чисел_в_форме_строк, а я смогу использовать |> для записи в файл) и небольшая так сказать dsl-ность

и, вообще говоря, ориентированы на несущественную вещь - то как выглядит вызов. Неужели это важно как выглядит вызов? Ведь ерунда же, ну.

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

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

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

Ты на фразу «дрочить ногами» обиделся? Лучше бы учёл взгляд со стороны и понял как глупо ты выглядишь.

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

Все же решил и на следующий пример ответить хотя подобной ерундой в угоду ООП заниматься желания никакого нет (похоже что у вас ооп головного мозга).

чувак, прекращай бредить насчет моего мозга и вспомни, что разговор идет *именно* об «ооп и прочем», и аргументировать мою точку зрения *именно* на ооп попросил либо ты, либо весьма похожий на тебя анонимус Сегодня языку Perl исполнилось 25 лет! (комментарий)

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

А я знаю и уверен что perl силен и в модульности и в ООП (и прочее)

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

my $o = new(1);
$o > «/proc/net/blah1»;

бугага!

ты думаешь, что кто-то согласится так писать вместо «1» > «/proc/net/blah1» ?

3 > r"/proc/bet/blah2";

pure man's solution; этим кое-как можно пользоваться, вот только имеем те же проблемы, что и со new (см. ниже), и плюс к этому проблему «букв алфавита всего лишь 26»

new(1) > «/proc/net/blah2»;

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

есть еще один способ, который ты не указал — в перле есть возможность перегружать константы, но это (пусть меня поправят) неполное решение для данного случая — необходима работоспособность и без констант, например так

$a=<>; $b=<>; $a > "$proc/net/$b"; 

итак, допустим ты написал свой new, который делает из 1-цы объект, вася пупкин написал свой new, который у него называется object, и John Doe тоже написал несовместимую реализацию new, причем назвал его так же как и ты — new; далее я подключаю библиотеки, в которых юзаются все 3, и что дальше? как во всей этой каше жить?

я понимаю, если бы в перле был стандартный object-izer... он есть? где про него написано в man perl?

чуть подробнее насчет каши (твой new я буду называть obj (т.к. оbjectizer)):

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

template<class T> struct Object {
  Object(T& value): value(value) {}
  T& value;
};
template<class T> Object<T> obj(const T& value) { return Object<T>(value); }

разница с твоей реализацией new в том, что у тебя *сразу* уже перегружен оператор >, в то время как у obj никаких операторов не перегружено, и перегружать их можно *модульно*, т.е. *вне* класса Object (это позволяет мне перегрузить оператор >, а скажем васе пупкину перегрузить оператор + независимо от меня, и при этом мы с ним пользуемся одним и тем же классом Object и функцией obj)

правильно ли я понимаю, что в perl это невозможно, т.к. use overload должно употребляться строго внутри пакета?

опять, если я правильно понимаю, ты можешь попытаться спасти ситуацию, если сделаешь *все* операторы твоего объекта перегружамыми «снаружи» пакета через вызовы каких-то функций из твоего пакета; т.е. та простая реализация, что ты привел — не подходит

з.ы. по другим твоим постам тоже будет ответ

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

// Другой анонимус

«1» > «/proc/net/blah1»

Если я правильно понимаю чего ты хочешь добиться, то тебе всё равно придётся как-то указывать, что в данном случае надо использовать не операцию сравнения, а операцию записи в файл. В C++ это будет достигаться указанием типа для одного из значений, что никак не отличается от оператора new:

Object(1) > "/proc/net/blah1"; // C++

или

Object->new(1) > "/proc/net/blah1"; # Perl

С переменными будет так:

Object<int> x;
std::cin >> x; // с перегруженным оператором >> для Object
x > "/proc/net/blah1";

против

$x = Object->new;
$x->set(scalar <>);
$x > "/proc/net/blah1";

К сожалению, в perl5 сложно определить новый оператор типа «|>». В принципе, наверное, это можно сделать через source filters, но это делать надо аккуратно, и я сейчас не готов с этим разбираться. В C++ это вообще невозможно, разве что через внешние препроцессоры, но в этом случае возникают те же грабли, что и в перле. Интересно, что в perl6 такая возможность предусмотрена из коробки.

Что касается раздельной перегрузки операторов, никто не запрещает доопределять класс в процессе компиляции или выполнения программы:

# файл A.pm
package A;
...;
1;

# исполняемый файл
BEGIN {
 use A;
 package A;
 use overload '>' => sub { ... }
};

$x = A->new;
$x > '/proc/net/blah1';

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

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

Вот давай без этого, ок? Я тут устал бодаться с недочеловеками которые перескакивают с темы на тему как только у них заканчивается аргументация. Если говорим про перегрузку операторов (суть - как выглядит) - то будем говорить про перегрузку. Если про статическую типизация - то про типизацию. А то ты пытаешься упрекнуть меня типизацией тогда как речи вообще об этом не было. Если же вы что-то себе подразумеваете и не договариваете - то ко мне вообще какие претензии? Обмозгуйте на досуге какой у вас типаж что позволило вам сделать такое заявление.

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

а я смогу использовать |> для записи в файл) и небольшая так сказать dsl-ность

Я не понимаю целесообразоность этой ерунды. Расскажите. Вместо этой ненужности понятнее будет что-то типа cat(1, «/proc/net/blah») (или что-то типа strcat, echo, copy)

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

my $o = new(1); $o > «/proc/net/blah1»;

бугага!

ты думаешь, что кто-то согласится так писать вместо «1» > «/proc/net/blah1» ?

3 > r"/proc/bet/blah2";

pure man's solution; этим кое-как можно пользоваться, вот только имеем те же проблемы, что и со new (см. ниже), и плюс к этому проблему «букв алфавита всего лишь 26»

Мы сделаем так: cat(1, «/proc/net/blah1»). Знаете почему мы так делаем? - Потому что это ясно и понятно, тогда как что делает перегруженный |> надо еще выяснить. А для вас, да, похоже что жизни с cat(...) никакой нет.

// (когда нам нужна обувь - то подбираем обувь по множеству параметров, а не упираемся в то что нам нужны только розовые туфли со стразами).

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

new(1) > «/proc/net/blah2»;

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

Тут есть еще вариант: или ты сам убогии ибо не понимаешь базовых примитивов языка. У тебя, кстати, не все тот ли классический случай, когда человек недопонимает, но уже имеет мнение? New - это не костыль. New - это конструктор который уводить нас от примитивов. Расскажете нам, пожалуйста, что случится если переопределить операторы языка на уровне базовых примитивов с учетом того что на этих самых примитивых стоится многоуровневая инфраструктура? (напомню что базовые примитивы в perl есть простые сущности, как в Си, а не являются составной, как к примеру, в виде объекта в Java)

итак, допустим ты написал свой new, который делает из 1-цы объект, вася пупкин написал свой new, который у него называется object, и John Doe тоже написал несовместимую реализацию new, причем назвал его так же как и ты — new; далее я подключаю библиотеки, в которых юзаются все 3, и что дальше? как во всей этой каше жить?

Тебе в perl жизни не будет ибо ты не понимаешь perl. Вот вы говорите что у вас каша потому что вы потерялись среди вызовов ибо не осилили принципов на чем стоится мощь perl. Ну а у нас все ясно ибо 1) квалифицируем вызов как следует; 2) мы ненужной ерундой навроде перегрузки операторов для примитивов (!) не занимаемся. Прегрузка делается лишь только в случаях когда это целесообразно (например реализация операции надо комплексными числами).

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

разница с твоей реализацией new в том, что у тебя *сразу* уже перегружен оператор >, в то время как у obj никаких операторов не перегружено, и перегружать их можно *модульно*, т.е. *вне* класса Object (это позволяет мне перегрузить оператор >, а скажем васе пупкину перегрузить оператор + независимо от меня, и при этом мы с ним пользуемся одним и тем же классом Object и функцией obj)

правильно ли я понимаю, что в perl это невозможно, т.к. use overload должно употребляться строго внутри пакета?

1. На будущее: со своими догадками (суть - ты сам еще не разобрался) пожалуйста к google, man, соседу-алкашу, ...

2. Это кретинизм - у одного объекта этого класса оператор работает так а у объекта этого класса - иначе. Те кто с головой дружит знает что такие вещи разрешаются через наследование. Скажите пожалуйста, вы че, реально такими вещами занимаются? (если да - то напомните мне что ВЫ СЧИТАЕТЕ быдлокодом). Поскольку oveload делается для типа (класса) то и вызов делается для него.

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

PS: И вообще, тут тебе не консультанты. Разговор был про то что ты РАССКАЖЕШЬ а НЕ БУДЕШЬ СПРАШИВАТЬ а можно ли так - или можно ли эдак. А то твоя тактика похооже на ПЕРЕБОР ВАРИАНТОВ С ЦЕЛЬЮ ХОТЬ ЗА ЧТО-ТО ЗАЦЕПИТЬСЯ.

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

Ты на фразу «дрочить ногами» обиделся? Лучше бы учёл взгляд со стороны и понял как глупо ты выглядишь.

1. Ты интерпретируешь мой вопрос как обиду? Но был же вопрос.

2. А стоит ли учитывать взгляд «такого» человека? Может мне еще и мычание быдла нужно учитывать?

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

... Вообще говоря, я изначально обращался к drBatty, но видимо баттхёрт помешал Вам это заметить. :D

Я отчётливо понимаю как именно и какие именно вопросы следует задавать перловикам. :} /* Улыбка в духе Mysta */

Проблема в том, что если копнуть глубже, то получается что весь баттхёрт, сопровождающий излияния перловиков, происходит от простой вещи — они тупы и непонятливы. «Шаблонизация мышления» имеет характер, не позволяющий воспринимать окружающую реальность, точнее те её аспекты, которые не совпадают с «единственно истинной верой правоверного перловика». При наличии такого «рассогласования», перловик впадает в рефлексию на заданную тему и врубает баттхёрт на полную. Вплоть до того, что может даже не понимать что одним из путей, которые есть в пределах TIMTOWTDI является путь полного неиспользования перла. :D

В качестве издёвки. :D Я не великий поклонник python, но я знаю точно что такая игра как EVE-Online, на нём и написана (вариант stackless python). Вызывает искреннее недоумение — как же так, perl + OpenGL на 20% быстрее питона (на основании http://en.wikipedia.org/wiki/Perl_OpenGL), но на нём аналогичного уровня игр ни кто не написал? Видимо, проблема синхронизации команды перловиков даёт о себе знать.

/* Касаемо моей сути, так мне безразлично что Вы там изволите думать. Это Ваши персонально-половые проблемы. А больше всего я доволен тем, что сейчас вот задумался — а на кой хрен мне вообще перл в системе? Тот код, в виде некоторого числа однострочников, которые я использую, может быть спокойно переписан на С с использованием http://www.gnu.org/software/libc/manual/html_node/Regular-Expressions.html или, на всякий пожарный, с libpcre. У меня достаточно путей сделать это. Да и в скриптах можно будет не подгружать сам по себе перл, а просто использовать бинарники (само собой что перл будет выкинут из системы, ещё и место освободится :D). Это радует. */

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

Это, своего рода, "метка"...

... Если Вы посмотрите на «оформление», то заметите что постинги одного из анонимусов могут быть легко отличимы благодаря своеобразному «форматированию». «Заглавие» заканчивается многоточием (и оно есть), а тело сообщения начинается многоточием. В дальнейшем, при ответах, в теме сообщения будет «Re:что я изначально написал». Так проще фильтровать то, что касается именно меня. :D

Мне влом постоянно подписываться «искренне Ваш mr_noone» и влом просить администрацию восстановить утерянный мною пароль.

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

А стоит ли учитывать взгляд «такого» человека?

Можешь не учитывать и строить из себя напыщенного болвана дальше. Дело твоё.

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

Можешь не учитывать и строить из себя напыщенного болвана дальше. Дело твоё.

Было бы глупо с моей стороны обижаться на обыдленные заявления личностей «с определенными свойствами» (эти свойства харакетрны для быдла). Ты легко разберешься в корне проблем если сопоставишь свою позицию/заявления с общеизвестным документом на лурке. Успехов!

Кстати, ты пропустил следующее:

1. Ты интерпретируешь мой вопрос как обиду? Но был же вопрос.

А из-за чего ты этот пункт проигнорил?

А теперь откатимся к твоему раннему мычанию:

Ты на фразу «дрочить ногами» обиделся? Лучше бы учёл взгляд со стороны и понял как глупо ты выглядишь."

Теперь видишь всю актуальность твоего выпада? Комментарии будут? Если нет - расскажи почему.

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

... Вообще говоря. ...

Вот ты пишешь и пишешь, пишешь и снова пишешь свои умозаключения, но так и не понимаешь почему все твои дальнейшие суждения являются бредом. Я не знаю наверняка, но похоже что причина оторваности от реальности из-за самоуверенности и предвзатости. Или что-то еще?

//Я второй раз намекаю что тебе следует разобраться где проблемы. Хотя можешь конечно мычать дальше. Забавно.

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

В качестве издёвки. :D Я не великий поклонник python, но я знаю точно что такая игра как EVE-Online, на нём и написана (вариант stackless python). Вызывает искреннее недоумение — как же так, perl + OpenGL на 20% быстрее питона (на основании http://en.wikipedia.org/wiki/Perl_OpenGL), но на нём аналогичного уровня игр ни кто не написал? Видимо, проблема синхронизации команды перловиков даёт о себе знать.

Видимо, проблема синхронизации команды перловиков даёт о себе знать.

Разверни мысль (очень желательно с примером) о какой проблеме речь или дай ссылку где можно увидеть пример чтобы воспроизвести. О каких командах идет речь ?

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

У меня, слава Богу, нет ни перловиков, ни проблем, с ними связанных (одна из очевидных — явная тупость последних, что данный тред продемонстрировал со всей очевидностью). Вполне вероятно, и перла не останется, т.к. сейчас тестируется отдельная система с USE=-perl и со снесённым в топку перлом. Пока не вижу ни каких проблем.

/* По всей видимости, лучший путь использования перла — неиспользование его вовсе. :D */

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

О командах (team, crew, ...) разработчиков, олень! А Вы о каких? :D

/* Мде... Весьма перлово-специфичный идиотизм. Давненько такого не встречал... :D */

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

Ты легко разберешься в корне проблем если сопоставишь свою позицию/заявления с общеизвестным документом на лурке.

Лурколожец хуже содомита.

А из-за чего ты этот пункт проигнорил?

Из-за того, что мне не интересно участвовать в сраче «ты --- школьник, нет --- ты» я свернул эту ветку обсуждения. Если хочешь, можешь посраться и тут, но без меня.

Комментарии будут? Если нет - расскажи почему.

Нет. Я хотел сказать как глупо ты защищаешь перл. Я это сказал. Комментировать твою психологическую реакцию оставлю профессионалам.

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

А то твоя тактика похооже на ПЕРЕБОР ВАРИАНТОВ С ЦЕЛЬЮ ХОТЬ ЗА ЧТО-ТО ЗАЦЕПИТЬСЯ.

да, именно так, причем ради спасения утопающего перла тут я вместе с полной версией я даю также облегченные или альтернативные версии своих вопросов, чтобы он мог хотя бы что-то продемонстрировать в области «ооп, модульность и прочее»

т.е. пп. 1,2,3 — это на самом деле один вопрос, где п.2 это альтернативная версия, а п.3 — облегченная

ПЕРЕБОР ВАРИАНТОВ С ЦЕЛЬЮ ХОТЬ ЗА ЧТО-ТО ЗАЦЕПИТЬСЯ

вот ты пришел в магазин и покупаешь коммуникатор — ты ведь все протестируешь — не так ли? битые пикселы, западание кнопок, фотокамеру, ...

а если продавец тебе скажет «да ты тут делаешь ПЕРЕБОР ВАРИАНТОВ С ЦЕЛЬЮ ХОТЬ ЗА ЧТО-ТО ЗАЦЕПИТЬСЯ!!!11111», куда ты его пошлешь?

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

На будущее: со своими догадками (суть - ты сам еще не разобрался) пожалуйста к google, man, соседу-алкашу, ...

и тебе на будущее — если ты хочешь получать от меня точные высказывания, которые полностью проверены и не основаны местами на информации 10-летней давности или на моих догадках — то готовься платить в районе 100-200 баксов за мой пост

update: такая низкая цена только для ответов на те вопросы, которые меня самого тоже интересуют, для остальных — 1000-2000 баксов ЗА ПОСТ (количество постов для полного ответа на вопрос зависит от вопроса)

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

Я не понимаю целесообразоность этой ерунды. Расскажите. Вместо этой ненужности понятнее будет что-то типа cat(1, «/proc/net/blah») (или что-то типа strcat, echo, copy)

ок хорошо, вот вопрос номер 4: сделай бинарный оператор echo_to, чтобы было можно как-нибудь так:

1 echo_to "/proc/net/blah"
или как в хаскеле:
1 `echo_to` "/proc/net/blah"

cat(1, «/proc/net/blah»)

чувак, ты вообще разницу между

cat 1 > file
и
echo 1 > file
знаешь или нет?

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

Это кретинизм - у одного объекта этого класса оператор работает так а у объекта этого класса - иначе. Те кто с головой дружит знает что такие вещи разрешаются через наследование. Скажите пожалуйста, вы че, реально такими вещами занимаются? (если да - то напомните мне что ВЫ СЧИТАЕТЕ быдлокодом).

это хороший вопрос, на который отвечать полностью долго, и поэтому вот для начала краткий ответ — такая ситуация получается не потому, что «я этими вещами занимаюсь», а потому, что «этими вещами» практически гарантированно займутся два или более *независимых* автора библиотек (речь идет о написании своего objectizer-а, а не о перегрузке оператора >)

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

(кроме того, в с++ тип Object будет параметризованный, так что «у одного объекта этого класса оператор работает так а у объекта этого класса - иначе» скорее неверно)

Те кто с головой дружит знает что такие вещи разрешаются через наследование.

это опять хороший вопрос

разрешать такие вещи через наследование — это устаревшая и не очень удобная практика; более того, здесь как раз возможно и проявляется преимущество статики над динамикой

когда программист А пишет «asdf» > «/path/to/file», а программист В пишет if( «7» > «123» ), то они пользуются разными *системами обозначений*, или просто разными *обозначениям*; тот смысл, который они вкладывают в оператор >, совершенно различен, и это одна из особенностей разработки, которую *должна* поддерживать модульность (и совсем другой вопрос, в каких рамках такое надо сознательно применять)

подход прогеров на динамически типизированных языках примерно таков: «>» это ключ (единого для всех объектов типа «строка») хэша, существующего в рантайме, а значение хэша — это операция, которую надо вызвать; перезаписать это значение можно только через наследование (реально перезаписывается конечно не значение, а тайптег или адрес того самого хэша, в котором ищутся операции)

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

пример тонких различий в обозначениях: прогер А рассчитывает, что (NaN==NaN) вычисляется как true, а прогер В рассчитывает, что (NaN==NaN) вычисляется как false

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

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

считать строку «примитивом» могут лишь мозги примитива, уж извините, не сдержался

user@host $ perl -We '$a=1; $b="1"; use Data::Dumper; print Dumper $a; print Dumper $b;'
$VAR1 = 1;
$VAR1 = '1';

информация о типе объекта (что объект это строка или целое) имеется, т.е. вся информация, которая необходима для перегрузки в рантайме — имеется

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

Расскажете нам, пожалуйста, что случится если переопределить операторы языка на уровне базовых примитивов с учетом того что на этих самых примитивых стоится многоуровневая инфраструктура? (напомню что базовые примитивы в perl есть простые сущности, как в Си, а не являются составной, как к примеру, в виде объекта в Java)

А. как я говорил — строка это не примитив

В. интересно, где в кишках перла используется «123»>«4»? подозреваю, что нигде, и даже вряд ли где-то используется «123» gt «4» (вряд ли — т.к. хэши не сортируются при печати)

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

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

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

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

мой переход на другую тему инициирован исключительно твоим вопросом; а тема про перегрузку операторов себя похоже пока не исчерпала

www_linux_org_ru ★★★★★
()

заодно вот ответ на вопросы 2 и 4 в негибкой_статически_типизированной (ТМ) скале

object MyExtensions
{
  class RichStr(i: String) {
    def echo_to(s:String) = "now working hard to echo " ++ i.toString ++ " to " ++ s;
    def |>(s:String) = echo_to(s);
  }
  implicit def richStr(i: Int) = new RichStr(i.toString())
  implicit def richStr(i: String) = new RichStr(i)
}

object App extends Application
{
  import MyExtensions._

  val test1 = 1 echo_to  "/tmp/file1";
  val test2 = "asdf" echo_to  "/tmp/file2";

  println(test1);
  println(test2);
  println( "qwerty" |> "/tmp/file3" );
}
www_linux_org_ru ★★★★★
()

исходя из 1,2,3,4 становится понятнее, почему перл пригоден, грубо говоря, только для написания программ, исполнение которых, грубо говоря, чисто data driven

это потому, что проблемы написать на перле 1 |> «/proc/net/blablabla», но при этом, *если* надо читать входной поток, строки которого будут законченными выражениями на-каком-то-простом-языке-похожем-на-перл, и этот язык позволяет строку 1 |> «/proc/net/blablabla», и если ее можно с помощью регекспов распарсить или превратить во что-то удобное  — то все волшебным образом меняется, и перл становится одним из хороших языков для реализации этой задачи

кстати, то, что до 5-й версии в перле не было вложенных структур данных, говорит о том же — перлом пользовались тогда, когда ДАННЫЕ В ПАМЯТИ НЕ НУЖНЫ — ВСЕ ЧТО НАДО ЕСТЬ В STDIN (ну или убогонькие данные сгодятся)

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

У меня, слава Богу, нет ни перловиков, ни проблем, с ними связанных (одна из очевидных — явная тупость последних, что данный тред продемонстрировал со всей очевидностью). Вполне вероятно, и перла не останется, т.к. сейчас тестируется отдельная система с USE=-perl и со снесённым в топку перлом.

Пока не вижу ни каких проблем.

Еще ты их увидел. Проблемы видны по этому сообщению. Я уже говорил ранее.

(одна из очевидных — явная тупость последних, что данный тред продемонстрировал со всей очевидностью)

Ну вот - еще одна черта проявляется. Я в тебе не ошибся.

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

Разверни мысль (очень желательно с примером) о какой проблеме речь или дай ссылку где можно увидеть пример чтобы воспроизвести. О каких командах идет речь ?

Смотри как вопрос сформулирован.

О командах (team, crew, ...) разработчиков, олень! А Вы о каких? :D

/* Мде... Весьма перлово-специфичный идиотизм. Давненько такого не встречал... :D */

А теперь смотри на свою реакцию. Явные признаки быдла.

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

Ты легко разберешься в корне проблем если сопоставишь свою позицию/заявления с общеизвестным документом на лурке.

Лурколожец хуже содомита.

Какая проницательность.

А из-за чего ты этот пункт проигнорил?

Из-за того, что мне не интересно участвовать в сраче «ты --- школьник, нет --- ты» я свернул эту ветку обсуждения. Если хочешь, можешь посраться и тут, но без меня.

Комментарии будут? Если нет - расскажи почему.

Нет. Я хотел сказать как глупо ты защищаешь перл. Я это сказал. Комментировать твою психологическую реакцию оставлю профессионалам.

Да, лучше время на тебя не тратить ибо похоже что ты по типу мышления не дотянешь чтобы понимать некоторые вещи.

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

А то твоя тактика похооже на ПЕРЕБОР ВАРИАНТОВ С ЦЕЛЬЮ ХОТЬ ЗА ЧТО-ТО ЗАЦЕПИТЬСЯ.

да, именно так, причем ради спасения утопающего перла тут я вместе с полной версией я даю также облегченные или альтернативные версии своих вопросов, чтобы он мог хотя бы что-то продемонстрировать в области «ооп, модульность и прочее»

т.е. пп. 1,2,3 — это на самом деле один вопрос, где п.2 это альтернативная версия, а п.3 — облегченная

Перл никуда не утопает, скорее наоборот. Примеры, как я вам демонтрировал ранее, реализуются легко на объектном уровне. Но вы цепляетесь за то что нет объектных возможностей работать в perl на уровне примитивов (аналог уровню Си). Продолжу в другом сообщении.

ПЕРЕБОР ВАРИАНТОВ С ЦЕЛЬЮ ХОТЬ ЗА ЧТО-ТО ЗАЦЕПИТЬСЯ

вот ты пришел в магазин и покупаешь коммуникатор — ты ведь все протестируешь — не так ли? битые пикселы, западание кнопок, фотокамеру, ...

а если продавец тебе скажет «да ты тут делаешь ПЕРЕБОР ВАРИАНТОВ С ЦЕЛЬЮ ХОТЬ ЗА ЧТО-ТО ЗАЦЕПИТЬСЯ!!!11111», куда ты его пошлешь?

1. Маловато восклицательных знаков.

2. Вот ваше сообщение, а вот мой ответ. Суть моего ответа: «Я с вашим заявлением не согласен, но если вы настаиваете на своей позиции - расскажите основание ваших заявлении.» То есть я полагаю что за вашим заявлением (ваше сообщение) есть нечто существеннее интуитивных догадок. Ну а дальше с вашей стороны начинается перебор вариантов. Еще и несколько неуместный (в контексте вашего заявления) пример с продавцом привели сейчас. Расскажите, пожалуйста, как мне вас понимать или я вам дам расклад как я интерпретирую это поведение и почему.

3. С учетом п.2 прокомментируйте обозначенное в п.1 явление.

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

и тебе на будущее — если ты хочешь получать от меня точные высказывания, которые полностью проверены и не основаны местами на информации 10-летней давности или на моих догадках — то готовься платить в районе 100-200 баксов за мой пост

update: такая низкая цена только для ответов на те вопросы, которые меня самого тоже интересуют, для остальных — 1000-2000 баксов ЗА ПОСТ (количество постов для полного ответа на вопрос зависит от вопроса)

1. ЧСВ over 9000 ? (риторический)

2. Вы не против если я повторюсь (прошлое сообщение, п.2) ?

2. Вот ваше сообщение, а вот мой ответ. Суть моего ответа: «Я с вашим заявлением не согласен, но если вы настаиваете на своей позиции - расскажите основание ваших заявлении.» То есть я полагаю что за вашим заявлением (ваше сообщение) есть нечто существеннее интуитивных догадок. Ну а дальше с вашей стороны начинается перебор вариантов. Еще и несколько неуместный (в контексте вашего заявления) пример с продавцом привели сейчас. Расскажите, пожалуйста, как мне вас понимать или я вам дам расклад как я интерпретирую это поведение и почему.

3. Понимаете ли вы почему здесь п.2 из прошлого ответа цитируется здесь? Прокомментируйте.

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

ок хорошо, вот вопрос номер 4: сделай бинарный оператор echo_to, чтобы было можно как-нибудь так:

1 echo_to «/proc/net/blah»

или как в хаскеле:

1 `echo_to` «/proc/net/blah»

Пример первого варианта уже приводился на объектом уровне (поэтому требуется чтобы хотя бы один из аргументов вызова был объектом). Ну а структура второго варианта мне не знакома. Второй пример аналогичен первому, но со «стразами» в виде кавычек, или как?

cat(1, «/proc/net/blah»)

чувак, ты вообще разницу между

cat 1 > file

и

echo 1 > file

знаешь или нет?

Да, конечно. Моя вина - недоглядел. Прошу прощения за синтаксическое недоразумение. Мой ответ подразумевал что реализация будет выполнена через явный вызов процедуры (echo, а не cat).

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

это хороший вопрос, на который отвечать полностью долго, и поэтому вот для начала краткий ответ — такая ситуация получается не потому, что «я этими вещами занимаюсь», а потому, что «этими вещами» практически гарантированно займутся два или более *независимых* автора библиотек (речь идет о написании своего objectizer-а, а не о перегрузке оператора >)

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

(кроме того, в с++ тип Object будет параметризованный, так что «у одного объекта этого класса оператор работает так а у объекта этого класса - иначе» скорее неверно)

Теперь понятно о чем речь. Как ранее упоминали, в perl даже можно больше: случае необходимости, определить/переопределить операцию можно с любой точки исполнения программ.

разрешать такие вещи через наследование — это устаревшая и не очень удобная практика; более того, здесь как раз возможно и проявляется преимущество статики над динамикой

когда программист А пишет «asdf» > «/path/to/file», а программист В пишет if( «7» > «123» ), то они пользуются разными *системами обозначений*, или просто разными *обозначениям*; тот смысл, который они вкладывают в оператор >, совершенно различен, и это одна из особенностей разработки, которую *должна* поддерживать модульность (и совсем другой вопрос, в каких рамках такое надо сознательно применять) ...

Ба...оператор vs функция. Вы думаете что в примере «asdf» > «/path/to/file» работает «>» в качестве оператора? Это, кстати, очень важный момент понимания значения терминов «оператор» и «функция». Кажется я начинаю догадываться почему вы делаете такой упор на вызов функции «со стразами» (через «>»). Прокомментируйте пожалуйста, почему в примере «asdf» > «/path/to/file» работает «>» вы вызов функции «>» назвали оператором.

..и это одна из особенностей разработки, которую *должна* поддерживать модульность..

Сначала надо разобраться с предыдущим вопросом «оператор» vs «функция». А там уже и доберемся до модульности с толкованием систем обозначении.

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

... В отличие от высказывавшихся здесь ораторов, которые пытаются (искренне, похоже), я отчетливо понимаю что вся дискуссия не стоит выеденного яйца. Как это будет — сперва вам (сладкой парочке) зададут дельные вопросы на основании вашех же слов, потом вы будете долго и нудно уверять всех что:

1 Вас неправильно поняли/истолковали.

2 Что общеупотребительные термины и скрывающиеся за ними понятия, в случае с перл принимают некое поистине мистическое значение, недоступное пониманию «быдла».

3 Да, в быдлячестве будет много упреков. Видимо, привычка судить по себе не проходит.

4 Вы будете дружно либо «не замечать» предельно простых вопросов. Либо будете под любым предлогом увиливать от простого ответа, если он вам не выгоден. Это мне всегда напоминало попытку попасть в собаку палкой (для перловиков подчеркиваю — деревянной, ни какого сексуального подтекста здесь нет).

...

Все это я видел. Не раз. Зачем мне это сейчас? Мне сейчас доставляет истинное удовольствие поржать над парой клинических идиотов, которые хоть что-то в ответ брякнуть пытаются. И я с ужасом думаю как опаскудел перл, если у него нониче такие апологеты. :D

/* А тем временем. С USE=-perl и после emerge - -depclean, система избавилась от 60 пакетов. Нужный функционал (для перловиков замечу — нужный мне функционал нескольких однострочников на перл) перенесен отчасти на bash, отчасти на С.*/

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

... user@host ... фиксированные адреса.

Это не интересно комментировать в силу причин которые скрываются в остальной части сообщения.

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

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

Ты не понимаешь/знаешь perl поэтому такие догадки. К тому же наблюдаются у тебя признаки ООП головного мозга (можешь плеваться, но признаки есть).

считать строку «примитивом» могут лишь мозги примитива, уж извините, не сдержался

Вот то что нужно нам. Взгляни сюда. Намек понятен?

Та же самая проблема что уже встречалась - ты даешь оценку (имеешь мнение) не владея предметом на должном уровне. Конечно же, речь идет о примитивах perl, а не о битах (надеюсь что ты не считаешь что символ составляющит строку - это составной объект).

Так вот, речь была про примитивы языка perl (вроде бы о perl речь идет). Ты когда свою оценку мне дал (на основании того как я считаю) давал ясно осознавал что одним из примитивов perl является скаляр, верно?

user@host $ perl -We '$a=1; $b=«1»; use Data::Dumper; print Dumper $a; print Dumper $b;' $VAR1 = 1; $VAR1 = '1';

Тут, вообще говоря, видна еще одна присущая быдлу черта - поверхностное суждение. Смотри сюда:

$ perl -E 'say ref \1;'
SCALAR
$ perl -E 'say ref \"1";'
SCALAR

Дальше идем сюда: http://perldoc.perl.org/functions/ref.html

И там видим:

Builtin types include:

    SCALAR
    ARRAY
    HASH
    CODE
    REF
    GLOB
    LVALUE
    FORMAT
    IO
    VSTRING
    Regexp

Что это? - Это примитивы perl. В противовес следующему:

$ perl -E'say ref bless [];'
main

$ perl -E'say ref bless [],"u_r_bydlo";'
u_r_bydlo

А теперь глянем сюда:

$ perl -MData::Dumper -E'$o=bless [qw/asd 123/]; say Dumper $o; @h=@$o; say Dumper \@h;'
$VAR1 = bless( [
                 'asd',
                 '123'
               ], 'main' );

$VAR1 = [
          'asd',
          '123'
        ];

Я тут демонстрирую фигуру высшего пилотажа за пределами понимания среднебыдловатого кодера с признаками ООП головного мозга. Мне рассказать что мне следует ожидать от среднебыдловатого кодера, который в силу убогости интеллекта (знания+мышление) не понимает (и не можешь понять потому что между знанием, которое надо принять и его представлением существует непреодолимое для быдла препятствие в виде его быдловатой модели поведения и его обыдленными методами принятия решении) что здесь было совершено два гиперскачка: от примитива к объекту и от объекта к примитиву?

Теперь я возвращаюсь в начальному вопросу.

Взгляни сюда. Намек понятен?

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

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

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

Рано хороните Гоголя. Цветок начинает раскрываться. Проследуйте сюда.

Как это будет — сперва вам (сладкой парочке) зададут дельные вопросы на основании вашех же слов, потом вы будете долго и нудно уверять всех что:

1 Вас неправильно поняли/истолковали.

2 Что общеупотребительные термины и скрывающиеся за ними понятия, в случае с перл принимают некое поистине мистическое значение, недоступное пониманию «быдла».

3 Да, в быдлячестве будет много упреков. Видимо, привычка судить по себе не проходит.

4 Вы будете дружно либо «не замечать» предельно простых вопросов. Либо будете под любым предлогом увиливать от простого ответа, если он вам не выгоден. Это мне всегда напоминало попытку попасть в собаку палкой (для перловиков подчеркиваю — деревянной, ни какого сексуального подтекста здесь нет).

Все это я видел. Не раз. Зачем мне это сейчас? Мне сейчас доставляет истинное удовольствие поржать над парой клинических идиотов, которые хоть что-то в ответ брякнуть пытаются. И я с ужасом думаю как опаскудел перл, если у него нониче такие апологеты. :D

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

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

... Какая зачудительнейшая фраза — «мне плевать до вас» (взято из Сегодня языку Perl исполнилось 25 лет! (комментарий), последний просто абзац). Как много она объясняет. :D

Ага, но во избежании недоразумения (вы то вряд ли будете сверять корректно ли вы поняли меня) я разверну мысль подробнее и с объяснениями. Ну а я надеюсь что следом ты развернешь непонятно на чем основанные свои личные умозаключения насчет фразы абзаца.

Я писал: «Я не буду спрашивать поняли вы это или нет - мне плевать до вас.» За СЛОВАМИ и ФРАЗОЙ скрыт следующий смысл: меня не заботить то как вы это поймете и поймете ли вообще так как мне безразлично ваше понимание, уровень образования и мышления. Я, как бы, в няньки и не нанимался вовсе.

Вот я рассказал. А теперь пожалуйста, раскрывай что и из-за чего ты заметил лишь одну ФРАЗУ за целым СООБЩЕНИЕМ.

//PS: ПОДОЗРЕВАЮ (то есть это предположение а не утрверждение) что тебя беспокоит ассоциативный мусор

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

... В таких случаях я всегда интересуюсь — а с чего Вы взяли что я буду заниматься поиском крупицы относительно здравого смысла в этом... скажем так, «потоке сознания» (будем максимально мягки с болезными)? :} Странные вы «клиенты»... Вас прёт, а мне опять ищи что вы там хотели сказать? Нет уж, дудки! Я же говорил уже — перловиков проще увольнять. И без долгих разговоров. Иначе это может подзатянуться.

anonymous
()
Ответ на: Краткий пересказ предыдущих 16 страниц от ugoday

[qoute] --- А у нас в перле можно дрочить ногами. --- Пробовали. неудобно. --- Ха.Ха! Неосиляторы. --- Реально же неудобно. Руками лучше. А ещё лучше --- с женщиной. --- Кого волнует мнение неосилятора? Дорасти до первого дана ногодрочки, тогда поговорим. --- Всё равно не понимаю --- зачем, когда есть нормальные способы. --- Тупой, потому что. И свободы свой осознать не способен. Иди, валяйся в стойле со своими бабами и не засти взор перлоэлите.

Как я догадываюсь, на этом месте все должны были трагически погибнуть от смеха?

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

«Your code is shit... your argument is shit.» Linus Torvalds.

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