LINUX.ORG.RU
Ответ на: комментарий от Deleted

Ооооок :-D

А это не моё мнение, это официальная позиция разработчиков. Или 1.0 уже вышел? ;-)

Ты не прав, говоря так.

Конечно не прав. Но, как говорят собачники, весна покажет кто где срал...

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

Ага, при этом на perl и mojolicious работает куча неслабых сервисов: nic.ru, reg.ru, livejournal.com, logitech.com, NASA и много других.

Два слова: perl5 и legacy.

Чего там далеко ходить, у самих на работе request tracker и я его немного патчу иногда.

Какое это имеет отношение к Perl 6 у которого с Perl 5 только пять общих символов в названии?

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

Два слова: perl5 и legacy.

два слова: nytprof и metacpan.

Людям нравится perl, они пишут довольно сложные программы и модули, выкладывают их, создают соц.сеть для перл-разрабов, «субботники» по уборке модулей и т.д. Что будет с перл6 поглядим, да. А вот как умер перл5 - всем бы так жить.

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

А это не моё мнение, это официальная позиция разработчиков. Или 1.0 уже вышел? ;-)

Можно назвать 141 (не намекаю на системд), готовей от этого не будет.

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

Можно назвать 141 (не намекаю на системд), готовей от этого не будет.

Так Сам-то что по этому поводу (готовности) говорит? ;-)

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

А вот как умер перл5 - всем бы так жить.

Обычный такой белый карлик. (Для тех кто в курсе что это.)

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

Как нормальный скриптоязык большинство выбирает пистон, фанаты криптосинтаксиса - раби.

В 2015 году?
Вы из криокамеры пишете?

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

Все правильно пишет. Глянь вакансии по перлу. И именно не веб. Удивишься, но на нем почти никто уже не пишет. Да, веб-морды у всяких рег.ру под каталистом... пока есть перл-разрабы. Потом, как главный их свалит будут искать человека год-два. А потом решат ну иво нафиг, да перепишут на рельсах или еще лучше на ерланге (дядя такой придет и продаст yaws + свои плагины к нему) и все будет летать :)

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

Все правильно пишет. Глянь вакансии по перлу.

А разве я что-то о Перл написал?

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

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

Вас не понять.
Дефектом речи страдаете?

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

Вас не понять.

С какой частью поста возникли трудности?

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

Иным и плюсы не готовы. :)

Иным

Занятно. А есть в мире инициативы по защите прав большинств?

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

Какое это имеет отношение к Perl 6 у которого с Perl 5 только пять общих символов в названии?

пять общих символов

Заинтриговал прям.

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

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

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

Заинтриговал прям.

«Perl », ибо пробел это тоже символ. :-D

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

Пока есть рельсы, deprecated оно не станет.

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

Я бы предпочёл «==» вместо «eq», ну да ладно. Видимо, это tim toady.

Это не tim toady, это такой способ указания куда приводить типы (eq - операнды строки, == - операнды числа). Иначе будет как в js:

bash$ node
> var x = 4
undefined
> var y = "4"
undefined
> x == y
true
> x+2 == y+2
false
> 

Или как в Питоне - у него тупо 4 != «4». Ещё бы объявление переменных с явным указанием типа добавить :)

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

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

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

Дык сделали же, не? Я не перловик, нормальную ссылку не кину. Ну, разве что первый линк из гугла: http://www.dlugosz.com/Perl6/web/type-synop.html

Тут мне, как питонисту, завидно. Хотя, для питона тоже пилят системы проверки типов.

идея «приводящих» операторов нигде, кроме перла, не прижилась

Мне тоже она не нравится. Перл всё цепляется за строки, но мир гораздо больше чем потоки текста. А написать str(4) == «4» не так уж сложно, зато не нужен новый оператор на каждый тип данных. Я вообще склоняюсь к тому что чем меньше неявного тем лучше. И люблю компактное «ядро» языка без кучи keywords, operators, итп.

Но это моё имхо, миллионы перловиков со мной не согласны :).

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

Я вообще склоняюсь к тому что чем меньше неявного тем лучше

вот скажи, в перле понятно чем является этот код:

@{ $column->{ $row[3] } }

а в питоне:

column[row[3]]
row - это словарь или массив? А column? И что они возвращают? Вот в перле - явно видно. Понимаешь о чем я? :-D

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

row - это словарь или массив?

А если ни то, ни другое? Кто сказал, что все коллекции сводятся к словарю и массиву?

Вот в перле - явно видно

И как там выглядят прочие коллекции?

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

row - это словарь или массив?

Я так на питоне я вообще не пишу. Мне даже не сколько тип данных важен сколько смысл этого кода. Вот что за магическое «3»? Что хранится в row (не типы данных типа int, float, str, а, скажем, num_packets, performance_ratio, user_name)?

Я бы хотел вот такой код:

num_posts[user.name]

Где user.name это, скажем, named tuple. Т.е. tuple у которого доступ к полям возможен через осмысленные атрибуты, а не через цифровые индексы.

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

Если так писать, то язык практически не важен. В том же Modern Perl код очень приятно выглядит, не вызывая проблем с чтением/сопровождением. При этом, тип данных не теряется из виду, как в случае с питоном.

А написать str(4) == «4» не так уж сложно, зато не нужен новый оператор на каждый тип данных.

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

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

А если ни то, ни другое?

да, вообще не понятно что это.

И как там выглядят прочие коллекции?

приведи пример.

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

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

Что тут приводить, если речь идет о тексте?

Если речь идет о «разнородных» данных, то для того, чтобы их можно было обрабатывать, нужно иметь общий интерфейс над ними. В пистоне поэтому и популярен так называемый duck typing.

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

тип данных не теряется из виду

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

обрабатывать много разнородного текста, то заколебёшься в каждой операции приводить типы.

У меня никогда не было проблем с «заколёбыванием». Можно пример где «питон сосёт»? И что за есть «разнородный текст»?

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

приведи пример

Что если я хочу матрицу? Или у меня кастомный list, делающий что-нибудь ещё по обращению к каждому элементу? В python синтаксис один и тот же благодаря __getitem__ и __setitem__. А что в perl когда я хочу сделать свой тип коллекций?

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

Ну или у меня есть namedtuple, оттуда можно вытаскивать как по номеру, так по имени. В перле как?

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

О каких типах идёт речь?

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

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

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

Можно пример где «питон сосёт»?

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

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

Что если я хочу матрицу?

многомерный массив.

Или у меня кастомный list, делающий что-нибудь ещё по обращению к каждому элементу?

просто массив.

В python синтаксис один и тот же благодаря __getitem__ и __setitem__

ну да, и нихрена не понятно что есть что. А в перле понятно что:

# это матрица
$matrix[ $row ][ $column ];

# это массив, где нулевой аргумент - функция, которую вызываем:
&{ $array[0] }
# есть еще такой синтаксис:
$array[0]->( args );

А что в perl когда я хочу сделать свой тип коллекций?

всё просто и очевидно :)

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

Ну или у меня есть namedtuple, оттуда можно вытаскивать как по номеру, так по имени. В перле как?

покажи пример.

Даже в питонах это делается быстро и читаемо.

но я не покажу, да? :-P

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

многомерный массив.

Что именно понимается под массивом? Только встроенный тормозной аналог списков или есть аналоги numpy? И если есть — как там реализуется доступ к элементам?

ну да, и нихрена не понятно что есть что.

Если оно крякает как хэшмэп — это хэшмэп. Если крякает как список — это список. Если крякает как оба — это ещё лучше.

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

покажи пример.

from collections import namedtuple
Point = namedtuple('Point', ('x', 'y'))
a = Point(1, 2)
print(a.x == a[0])  # True
print(a.y == a[1])  # True
x3al ★★★★★
()
Ответ на: комментарий от Deleted

но я не покажу, да? :-P

from collections import defaultdict

def parse_url(source='param1=value1&param2=value2&param3=value3&param1=value11&param1=value111'):
    result = defaultdict(list)
    for param in source.split('&'):
        name, value = param.split('=')
        result[name].append(value)
    return result

print(parse_url())  # defaultdict(<type 'list'>, {'param3': ['value3'], 'param2': ['value2'], 'param1' : ['value1', 'value11', 'value111']})

Сравни с тем writeonly, что там было. Можно записать и короче с list comprehensions, не спорю, но нафиг если страдает читабельность?

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

Я покажу. Только не повторяйте это дома.

d = {}
[d.__setitem__(key, d.get(key, []) + [value]) for key,value in [pair.split("=") for pair in s.split("&")]]
In: s = 'param1=value1&param2=value2&param3=value3&param1=value11&param1=value111'
In: d
Out: 
{'param1': ['value1', 'value11', 'value111'],
 'param2': ['value2'],
 'param3': ['value3']}

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

есть аналоги numpy?

есть PDL, и интеграция с R.

И если есть — как там реализуется доступ к элементам?

Максимально интегрированно в perl. Глянь сам, если детали так важны. Я не увлекался ни numpy'ем, ни PDL, ни R, чтоб говорить обь этом.

[code=python]

from collections import namedtuple Point = namedtuple('Point', ('x', 'y')) a = Point(1, 2) print(a.x == a[0]) # True print(a.y == a[1]) # True

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

$h{x} = $h{0} = \5;
$h{y} = $h{1} = \3;
# {
#     '0' => \5,
#     'x' => $VAR1->{'0'},
#     'y' => \3,
#     '1' => $VAR1->{'y'}
# };
Но сакагочек есть. Стандартные Scalar::Util=dualvar, Hash::Util* и много perl-модулей в cpan. При этом, ясность типов остаётся.

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

Сравни с тем writeonly, что там было.

Где?

$s = 'param1=value1&param2=value2&param3=value3&param1=value11&param1=value111';

for (split /&/, $s) {
    ($name, $value) = split /=/;
    push @{ $result{ $name } }, $value;
}

:-D

postman_ Красавчик :-P Повторять не буду, пример оказался слишком лёгкий.

Deleted
()
Ответ на: комментарий от Deleted
($name, $value) = split /=/;

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

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

dualvar

Боже, зачем это придумали?

ясность типов остаётся.

Ну почему, почему у тебя типы сводится к двум контейнерам и «скаляру»?

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

Вот откуда тут берется второй операнд?

из (split /&/, $s). Для каждого элемента, это же легко. Можно написать всё явно:

for my $pair (split /&/, $s) {
    ($name, $value) = split /=/, $pair;
    push @{ $result{ $name } }, $value;
}

Контексты и переменные по умолчанию - очень классная вещь, которая сокращает код:

while (<STDIN>) {
    # обрезать \r\n, если только это не комментарий или пустая строка
    chomp unless /^#/ or not length;
    
    /parse condition/   && do {}
    /another condition/ && do {}

    /between range/ ... /parse/ && do {}

    # и т.д.
}

# прибавить всем зарплату
s/\d+/\1+500/e for @{ $office{21} }; 
# или озаглавить улицы, добавить сокращение "ул."
s/^./\U\1/, s/^.*/ул. \1/ for @adresses;

удобно.

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

Контексты и переменные по умолчанию - очень классная вещь, которая сокращает код:

и срок жизни нервной системы

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

Боже, зачем это придумали?

Вот, человеку понадобилось обратиться к одному значению двумя способами. А это чем отличается? А не предвзят ли ты часом? ;)

Ну почему, почему у тебя типы сводится к двум контейнерам и «скаляру»?

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

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

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

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

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

Чтобы получить более удобный в некоторых случаях вид tuple. Tuple, если что — нечто вроде List из перла, но tuple можно юзать практически везде, где пролезет list (а вот list — аналог перлового Array). Соответственно, tuple иммутабельны и могут быть использованы как ключ хэша. А в перле так слабо?

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