LINUX.ORG.RU

Parrot, или Почему мы долго ожидаем Perl 6


0

0

"Как известно, впервые Perl был представлен на суд общественности Ларри Уоллом (Larry Wall) еще в конце 1987 г. В последующие несколько лет язык бурно развивался, одна за другой выходили новые версии, и уже в 1994 г. программисты работали с Perl 5. Однако с тех пор прошло тринадцать лет, и хотя за это время появлялись очередные релизы, номер текущей версии по-прежнему начинается с пятерки. Значит ли это, что Perl идеален? Спору нет, он очень хорош, но и предела совершенствованию, как известно, нет. А одна из причин задержки шестой версии состоит в том, что в ней ожидается поистине революционное новшество - переход на новую систему промежуточного представления кода."

>>> Статья на itc.ua



Проверено: maxcom ()

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

> Все объекты наследуют от единого суперкласса UNIVERSAL, чего нет в Питоне, там единого супоркласса нет.

"супоркласс" называется object. Иди, подучись.

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

>KRoN73 - да не изобретай ты фигню всякую, смешно уже ...

Я не изобретаю, это всё реальные примеры.

$ telnet localhost 1903
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Welcome To The L2J Telnet Session.
Please Insert Your Password!
Password: ****
Password Correct!
[L2J]
L2Summon.class "getOwner" { } japi-func: хозяин-саммона
: проверить-объект dup L2Summon.class instance-of? unless drop exit then хозяин-саммона . ;
L2World.class "getAllVisibleObjects" { } japi-static-func: все-объекты

все-объекты & проверить-объект do-list

Вывод: player 'Cepra' player 'Habibi' player 'Gordon' player 'Artizanka' player 'Cepra' player 'Cepra' player 'Habibi' player 'Habibi' player 'Habibi' player 'Krioliera' player '= Balancer =' player 'Cepra' player 'Habibi' player 'Habibi' player 'Gordon'

(Надо было ещё перевод строки добавить, но и этого достаточно)

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

Как ты будешь то же самое реализовывать не Питоне? Предусматривать все особые случаи заранее, вводя команды? :)

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

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

А это всеобщая тенденция :) И, кстати, одна из причин непопулярности того же Форта. Там неаккуратным кодом можно сам транслятор убить. В рамках JBForth я едва ли не половину усилий трачу на обеспечение выживаемости транслятора. Чего в обычных Фортах не делают, но учитывая средний уровень разработчика того же L2J...

А вот Jython вполне неплохо в этом проекте прижился. Именно потому что чуть что - бъёт программера по мозгам :D

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

> Как ты будешь то же самое реализовывать не Питоне? Предусматривать все особые случаи заранее, вводя команды? :)

1. Учимся пользоваться средней кнопкой мыши. :)

2. Если бы сервер был написан на Питоне, к нему бы обязательно прикрутили IPython (см.)

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

>1. Учимся пользоваться средней кнопкой мыши. :)

Может, сразу начнём пользоваться виндой? Что мне делать, если я этим рулю с КПК из pocket putty? :D

>2. Если бы сервер был написан на Питоне, к нему бы обязательно прикрутили IPython (см.)

Если бы сервер был написан на Питоне он бы не потянул обслуживать и десяток человек :D Просто для инфы - это около 40 тыс. взаимодействующих NPC/мобов + сотни игроков. Общее число активных объектов достигает 60..70 тыс. Размер мира в минимальных координатных единицах - 359680x324287x32768 :)

Конечно, можно к нему и Питон прикрутить. А Jython - так и уже прикручен. Вот только рулить этим делом часто нужно из исключительно однострочных и без возможности переделать клиентов :)

...

Да и без учёта синтаксиса. У Питона слишком "длинный" синтаксис. И то, что хорошо при обычном программировании выливается в конкретный геморрой, когда нужно срочно добить небольшое расширение, например, во время проведения массового эвента :D Да ещё с учётом того, что длина строки в клиенте около 200 символов, даже не 255 ;)

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

> Что мне делать, если я этим рулю с КПК из pocket putty? :D

"Get a life", как говорят американские товарищи.

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

> Может, сразу начнём пользоваться виндой? Что мне делать, если я этим рулю с КПК из pocket putty? :D

Завязывай придуряться! :) КПКшная венда, конечно, убогая, но копипаст оттуда пока ещё не убрали. :)

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

ero-sennin ★★
()
Ответ на: комментарий от KRoN73

> Да ещё с учётом того, что длина строки в клиенте около 200 символов, даже не 255 ;)

А вариант "отпилить этим сказочным чудо-программёрам йайца чайной ложечкой и написать нормальный человеческий клиент" не катит? :P

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

>Завязывай придуряться! :) КПКшная венда, конечно, убогая, но копипаст оттуда пока ещё не убрали. :)

А откуда ты копипастить-то будешь? С написанного отдельно исходника? Сорри, но я лучше выберу для этой цели иной язык :D

>Да и вообще, из того, что Питон не подходит для написания одноразовых однострочников заключать, что он не подходит для программирования - глупо, согласитесь.

Гы. Ткни пальцем, где я утверждаю, что Питон не подходит для программирования??? :D Не нужно домысливать за других. Был вопрос о том, что синтаксис Питона не позволяет его _принципиально_ использовать в _некоторых_ задачах :)

А так - Питон на сегодня в моих фаворитах, мне очень нравится этот язык :D И выбирая между, скажем, Перлом и Питоном даже в области прикладного скриптописания я выберу Питон. Не говоря уже о крупных программных проектах.

Просто, как говорится, "без фанатизма" (c). Язык должен выбираться под задачу. Один из многих. А не единственным языком пытаться охватить все задачи :)

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

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

> Определение инлайновых функций - это на самом деле очень редкая операция.

Редкая - для языков, которые не позволяют такое. А я постоянно использую. Передать несколько коротких или длинных инлайновых функций (сортировка, фильтрование, обработка конфликта) дело обычное для языков, позволяющих такое. И называть такой код бредовым и заставлять определять сотни функций, которые ни разу не будут больше использоваться, только потому как язык заставляет такое делать, более чем глупо.

Это как иметь мобильный, в котором есть лишь 2 операции (простота превыше всего, нам же звонить надо, а не играться). 1) Занести некий номер телефона по имени, и 2) выбрать для звонка это имя из списка (причём, пройдя полный список имён, потому как перескакивать сразу к нужному имени по букве или скобке - это порождение излишних сущностей). А если у меня есть хорошие причины быть недовольным таким интерфейсом мобильного:

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

* Я хочу сразу набирать номер, даже если он мне может изредка понадобится, но не хочется из-за этого засорять телефонную книжку, усложняя поиск

* Я не знаю покаместь имени, скрывающегося под этим номером

* Под данным номером телефона скрывается целая семья или рабочий отдел, не одно имя

* Некий номер телефона (несколько цифр) легче запомнить, чем имя и я знаю, что делаю

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

* Я хочу перенести телефоны древних друзей из старой книжки, но предварительно проверив, верны ли они, и лишь потом занести верные данные

* Некий момер телефона интерактивных и не может быть записан в память

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

> > Синтакс, позволяющий иметь лишь одну такую единицу за раз - убог до упомрачения.

> Михалыч, ты совсем больной, да? Кто тебе мешает делать вложенные блоки в питоне?

Если ты не понял из поста, что такое один блок на выражение (например манипулирование несколькими инлайновыми функциями в выражении), то переспроси, не вставай в позицию всезнайки-умника. В питоне просматриваются некие проблески разума; структуры данных, а также однострочные ламбды используют начало и конец блока, как в нормальных языках, вот если бы и в родных блоках обязательную индентацию отменили в пользу символа конца блока, мы бы не имели сей дискуссии. Мы бы спорили об остальных недостатках Питона, коих немало.

mihalych ★★★
()
Ответ на: комментарий от ero-sennin

>А вариант "отпилить этим сказочным чудо-программёрам йайца чайной ложечкой и написать нормальный человеческий клиент" не катит? :P

Никоим образом. Мы же с ними никак не связаны :D Люди пишут свою MMORPG в Корее, мы пишем эмулятор. Скоро, наверное, нас всех посадят :D Даже клиент самим отмодифицировать нельзя, ибо тогда посадят уже на 100% :)

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

> "супоркласс" называется object. Иди, подучись.

Ну-ка, подучи меня Питону, умник, а заодно и другим языкам программирования. Покажи, как я добавляю метод в этот суперкласс и он становится доступным для _всех_ существующих объектов, а потом убираю его и добавляю другой метод. В реально димамических языках с объектной моделью типа Smalltalk, таких как Perl 5 и тем более Perl 6 такое делается тривиально.

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

> Это ответ школьника-максималиста, с низкими требованиями в программировании

У меня требование - чтобы программа работала и её было легко поддерживать. Если у кого-то даунистические требования "хочу непременно всё в одну строку" - то он идёт лесом, поскольку к делу это никак не относится. Разве что у KRoN73 есть какие-то разумные оправдания, но я думаю и его беду можно решить (input, eval или на худой конец прокси-враппер для командной строки).

Школьник-максималист - это ты. Потому что тебе нужны от языка свистелки и перделки, а не удобство и надёжность использования. Потому что ты хочешь "самовыражаться" в коде, а не писать рабочие приложения. Это всё красноглазые пионерские приоритеты, к работе отношения не имеющие.

> Редкая - для языков, которые не позволяют такое.

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

> Покажи, как я добавляю метод в этот суперкласс и он становится доступным для _всех_ существующих объектов

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

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

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

Классика жанра :D C++

a = 2;
b = 2;
c = a * b;

чему равно c? :)

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

sergey@athlon:/tmp/plus$ cat main.cpp 
#include <iostream>
using std::cout;
main() {
        int a=2;
        int b=2;
        int c=a*b;
        cout << c;
}
sergey@athlon:/tmp/plus$ g++ main.cpp 
sergey@athlon:/tmp/plus$ ./a.out 
4

Я чего-то не понял? В чём прикол?

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

> Я чего-то не понял? В чём прикол?

C:\home\cpp>type test.cpp
#include <iostream.h>
class Nutz {
public:
    Nutz(int x) {
        data = x;
    }

    bool operator= (int x) {
        data = x;
        return true;
    }

    int operator* (int x) {
        return data-x;
    }

    int data;
}

main() {
    Nutz a(0);
    int b, c;

    a = 2;
    b = 2;
    c = a*b;

    cout << c;
}
C:\home\cpp>dmc test.cpp
link test,,,user32+kernel32/noi;


C:\home\cpp>test.exe
0

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

ну, если поставить себе такую цель, то конечно. :)

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

>Я чего-то не понял? В чём прикол?

Прикол в том, что a, b и c могут быть иного класса. А оператор умножения - переопределён. И, вообще, там может быть lvalue. Понятно, что пример гиперболизированный, но суть передаёт. В Си++ нельзя быть уверенным ни в чём, пока досконально не изучишь ВСЮ систему :)

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

> В Си++ нельзя быть уверенным ни в чём, пока досконально не изучишь ВСЮ систему :)

В Питон - тоже. Да и вообще в любом языке. Функция, названная multiply_matrices может форматировать диск в любом языке.

Задолбали _тупые_ наезды на Си++

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

Ну, так и скажи, что от тебя работодатель требует писать как можно более серый код, дабы в любой момент заменить тебя на другого дешевого программиста. Ну, так для этого и Perl тоже использовать можно, причём не менее, а возможно более эффективно, чем Python. Вот у нас работают программисты без высшего образования, пишут на Apache::ASP, это по типу PHP, только на Perl, то есть в принципе покруче.

А моя работа, к счастью, творческая, и заменить меня очень трудно, потому как пишу я развитые фреймворки для этих самых конечных программистов и цель моя сделать самый интуитивный и простой в использовании интерфейс к совсем непростой функциональности. И тут уж Perl даёт мне волю развернуться, не язык, а сказка для данной задачи. Можно свой domain-language сделать, с максимальной эффективностью описывающий концепты проекта.

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

Помнится, во время учёбы, любимой местной пакостью в компьютерных залах было подсесть к выполняющему домашнее задание по Лиспу, отвлечь его и быстро набрать в его консоле: (define + (lambda (x y) (- x y)))

Естественно, тогда ещё не было scheme в помине, был какой-то другой диалект, даже не CLISP, так что синтакс чуточку различался. Одно лишь точно помню, плюс надо было брать в стринг, то есть '+.

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

>Задолбали _тупые_ наезды на Си++

Хорошо. Тогда иди изучать понятие side-effects.

Задолбали, ничего кроме С++ не видевшие :)

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

> иди изучать понятие side-effects.

?

> Задолбали, ничего кроме С++ не видевшие :)

Ура, телепаты вышли из отпуска! :D

Если ты не знал - в Питоне есть перегрузка операторов. И еще в куче языков, от CLU до Хаскеля - но все доколебались именно до Си++. Как будто это самый главный его недостаток.

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

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

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

> Ну, так для этого и Perl тоже использовать можно

Да что угодно использовать можно, факт. Вот только для перла ещё придётся спецификацию конкретного Coding Style раскатывать и вбивать потом новым девелоперам в бошки кувалдой. И пороть "умников" за ковбойский код в ядре проекта. У меня на это нет ни времени, ни желания.

> потому как пишу я развитые фреймворки для этих самых конечных программистов... И тут уж Perl даёт мне волю развернуться, не язык, а сказка для данной задачи...

Аа, конечно. Architecture astronaut. Так бы сразу и представился. А у вас там до дела-то доходит? Или всё языки сочиняете?

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

> но все доколебались именно до Си++.

Ничего удивительного. Многие познакомились с перегрузкой операторов и продвинутым ООП именно в C++. Вот штамп и закрепилсо.

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

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

>Если ты не знал - в Питоне есть перегрузка операторов

Ты не поверишь, но я не (только) перезагрузку имел в виду.

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

> Ты не поверишь, но я не (только) перезагрузку имел в виду.

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

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

>А твой единственный пример был про злонамеренное использование перегрузки операторов.

Не расстраивайся, в C и C++ операторы изначально "перегружены" чьим-то больным воображением. Сложно объяснить как в здравом уме можно сделать математический символ РАВЕНСТВА оператором ПРИСВАИВАНИЯ, а вместо символа РАВЕНСТВА изобрести какое-то "ДВОЙНОЕ РАВЕНСТВО":)

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

> А у вас там до дела-то доходит? Или всё языки сочиняете?

Исключительно Extreme Programming, и исключительно прагматичная польза во всём. Всё, что неэффективно или не показало себя хорошо на практике обдумывается, урезается и рефактурируется. Часто новая функциональность мерджится сразу в продакшн (всё на юникс, естественно). Благо система тестов не даст сильно обломиться, да и в случае чего возможен откат по системе контроля ревизий.

Вопросы единого стиля мне очень хорошо знакомы, но я не вижу никакой помощи Питона в этом деле, разве что в нём синтаксис беднее... Большая часть того, что входит в моё понятие хорошего стиля остаётся за программистом. Ставятся ли пробелы после/вокруг знаков препинания, как оформляются continuation-lines, система названий переменных/функций/файлов и так далее. Всё это к сожалению требует большой самодисциплины от участников независимо от языка программирования, и иметь единый стиль в проекте чрезвычайно сложно. И хоть я всегда стремлюсь навязать единый стиль на все проекты, это не всегда бывает эффективно. Зачастую эффективней решить это на файловом уровне. Если есть чёткое разбиение (программист X ответственен за файл Y или его часть), то мелкие перекосы в чужих файлах - неплохой компромисс. Крупные перекосы должны пресекаться.

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

> а вместо символа РАВЕНСТВА изобрести какое-то "ДВОЙНОЕ РАВЕНСТВО":)

Тем временем, во всех нормальных языках (возвращаясь наконец к топику) давно уже есть тройное равенство. ;-)

pugs> 5 === "5"
bool::false
pugs> 5 == "5"
bool::true

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

>pugs> 5 === "5"
>bool::false
>pugs> 5 == "5"
>bool::true

ПлядЪ!!! Убейте его - _это_ не должно родится!!

Да хотя чего я - оно и так не родится, ибо уже нах никому не надо. :)

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

>Убейте его - _это_ не должно родится!!

Поздно. Давно уже родилось :)

php -r 'echo 5==="5" ? "true" : "false";'

false

:)

На практике бывает полезно. Скажем, метод может вернуть NULL, если результат отсутствует, false, если не было обработки, true, если была обработка и успешная, некоторый объект, если нужно с ним сделать что-то ещё :)

KRoN73 ★★★★★
()
Ответ на: комментарий от ero-sennin

> Объясни мне, убогому, как дополнить язык, скажем, осмысленной конструкцией для удобного доступа к элементам списка, а не этим ухрябищем lindex $l $n. Или будешь говорить, что это удобно и тру, и не надо ничего менять?

ero-sennin, ты хвалился что осилил SICP. Насколько знаю в основе схема - а схема лисп и кто-му же есть много функциональных возможностей. Так скажи мне на милость, какого фига ты хочешь для доступа к элементу списка! какой-то удобно хитрый синтаксис. Это вообще моветон.

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

Если тебе нужен поэлементный доступ - используй массивы.

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

> Определение инлайновых функций - это на самом деле очень редкая операция. Я понимаю, оно прикольно и всё такое - но на деле-то используется нечасто, посмотрите правде в глаза. Для коротких случаев в питоне есть лямбды. Для длинных - следует написать нормальную функцию, чтобы было чётко видно, что она делает. И чтобы чётко отражалась в стек трейсе, если что.

Это вобщем-то не инлайновые, а анонимные функции. И если бы гвидо был чуток поумнее, он бы уже давно добавил нормальную лямбду к Питону. Но этого никогда не случится, потому что как сказал ero-sennin: "Код у Питона такой, что понятен любому бивню".

И еще одно. Ты тут можешь петь песни, что хули - можно взять назвать функцию и будут те же яйца только в профиль. Но это не так. Проблема именнованой функции, что она не работает как closure - тоесть не видит переменных в точке, где ты ее будешь подставлять вместо анонимной функции.

Именно на этом механизме работает большинство фишек Руби Хаскеля и Лиспа. Больше того, весь ЯваСкрипт на этом основан. Даже бивень Джоэль про это написал. Но ты радуясь как зашибательски крут питон никогда этого не узнаешь.

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

> Если тебе нужен поэлементный доступ - используй массивы.

Ладно, ты прав. Ну так где в тикле нормальные простые кошерные массивы? (Хэш-таблицы не катят).

ero-sennin ★★
()
Ответ на: комментарий от Cris

> Проблема именнованой функции, что она не работает как closure - тоесть не видит переменных в точке, где ты ее будешь подставлять вместо анонимной функции.

Я, дорогой, вам травмы сейчас нанесу! :D Замыкания за тем и нужны, что несут с собой своё лексическое окружение. Иначе нафиг оно вообще нужно?

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

> Ладно, ты прав. Ну так где в тикле нормальные простые кошерные массивы? (Хэш-таблицы не катят).

Если ты видишь какое-то ограничение - покажи его. Даже после быдло-пыха не вижу никакой нужды в кошерных массивах.

Cris
()
Ответ на: комментарий от ero-sennin

> Замыкания за тем и нужны, что несут с собой своё лексическое окружение. Иначе нафиг оно вообще нужно?

Возможно ошибаюсь. Но не нужно ли для closure в питоне именнованная функция внутри которой и создается closure?

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

> Если ты видишь какое-то ограничение - покажи его. Даже после быдло-пыха не вижу никакой нужды в кошерных массивах.

Cris,

вы удивительно непоследовательны в своих суждениях. Только что вы (справедливо) упрекали меня, что случайный доступ к элементам списка - это неэффективно. Теперь же вы мне предлагаете использовать для хранения однородных массивов данных хэш-таблицы. Ага, а матрицы я буду хранить так: set a(1,2) 3, да? И в результате получу что-то типа {"0,0": 1, "0,1": 2, ..., ...} (в питон^Wжабоскриптовой записи). И матрицы 1000x1000, наверно, будут перемножаться со скростью света, я даже кофэ не успею попить! А если я сдуру вместо a(0,0) захочу написать a(0, 0)? Ты, дружок, у нас остряк, прямо Пикассо! Вот ужо порадовал дедушку! Возьми из-под тумбочки заплесневелый пирожок с козявками и марш в кроватку, пока мама не пришла, дитятко моё золотое.

ero-sennin ★★
()
Ответ на: комментарий от Cris

> Но не нужно ли для closure в питоне именнованная функция внутри которой и создается closure?

Тут не понял. Функция определённая в пространстве модуля, выполняется в лексическом пространстве этого модуля (оно непосредственно доступно через globals()). Функция, определённая внутри функции, выполняется в лексическом пространстве этой окружающей функции (для окружающей функции это locals(), для внутренней - globals()). Или вы хотите чего-то другого и странного? :)

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

Хотя вру, globals() всегда ссылается на пространство имён модуля, но не суть важно.

ero-sennin ★★
()
Ответ на: комментарий от Cris

Кложуры нужны реже, чем это мечтается любителям лиспов и рубей.

И при необходимости - элементарно эмулируются при помощи классов и карри.

yk4ever
()
Ответ на: комментарий от ero-sennin

>> Если ты видишь какое-то ограничение - покажи его.

> И матрицы 1000x1000, наверно, будут перемножаться со скростью света, я даже кофэ не успею попить!

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

Единственное - лабы по Паскалю и СИ. Хотя, нет вру :), грешен. Даже на пыхе один раз лабу численную сделал и там были массивы двухмерные. По-сути один раз и то за уши притянутый :). Но может ты занимаешься мат-рассчетами, тогда и инструмент должен быть соответсвующий.

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

> Кложуры нужны реже, чем это мечтается любителям лиспов и рубей.

В списке был еще JavaScript. Там все ООП мутится через замыкания. Кстати в Си ООП тоже через анонимные функции реализовано.

Руби без замыканий вообще был бы не язык. В нем 60% всех языковых конструкций делается за счет замыканий. Но у тебя нет соответствующего механизма в голове, поэтому пытаться объяснить необходимость их в нормальном виде бесполезно.

Посмотри любой интересный язык. Глянь ту же Schema, Haskell, SmallTalk. Руби советовать не буду, потому что области применения пересекается(с Питоном), хотя в нем это проще всего понять.

Кстати, оператор with - это очередная попытка Гвидо проигнорировать необходимость анонимных функций. Создание генераторов - опять же вызвано непониманием анонимных функций. Эти два механизма реализуются обычными анонимными функциями.

> И при необходимости - элементарно эмулируются при помощи классов и карри.

Дай ссылочку на карри, не слышал что за хрень.

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

> в Си ООП тоже через анонимные функции реализовано.

И эти люди учат нас кложурам в петоне :)

> Дай ссылочку на карри, не слышал что за хрень.

Ну был такой чувак, Хаскел Карри (Haskell Curry), он придумал currying :D

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

>> Дай ссылочку на карри, не слышал что за хрень.

> Ну был такой чувак, Хаскел Карри (Haskell Curry), он придумал currying :D

:)))

в Питоне реализован ИИ Хаскелла Карри? O_Ooo

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

> в Питоне реализован ИИ Хаскелла Карри? O_Ooo

Ты многого не знаешь о Питон - чё там какой-то ИИ Хаскела Карри... там даже кложуры есть :D

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

> там даже кложуры есть :D

Спрашивал уже про это еро-сенина. Ну он что-то внятно не смог ответить. Что нужно для того чтобы создать closure? То что видел выглядело так: снаружи идет обычная функция, внутри которой еще одна. Если недопонял, ткни в документацию.

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

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

> наружи идет обычная функция, внутри которой еще одна.

так и есть

> такой вариант имеет ограниченное применение и для нужных мне целей не подходит.

О, конкретный разговор пошел. Пара вопросов: так ты признаешь, что это всё-таки closure? чем/для чего тебе это не подходит?

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