LINUX.ORG.RU

Область видимости для цикла loop в perl6.

 


0

4

Решил попробовать что за зверь такой этот Perl6.

Начал писать циклы и обратил внимание, что на такой момент когда я использую $i в двух разных циклах компилятор ругается на переопределение:

sub test() {
    loop (my Int $i = 0; $i < 10; $i++) { print "$i "}
    print "\n";
    loop (my Int $i = 0; $i < 10; $i++) { 
        print "$i ";
    }
}

test();
Potential difficulties:
    Redeclaration of symbol '$i'
    at C:\Users\batur\work\perl6/.\test.p6:4
    ------>     loop (my Int $i<HERE> = 0; $i < 10; $i++) {
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9

То есть по сути, если я правильно понял, в первом и втором цикле одинаковые $i. Почему так сделали? Почему не сузили область видимости этой переменной до цикла loop, в котором она объявляется? Я вот не могу прикинуть такой use-case, в котором бы от такой области видимости была польза

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

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

Звучит ужасно.

Если бы я был кем-то другим и хотел бы рассказать текущему себе, что не так в Perl 6, то я бы нашёл более серьёзные недостатки. Смотри: производительность, дохлый маркетинг и наследие «write only языка» (здесь нужно проигнорить, что perl 6 как раз фиксы этого языка, и называть всё обфускацией с нескучным синтаксисом), отсутствие библиотек (в кавычках, конечно, т.к. какие-то всё таки есть, но для большего эффекта лучше писать, что их вообще нет). Я бы сказал себе, что не смогу устроиться на работу (правда, на удивление пишу на работе на Perl 6, но это исключение из правил). Указал бы на то, что moarvm недостаточно вылизана. Сказал бы себе, что мало документации, та, которая есть, могла быть и лучше. Нет книжек или вообще ресурсов на русском.

Короче, есть огромное количество косяков, о которых я бы говорил себе, но эта штука с loop это, ммм. Её я бы не воспринял как серьёзный аргумент против. Скорее всего, я ответил бы себе, что в других языках есть полно такой фигни.

Например, в js есть this, который... очень интересный порой.

В cpython вообще молчат про переменные, определённые или нет. Написал fooo вместо foo и получай разрыв в рантайме. Тут даже циклы не нужны.

В хаскеле со стандартными строками фигня.

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

И так далее и так далее. Если от каждого языка отказываться из-за того, что нужно зорко следить за символами на мониторе, пожалуй, я бы не программировал вообще. Хотел бы стать фермером, возиться с землёй, молоть зерно.

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

Причем заранее ясно, что никаких рациональных причин его выбирать не существует

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

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

Если бы я был кем-то другим и хотел бы рассказать текущему себе, что не так в Perl 6, то я бы нашёл более серьёзные недостатки.

Но тред конкретно по loop. Я вообще не знаю ничего о перл6, но в перл5 все работает как ожидается, а тут засада. Это уже настораживает. Может там минное поле по всему языку, просто чтобы быть не такими как все.

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

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

Почему бы не сделать один глобальный scope, это упростит многие вещи, знай только следи за идентификаторами. Но так не делают чойта. Короче, сабжевое поведение контринтуитивно, особенно если ты мигрант с перл5 (а вы там все такие).

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

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

Стратегия «О, есть большая и очень разнообразная штука, о которой я вообще ничего не знаю и я знаю, что вообще ничего не знаю. Я вижу крупицу знания о ней и ЭКСТРАПОЛИРУЮ ЕЁ НА ВСЁ ВООБЩЕ» это стратегия, которая для нас интуитивна и естественна, но она не работает в большей части случаев. Очередной пример того, что «как ожидается» и «интуитивно» иногда может быть лажей.

Если данные неравномерные, то при экстраполяции начинается фэнтези. Чаще всего её нужно избегать любой ценой, она работает в очень ограниченном количестве случаев.

Lilly ()