Answer the question
In order to leave comments, you need to log in
What is the point of macro programming?
Good afternoon!
What is the advantage of macro programming? Those. why not just use higher order functions, which I assume are easier to debug than magic?
PS the question is not for the sake of throwing. I would like to understand, maybe there really are situations when macros are the best choice.
Answer the question
In order to leave comments, you need to log in
Macros allow you to adapt the Lisp language to the task at hand. With the help of them, you can add constructs to the language that you are missing. Undoubtedly, all tasks can be solved without macros. For example, clojure has the with-open macro , which is similar to the try-with-resources construct in Java version 7. Java programmers have gotten away with this construct and may not use it anymore, but you write less code with it and make your code more robust. Programmers using java versions below 7 cannot create such a syntax construct on their own and use the finaly branchtry...catch constructs. In order for such a construction to appear in the language, it was necessary to modify the compiler. Lisp language programmers can use macros to add any syntactic construct they lack without changing the compiler. For example, clojure version 1.6 uses JDK 1.5 which does not have a try-with-resources construct, but with the with-open macro you can already use the same functionality. Another example is Common Lisp's loop macro, which essentially defines its own built-in micro language to implement all sorts of loops.
If you feel that something is missing in the language, or that you are writing a lot of extra code, then maybe you should think about macros.
Macros allow you to introduce new variables into the DSL. It is problematic to do this through higher-order functions, and the variables of Lisp (or another language in which DSL is implemented by macros) can be inconvenient in this DSL. For example, macros can implement pattern matching.
Macros allow you to write more efficient code, with higher order functions you have to rely on the optimizer and runtime.
Debugging higher-order functions is not always easier. You can expand a macro and test the correct expansion, with functions you have to test almost all the functionality at once.
Чтобы программы могли "делать" те, кто в программировании ничего не понимает. Вы не думайте, не каждый мечтает научиться программировать. Некоторым вполне хватает и макросов.
Это у вас в голове функционал программы отделён от интерфейса. У других это монолит. )))
Программа, написанная на любом языке программирования имеет форму последовательности слов и чисел.
Содержанием программы является некий вычислительный процесс, преобразующий одни данные в другие данные.
Данные которые преобразует программа обычно представлены в форме последовательности слов и чисел.
Таким образом программа может изменить форму другой программы тем самым изменив её содержание, или может изменить форму другой программы не меняя её содержания. В этом состоит суть макропрограммирования.
В рамках одного языка преимущества и недостатки макропрограммирования заключаются в повышении разнообразия форм которые могут принимать программы написанные на этом языке.
Что касается дебага, то макропрограммирование как таковое не подразумевает дебага вообще. Это всего лишь возможность произвольного преобразование форм программ, ничем не отличающееся от преобразования любых других данных. Преобразование форм программ осуществляется самыми обычными средствами, например обычными функциями высшего порядка, поэтому сложность дебага при таком раскладе сводится к сложности дебага программы составленной из функций высшего порядка.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question