Язык для изучения метапрограммирования
Какой лучший язык (с точки зрения простоты, удобочитаемости и элегантности кода), на ваш взгляд, учиться и работать с метапрограммированием?
Я думаю, что метапрограммирование - это "будущее кодирования". Не говоря, что код вымер, но мы видим, как этот сценарий приходит к новым технологиям.
Ответы
Ответ 1
Во-первых - я не думаю, что согласен с вашим утверждением, что "метапрограммирование - это" будущее кодирования "". Это отличный инструмент, но не всем это нравится (например, разработчики Java оставляют макросы из языка намеренно - не то, что мне нравится Java, но у людей есть причины возражать против метапрограммирования).
В любом случае...
Я могу представить два разных способа выполнения метапрограммирования: на уровне синтаксиса и во время выполнения.
Для метапрограммирования синтаксиса я думаю, что схема - хороший вариант (если вы не упомянули простоту и т.д., я бы предложил Common Lisp).
Для метапрограммирования во время выполнения я думаю, что и Prolog, и Smalltalk очень интересны. (Вы можете добавлять, изменять и удалять факты в базу данных Prolog на лету, и вы можете менять объекты Smalltalk на лету в). Возможно, вы тоже можете выполнять метапрограммирование в Ruby в Ruby, но я не знаю Ruby.
Итак, в схеме несколько различных методов метапрограммирования (разные макросистемы). Я предлагаю вам взглянуть на некоторую базовую книгу Схемы, а затем прочитать о двух разных макросистемах.
Некоторые хорошие книги схем:
Реализации схем очень сильно отличаются друг от друга, поэтому вы также будете использовать руководство по реализации Схемы.
Некоторые места, чтобы узнать о макросах Scheme:
Если вы решите использовать язык, который больше и беспорядочен, чем Scheme, попробуйте Common Lisp. Есть три книги, которые я бы предложил:
- Во-первых, "" Практический общий Lisp" Peter seibel. Это поможет вам начать с Common Lisp и макросов;
- Во-вторых, " В Lisp" Пола Грэма. Затем вы узнаете, что макросы более мощные, чем то, о чем вы думали раньше, и узнаете действительно хорошие методы;
- В-третьих, " Let Over Lambda" Дуга Хойта. Передовая книга, лучше всего прочитанная после Грэма На Lisp.
Для Prolog вы можете прочитать "Программирование в Prolog" от Clocksin и Mellish (получить последнее издание!), а затем перейти к "Пролог, программируемому по глубине" Covington, Vellino и Nute. См. Главу 6.
Есть много хороших книг Smalltalk. Мне нравится "Искусство и наука Smalltalk" Симона Льюиса.
Там очень хороший бесплатный учебник/праймер Canol Gokel о Smalltalk тоже (но это не идет так далеко, как преподавание метапрограммирования).
Ответ 2
Lispы - это в значительной степени язык выбора для самых разных методов метапрограммирования. Из доступных современных Lisp я бы рекомендовал Clojure как более доступный Lisp, который имеет доступ к положительно ОГРОМНОЙ библиотеке (что-либо в Java земля), если вы хотите, чтобы сразу было полезно то, что одновременно является мощным и.
Для других подходов к метапрограммированию практически любой функциональный язык сделает трюк. Haskell - хороший выбор для методов обучения и функционального программирования, но это не то, что я бы назвал наиболее практичным языком для реальной работы в в это время. Erlang является более практичным, но не совсем таким, как поддается метапрограммированию. OCaml - еще один возможный выбор, но он немного страдает и от практичности. Однако он более доступен, чем Haskell во многих отношениях.
В мире языков сценариев Ruby - это язык, на котором метапрограммирование является популярным методом. Его подход смутно Lisp -like, но с гораздо более условным синтаксисом. Однако у него нет полной мощности и гибкости Lisp, но, с другой стороны, за исключением Clojure выше, он имеет гораздо более непосредственную практическую полезность.
Ответ 3
Что вы понимаете под метапрограммированием? Метапрограммирование - это набор концепций, а не один конкретный метод.
См. этот ответ, где я перечислил различные понятия и связанные языки. Вот резюме:
- Метапрограммирование с помощью макроса → Lisp
- Метапрограммирование с помощью DSL → Многие языки для внутренней DSL, внешний DSL более сложный
- Отражение → Smalltalk, Ruby
- Аннотации → Java
- Байт-код или преобразование АСТ → Groovy
Подробнее см. полный ответ. Вообще говоря, я считаю, что хороший OO-универсал - это Ruby. В противном случае любой Lisp -подобный будет выполнять работу: это как шпаклевка в ваших руках. Но это будет зависеть от того, что вы хотите сделать...
Ответ 4
Ruby обладает очень мощными и гибкими возможностями метапрограммирования.
Ответ 5
Есть несколько языков, которые я бы рекомендовал для изучения метапрограмм.
Первый Пролог. Программа Prolog - это база данных. Пролог "код", предложения, являются частью данных. Программа может читать их, включая их содержимое. Он также может генерировать новый код как структуру данных и утверждать его, тем самым изменяя себя во время выполнения. Все это без использования расширения термина, которое является системой интеллектуальных макросов Prolog. Некоторые книги Prolog AI начинаются с внедрения мета-интерпретатора в Prolog, а затем изменяя его по необходимости.
Вторая, как уже упоминалось, Lisp и особенно CLOS (Common List Object System), которая включает команды для мета-ООП.
Наконец, Python поддерживает хороший и не слишком скрытый механизм метапрограмм во время выполнения, это метаклассы (классы, которые создают классы).
Ответ 6
Я удивлен, что никто не упомянул ML. ML означает Meta Language. так... да... CaML - стандартная реализация. (OCaML, на который JUST MY правильный OPINIO упоминается OO версия CaML, которая, вероятно, добавляет функции, которые делают метапрограммирование менее очевидным...)
Кроме этого, я большой поклонник Scheme, но практически любой функциональный язык программирования хорош для этого... Всегда есть Маленький Lispер, э-э, извините, Little Schemer...
Ответ 7
Не знаю, есть ли у нас одно и то же определение "метапрограммирование", но, конечно, не один лучший язык для изучения. Я бы предложил вам более глубоко изучить функциональное программирование. Какой язык выбрать для этого зависит от вашего фона и рабочей среды. Я бы выбрал F # на данный момент, но Haskel также должен быть хорошим выбором.
веселит,
Ахим