Что такое концептуальная прагма Smalltalk?
Я использовал прагмы в Pharo Smalltalk, и у меня есть представление о том, как они работают, и я видел примеры их использования в Pharo.
Мои вопросы:
- что такое прагмы концептуально,
- с какой конструкцией они сравнивают на других языках,
- когда я должен ввести прагму?
Я уже нашел интересную статью об их истории: история VW Pragmas.
1 ответ
Вы должны думать об этом как об аннотациях, прикрепленных к CompiledMethod, или, если хотите, в качестве дополнительных свойств.
Затем, благодаря рефлексии, некоторые инструменты могут обходить другие скомпилированные методы, собирать их с определенными аннотациями (свойствами) и применять некоторую специальную обработку, такую как создание меню, списка предпочтений или другого пользовательского интерфейса, вызывая все методы класса, помеченные как #initializer. или какой-то механизм может возвращать стек обратно, пока метод не будет помечен как #exceptionHandler...
Есть много возможностей, до вас, чтобы изобрести свою собственную мета-собственность...
РЕДАКТИРОВАТЬ
Во-вторых, я не знаю, что это должен быть язык, который может перечислять методы и прикреплять к ним свойства.
Третий пункт также сложно ответить. На практике я бы сказал, что вы используете некоторые уже существующие аннотации, но очень редко создаете новую, если только вы не пытаетесь создать новую структуру для обработки исключений или новую структуру для GUI (вы хотите зарегистрировать некоторые известные события или некоторые обработчики...). Основное использование, которое я хотел бы видеть, - это расширение, составление приложения с несвязанными частями, например, в главном меню. Похоже, это относительно ненавязчивый способ введения декларативных хуков - по сравнению с очень навязчивым способом переопределить хорошо известный метод TheWorld>>mainMenu. Это также немного легче, чем регистрация / отмена регистрации IMPERATIVELY через традиционную отправку сообщения при инициализации / выгрузке класса. С другой стороны, магия немного более скрыта.