Подтвердить что ты не робот

Созданы ли файлы MooseX:: Declare и MooseX:: Method:: Signatures?

Из текущей версии (0.98) Moose::Manual::MooseX являются строками:

Мы возлагаем большие надежды на будущее MooseX::Method::Signatures и MooseX::Declare. Однако эти модулей, которые регулярно используются в производство некоторыми из более сумасшедших членов сообщества, по-прежнему обозначенная альфа на всякий случай должны быть сделаны несовместимые изменения.

Я заметил, что для MooseX::Method::Signatures изменить журнал за сентябрь 2009 года упоминает об удалении "страшного отказа от ALPHA".
Итак, эти все еще "альфа"?
Будет ли я по-прежнему считаться одним из "более сумасшедших", чтобы использовать их?

4b9b3361

Ответ 1

Я бы сказал, что они готовы к производству - я использую их в производстве, но есть несколько вещей, которые следует учитывать:

Производительность

MooseX::Declare, и зависимости делают почти всю свою магию во время компиляции. В зависимости от размера вашей программы вы можете найти от половины секунды до нескольких секунд дополнительных накладных расходов на инициализацию. Если это проблема, не используйте MooseX::Declare.

Во время выполнения основные служебные данные - это проверка типов и аргументов, которые вы должны (в идеале) делать в любом случае. При этом ограничения типа Moose имеют некоторые накладные расходы, а именно принуждение и более сложные (MooseX:: Types:: Structured-style) ограничения. Не используйте их, если производительность является проблемой.

Стабильность

MooseX::Declare и MooseX:: Method:: Подпись Внешний синтаксис теперь стабилен. Но важно знать, что внутренняя часть подвержена изменению экстремальной. (к счастью, изменения к лучшему)

Чтобы дать вам идею, сама подпись захватывается с помощью большого блока кода C, украденного из токенатора Perl (toke.c). Это может сломаться в некоторых ситуациях, поскольку на самом деле он ничего не разбирает. Бит внутри скобок анализируется с использованием PPI, который предназначен для чистого Perl, но в результате дерево PPI затем взломано, чтобы получить что-то полезное. Devel::Declare сам является взломом - после того, как он видит определенные ключевые слова (например, "роль", "класс", "метод" ), Devel:: Модуль декларации должен переписывать исходный код вручную, без взаимодействия с реальным парсером Perl.

Угловые случаи могут вызвать Perl для segfault. Или плохо перепишите исходный код, так что вы получите синтаксические ошибки, но не знаете, что их вызывает без -MO::Deparse. Если вы случайно испортили синтаксис MooseX::Declare, нет гарантии, что модуль обнаружит это и даст вам разумную ошибку. Сообщение ALPHA, возможно, исчезло, но это все еще делает внутри темные и страшные вещи, и вы должны быть готовы к этому.

UPDATE

MooseX:: Declare сильно не обновляется, и вы можете посмотреть альтернативы, такие как Moops. Лично я решил придерживаться чистого Moose, пока сам Perl не начнет поддерживать класс/метод/имеет синтаксис изначально, который возможно на картах.

Ответ 2

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

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

Ответ 3

Есть люди, которые считают, что зрелость и стабильность MooseX::Delcare, Devel::Declare, на которых она основана, или даже Moose сами еще не готовы к "прайм-тайм". Я также знаю о двух крупных компаниях с миллионами посетителей в месяц, которые имеют MooseX::Declare в своей производственной среде. Я лично доволен стеком, которому я снабжен Moose и не вижу необходимости вносить MooseX::Declare. Я знаю людей, которые, по моему мнению, глубоко уважают тех, кто отказывается писать новый код без декларативного сахара от MooseX::Declare.

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

Ответ 4

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

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

Ответ 5

MooseX:: Метод:: Подписи (MXMS) и MooseX:: Declare, который его использует, не готов к производству. Это происходит не потому, что код нестабилен, а потому, что он ужасно медленный. Простое использование ключевого слова method без типов или аргументов - это 500-1000x производительность выполнения, вызванная регулярным вызовом метода. Мой MacBook Pro может выполнять около 6 000 простых вызовов метода в секунду с использованием MXMS против 5 000 000 с простым Perl.

Метод:: Подписи, напротив, почти не имеет производительности, превышающей то, что обычно стоило бы выполнить запрошенные проверки. Синтаксис почти такой же, как MXMS, и поддерживает типы Moose (и Mouse). Оба полагаются на одну и ту же базовую методику модификации синтаксиса. (Полное раскрытие, я являюсь автором метода:: Подписи.)

Если вам нравится MooseX:: Declare, но вы хотите выполнить функцию Method:: Signatures, попробуйте Method::Signatures::Modifiers.

Ответ 6

MooseX::Declare и MooseX::Method::Signatures работают хорошо, но у них может быть очень неприятное наказание в зависимости от того, что делает ваш код. Это можно исправить, просто не используя ключевое слово method или используя Method::Signatures::Modifiers.

Снижение производительности, которое я вижу, составляет около 2-5x по сравнению с Method::Signatures::Modifiers (5x в основном для одного конкретного класса, который я использовал). И кажется, что это главным образом время компиляции или, возможно, первая инициализация, потому что она становится меньше 2x, когда вычисление больше.

Method::Signatures::Modifiers имеет лучшие ошибки, но вы должны отключить эту оптимизацию при использовании отладчика (это происходит сбой, потому что он не видит эти методы, вы можете сами убедиться в выходе -MO=Deparse).

Возможно, стоит избавиться от аргумента Perl, смещающего ад.