LINUX.ORG.RU
ФорумTalks

Помогите расширить, углубить, дополнить


0

1

Пожалуйста.

www.linux.org.ru/wiki/en/User:shimon/WhyPerlSucks

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

★★★★★

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

Ты совершенно не понимаешь сути Perl. В Perl нет числового или строкового значения. В Perl есть скаляры. У которых есть скалярные значения. Скалярное значение может отображаться в двух контекстах - числовом и строковом. Можешь представить себе это как класс Scalar, у которого есть два метода-геттера - toNumber и toString. Если для данного скаляра toNumber возвращает 1.1, toString может возвращать «1.1», «Одна целая одна десятая», «адын точка адын». По умолчанию он возвращает «1.1», но это можно изменить, если таково желание программиста.

Xellos ★★★★★
()
Ответ на: комментарий от Vovka-Korovka

Об этом автор пишет в заключении:

Апологеты PERL, наверное, скрежещут зубами за ту горсть горьких пилюль, что пришлось только что проглотить. Они-то знают, что многих мелких неприятностей их тех, что обсуждались выше, при программировании на PERL можно избежать, указывая директивы use strict и use diagnostics в самом начале каждого файла и запуская интерпретатор с опцией -w, что для борьбы с неэффективностью, связанной с необходимостью компиляции программы целиком при каждом запуске, существует целый ряд стандартных модулей, вроде AutoLoader или SelfLoader, а для повышения «прозрачности» при разработке «классов» существуют дополнительные модули, доступные через CPAN. Жаль, что большинство из них не в состоянии понять, что дело тут не в опциях и директивах или прочей дребедени, не имеющей отношения к языку программирования, а в собственно языке программирования, тем более что никакие директивы, никакие опции и никакие дополнительные модули, по большому счёту, не спасают от самых главных недостатков PERL, имеющих принципиальное значение: отсутствия механизма статической типизации, избыточности языковых средств, отсутствия модульности и извращённой реализации ООП.

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

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

Никто не скрежещит. Это у питонистов сезонное обострение.

отсутствия механизма статической типизации

Ну прямо срыв покровов. Вот как можно серьезно воспринимать автора, пишущего такую чушь?

Vovka-Korovka ★★★★★
()
Ответ на: комментарий от Xellos

Ты совершенно не понимаешь сути Perl. В Perl нет числового или строкового значения. В Perl есть скаляры. У которых есть скалярные значения. Скалярное значение может отображаться в двух контекстах - числовом и строковом. Можешь представить себе это как класс Scalar, у которого есть два метода-геттера - toNumber и toString. Если для данного скаляра toNumber возвращает 1.1, toString может возвращать «1.1», «Одна целая одна десятая», «адын точка адын». По умолчанию он возвращает «1.1», но это можно изменить, если таково желание программиста.

Справедливости ради стоит упомянуть про случай со «строкой», состоящей из нуля

use strict;
use warnings;

my $var = "0";
if($var)
{
	print "ok\n";
}
else
{
	print "penis\n";
}

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

«I have 0 bucks»

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от Relan

Это очень хорошо. У думаю просто о числе, а не о том как оно представлено в памяти. Если мне важно представление я пишу на Си или ассемблере.

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

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

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

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

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

Только ведь в данном случае корректнее говорить, что JSON.pm ацтой, а не в целом Перл.

JSON.pm упирается в архитектурные грабли перла. По-другому он не может работать, это бы пришлось городить свою систему типов. Кстати, альтернатив JSON.pm как-то нет и не предвидится.

shimon ★★★★★
() автор топика
Ответ на: комментарий от Vovka-Korovka

Ну это я к тому, что надо помнить, что

if('') { print "1 true\n"; }
if("") { print "2 true\n"; }
if("0") { print "3 true\n"; }
if(0) { print "4 true\n"; }
if("1") { print "5 true\n"; }
if(1) { print "6 true\n"; }
if("00") { print "7 true\n"; } #Holy shit!!
my $var = "00";
my $var2 = $var + 1;
print "$var2\n";

выведет true в 5,6 и 7м(!) случаях, но 7й случай в числовом контексте эквивалентен нулю. Это во всех учебниках рассказывается, но не все об этом помнят, например, выходцы из других языков, которым потребовалось что-то написать/поправить на перле.

DELIRIUM ☆☆☆☆☆
()

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

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

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

Простое везение в том, что SpamAssassin на нем написан. Был бы он на питоне, на почтовиках питон бы и рулил.

Тем временем, есть входящий в SpamAssassin re2c, без которого работа с регулярками там бы не просто тормозила, а очень тормозила, что как бы намекает, что без костылей на перле ну никак.

Прозрачно намекаю, что можно было бы закрыть на это глаза, если бы не факт, что в перле регулярки — это святое, и в это святое нужно втыкать костыли.

shimon ★★★★★
() автор топика

Мне вот одно не понятно. Если не нравится язык - ну не используй его. Зачем тратить столько времени на его дискредитацию? Это время явно можно потратить на что-то полезное, чем выливание ушата грязи с непонятной целью. Уж тем болл зачем-то писать статью.

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

Это время явно можно потратить на что-то полезное, чем выливание ушата грязи с непонятной целью.

Каждый делает эмоциональную разрядку так, как ему нравится.

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

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

Тем временем, есть входящий в SpamAssassin re2c, без которого работа с регулярками там бы не просто тормозила, а очень тормозила, что как бы намекает, что без костылей на перле ну никак.

А такой костыль нужен конкретно для перла или для целого класса скриптовых языков?

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

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

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

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

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

стоит упомянуть про случай со «строкой», состоящей из нуля

Не стоит. Потому что этот случай не имеет ни малейшего отношения к числовому и строковому контексту. Это булевый контекст, и он имеет свои правила.

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