Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ООП модули в Perl, что лучше? 
:(
    Опции темы
Logo
Дата 18.2.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



Кто какие модули для генерации классов в Perl использует? Ищу подходящий модуль.

З. Ы. прикрутил бы голосовалку, да боюсь не учесть всех модулей, а отредактировать голосование нельзя.
PM MAIL   Вверх
mvsgt
Дата 18.2.2010, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



хотя бы список модулей для генерации классов привели
PM MAIL   Вверх
Logo
Дата 18.2.2010, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



Код

Moose
MooseX::Declare
Class::Prototyped
Class::Struct

и д.р.

Это сообщение отредактировал(а) Logo - 18.2.2010, 16:51
PM MAIL   Вверх
mvsgt
Дата 19.2.2010, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



Moose, конечно. MooseX:smile использовать практически невозможно, остальные на фоне Moose не смотрятся.


PM MAIL   Вверх
Logo
Дата 19.2.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



Moose вроде бы не поддерживает закрытые методы.

Это сообщение отредактировал(а) Logo - 19.2.2010, 12:43
PM MAIL   Вверх
mvsgt
Дата 19.2.2010, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



Я не знаю что такое закрытые методы (private, public ?), но кроме Moose просто нет вариантов. Он стал стандартом для многих крупных проектовтипа Catalist, DBIx::Class , так что пользоваться им можно. В MooseX методы есть - MooseX::MethodPrivate например, но пользоваться можно ли не факт, я нарывался на проблемы с отладчиками и даже с тривиальными редакторами в части подсветки и автоформатирования.

И ещё один сюрприз - если навороты над Moose делать будут потери в производительности. Обёртки, например, в 5 раз могут замедлить выполнение функции.

Это сообщение отредактировал(а) mvsgt - 19.2.2010, 13:54
PM MAIL   Вверх
Logo
Дата 20.2.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



Цитата

Я не знаю что такое закрытые методы (private, public ?),


Да, private, protected...
PM MAIL   Вверх
gcc
Дата 20.2.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Logo

если вы пишете веб-прогармму, то может быть лучше catalyst использовать, но только в него входит очень много модулей (возможно лишних), там есть похожие фремворки на catalyst, которые по легче чем он:

1) mojo 
2) Mypole 
3) и другие

Это сообщение отредактировал(а) gcc - 20.2.2010, 12:55
PM WWW ICQ Skype GTalk Jabber   Вверх
Logo
Дата 20.2.2010, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



В катализе вроде бы тот же Moose используется... Вообще сабж о способах создания классов.
PM MAIL   Вверх
gcc
Дата 20.2.2010, 19:55 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Logo

в каталисте есть контроллеры, в которых есть атрибуты методов для "диспатча"...

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

в моделях (обычных классах) можно писать по своему как угодно, возможно там нужно атрибуты использовать если модели пересекаються друг с другом вызываються, НО как правило эти модели вызываються в котроллерах... (просто инициализируються там) 

вообще moose/mouse*X не обязательно там использовать... (просто если мы должны наследоватся от какого-то куска кода в каталисте написаном на moose, то по-моиму нужно использовать только moose... как правило наследоватся от какого-то куска кода не требуется, так как движок (каталист) уже написан...)

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

Код

sub _method {

}




Это сообщение отредактировал(а) gcc - 27.2.2010, 01:29
PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 5.3.2010, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Logo

нашел во фреймворке интересный вариант движка Catalyst::DispatchType::Chained

распределенное ООП какое-то своеобразное...

записать так:
Код

  sub blog : Chained PathPart('blog') CaptureArgs(0) { }


  sub user : Chained('blog') PathPart('user') CaptureArgs(1) {
      my ( $self, $c, $id_un ) = @_;
      $c->stash->{ message } = "Hello 2";
      $c->stash->{ arg_sum }->[0] = $id_un;
  }




  sub view : Chained('user') PathPart('view') CaptureArgs(1) {
      my ( $self, $c, $id ) = @_;
      $c->stash->{ message } .= "World!";
      $c->stash->{ arg_sum }->[1] = $id;

  }







  sub view_page_off : Chained('view')  PathPart('') Args(1) {
      my ( $self, $c, $page ) = @_;
      
      $c->stash->{ arg_sum }->[2] = $page;
      
   $c->forward( 'view_blog_message', [ @{$c->stash->{ arg_sum }} ] );
    
  }
  


  

  sub view_off : Chained('view') PathPart('') Args(0) {
      my ( $self, $c ) = @_;

   $c->forward( 'view_blog_message', [ @{$c->stash->{ arg_sum }} ] );
   
  }



  sub view_page_user : Chained('user') PathPart('') Args(1) {
      my ( $self, $c, $page ) = @_;

      $c->stash->{ arg_sum }->[1] = $page;
      
# print '99';
   $c->forward( 'view_blog', [ @{$c->stash->{ arg_sum }} ] );
   
  }
  


  sub view_user : Chained('user') PathPart('') Args(0) {
      my ( $self, $c ) = @_;

   $c->forward( 'view_blog', [ @{$c->stash->{ arg_sum }} ] );
   
   
  }
  




и методы будут вызыватся так, друг за другом, как роли... красиво получается

Код
| Path Spec                           | Private                              |
+-------------------------------------+--------------------------------------+
| /blog/user/*/view/*                 | /blog/blog (0)                       |
|                                     | -> /blog/user (1)                    |
|                                     | -> /blog/view (1)                    |
|                                     | => /blog/view_off                    |
| /blog/user/*/view/*/*               | /blog/blog (0)                       |
|                                     | -> /blog/user (1)                    |
|                                     | -> /blog/view (1)                    |
|                                     | => /blog/view_page_off               |
| /blog/user/*/*                      | /blog/blog (0)                       |
|                                     | -> /blog/user (1)                    |
|                                     | => /blog/view_page_user              |
| /blog/user/*                        | /blog/blog (0)                       |
|                                     | -> /blog/user (1)                    |
|                                     | => /blog/view_user                   |
'-------------------------------------+--------------------------------------'




в других языках, ни в java, ни в php такого не видел...

Это сообщение отредактировал(а) gcc - 5.3.2010, 07:32
PM WWW ICQ Skype GTalk Jabber   Вверх
mvsgt
Дата 5.3.2010, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



такое есть не только в перле, например jQuery так построен и так можно, в принципе, любой фреймворк организовать, но не всегда это хорошо - игры с Moose могут закончиться проблемпми с отладкой и производительностью. С отладкой - так как код, который реально выполняется, не имеет ничего общего с тем, что можно увидеть в отладчике (это не фильтры), а на организацию украшений уходит куча ресурсов.
PM MAIL   Вверх
gcc
Дата 8.3.2010, 09:19 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



наверное, т.е. кроме как в mod_perl?

а в cgi оно сильно медленно будет? но не обезательно же все сразу модули mooseX* запускать... ?

вот есть какие-то демоны можно писать http://search.cpan.org/~perigrin/MooseX-Da...eX/Daemonize.pm
в ООП как видно удобно

но такого как moose в других языках мало где есть (именно такие БОЛЬШИЕ возможности), т.е. исходя их этого обезательности использования moose в обычных скриптах (или не больших программах) не вижу...
а в catalyst в моделях его можно... 


Это сообщение отредактировал(а) gcc - 8.3.2010, 11:46
PM WWW ICQ Skype GTalk Jabber   Вверх
Vaneska
Дата 8.3.2010, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 15.3.2005
Где: Москва

Репутация: 3
Всего: 4



Альтернатива Moose - Mouse.
По сути тот же Moose только заново написанный и не все из нативного муза работает.
Но производительность на порядок лучше
--------------------
http://isokolov.blogspot.com/
PM MAIL ICQ   Вверх
Logo
Дата 9.3.2010, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: 3
Всего: 10



Цитата

но такого как moose в других языках мало где есть (именно такие БОЛЬШИЕ возможности), т.е. исходя их этого обезательности использования moose в обычных скриптах (или не больших программах) не вижу...
а в catalyst в моделях его можно... 


Даже через чур большие... а элементарного - закрытых методов - нет.
PM MAIL   Вверх
gcc
Дата 9.3.2010, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



интересно, зачем надо было переписывать Catalyst на MooseX, если он медленно в mod_perl?
(и DBIX::Class)

может быть то что Catalyst с MooseX* в режиме mod_perl медленно - это не так...
была информация: что если Сишный модуль висит в памяти, он займет памяти при старте apache в более 3 раза больше чем чистая perl прогармма, но при выполнении может дать производительность... (подтвердить не могу)

Добавлено @ 00:51
Logo, вот я только что нашел

это не то?

http://search.cpan.org/search?query=moose+...at&mode=all
http://markmail.org/message/q7eelszlukxymy4t

Это сообщение отредактировал(а) gcc - 9.3.2010, 01:16
PM WWW ICQ Skype GTalk Jabber   Вверх
mvsgt
Дата 9.3.2010, 03:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



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

А переписывают всё на moose ради упорядочивания кода.
PM MAIL   Вверх
gcc
Дата 10.3.2010, 02:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



moose(X) написан на Си (несколько пару модулей на C++) и подключается через XS?
(можно же выделить памяти больше... )

тут написано что каталист после переписания начал занимать на порядок больше оперативки http://kostenko.name/2009/04/19/catamoose/

а исходники наоборот уменьшились... (так как упростилось)

Это сообщение отредактировал(а) gcc - 10.3.2010, 07:31
PM WWW ICQ Skype GTalk Jabber   Вверх
mvsgt
Дата 10.3.2010, 09:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 27.3.2009

Репутация: 1
Всего: 1



gcc, какая-то каша у Вас. Насчёт сишных модулей выражайтесь понятнее. Что за сишные модули имеются ввиду? Перл весь на С написан, кстати.
"Тут" не написано, что "каталист после переписания начал занимать на порядок больше оперативки".
PM MAIL   Вверх
gcc
Дата 23.3.2010, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



Код

  package Restartable;
  use Moose::Role;

  has 'is_paused' => (
      is      => 'rw',
      isa     => 'Bool',
      default => 0,
  );

  requires 'save_state', 'load_state';

  sub stop { 1 }

  sub start { 1 }

  package Restartable::ButUnreliable;
  use Moose::Role;

  with 'Restartable' => {
      -alias => {
          stop  => '_stop',
          start => '_start'
      },
      -excludes => [ 'stop', 'start' ],
  };

  sub stop {
      my $self = shift;

      $self->explode() if rand(1) > .5;

      $self->_stop();
  }

  sub start {
      my $self = shift;

      $self->explode() if rand(1) > .5;

      $self->_start();
  }

  package Restartable::ButBroken;
  use Moose::Role;

  with 'Restartable' => { -excludes => [ 'stop', 'start' ] };

  sub stop {
      my $self = shift;

      $self->explode();
  }

  sub start {
      my $self = shift;

      $self->explode();
  }


http://search.cpan.org/~flora/Moose-0.99/l...les/Recipe2.pod

может кто-то обяснить смысл этой заморочки?
и откуда тут explode?
(и вообще я не понял истенный смысл с ролями...)

====

а кто еще какие вкусности видел кроме Catalyst::DispatchType::Chained ? мне больше всего понравился вот этот модуль http://search.cpan.org/~flora/MooseX-Metho...d/Signatures.pm

может еще какие-то интеренсые есть с moose(x), кто-то пробовал?
(очень много разных появилось, что сложно выбрать что-то)


Это сообщение отредактировал(а) gcc - 23.3.2010, 02:21
PM WWW ICQ Skype GTalk Jabber   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0999 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.