LINUX.ORG.RU
 
shimon

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


0

1

Пожалуйста.

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

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


[#] Ответ на: комментарий от shimon 13.12.2011 19:52:56  
Xellos

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

**** ()
[#] Ответ на: комментарий от Vovka-Korovka 13.12.2011 19:11:35  
SOmni

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

>>-----Цитата---->>

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

<<-----Цитата----<<
** ()
[#] Ответ на: комментарий от SOmni 13.12.2011 21:59:01  
Vovka-Korovka
>>-----Цитата---->>

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

<<-----Цитата----<<

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

>>-----Цитата---->>

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

<<-----Цитата----<<

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

* ()
[#] Ответ на: комментарий от Xellos 13.12.2011 21:20:20  
DELIRIUM

> Ты совершенно не понимаешь сути 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 13.12.2011 22:35:15  
Vovka-Korovka

А что хотели сделать при помощи проверки

if($var)

?

* ()
[#] Ответ на: комментарий от Relan 13.12.2011 17:20:07  

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

()
[#] Ответ на: комментарий от Xellos 13.12.2011 21:20:20  
shimon
>>-----Цитата---->>

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

<<-----Цитата----<<

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

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

**** ()
[#] Ответ на: комментарий от Relan 13.12.2011 20:48:46  
shimon
>>-----Цитата---->>

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

<<-----Цитата----<<

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

**** ()
[#] Ответ на: комментарий от Vovka-Korovka 13.12.2011 22:45:24  
DELIRIUM

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

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й случай в числовом контексте эквивалентен нулю. Это во всех учебниках рассказывается, но не все об этом помнят, например, выходцы из других языков, которым потребовалось что-то написать/поправить на перле.

*** ()
[#]  
visual

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

* ()
[#] Ответ на: комментарий от visual 13.12.2011 23:13:07  
shimon
>>-----Цитата---->>

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

<<-----Цитата----<<

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

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

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

**** ()
[#]  

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

**** ()
[#] Ответ на: комментарий от roy 13.12.2011 23:37:14  
shimon
>>-----Цитата---->>

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

<<-----Цитата----<<

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

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

**** ()
[#] Ответ на: комментарий от shimon 13.12.2011 23:17:05  
Xenesz
>>-----Цитата---->>

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

<<-----Цитата----<<

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

*** ()
[#] Ответ на: комментарий от shimon 14.12.2011 2:00:05  

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

**** ()
[#] Ответ на: комментарий от shimon 13.12.2011 23:04:16  
Xellos

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

**** ()
[#] Ответ на: комментарий от DELIRIUM 13.12.2011 22:35:15  
Xellos
>>-----Цитата---->>

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

<<-----Цитата----<<

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

**** ()