Макрос в грамотном программировании

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


person WhatisThat    schedule 01.12.2011    source источник


Ответы (2)


Я предполагаю, что под «макросом» вы подразумеваете, что инструмент LP выполняет «макроподстановку», как препроцессор C и большинство ассемблеров.

Макрозамена - это «синтаксический сахар». Это способ написать один символ, обозначающий множество похожих деталей. Отсюда и термин «макрос»: это было «макропрограммирование», написанное на более высоком уровне абстракции.

Это то, что мы делали в былые времена, когда у нас не было объектно-ориентированного программирования, обеспечивающего легкодоступные уровни абстракции.

Было - технически - возможно иметь уровни абстракции и программирования в стиле макросов на C, используя только вызовы функций. Программирование "макросов" препроцессора не необходимо. Например, мы определяли встроенные функции как «макрос» препроцессора для ручной оптимизации нашего кода. Это потому, что компилятор C плохо оптимизировался в первые дни.

Теперь, когда у нас есть объектно-ориентированное программирование, возможности макросов более примитивных языков программирования не нужны.

Макросъемка Literate Programming использовалась в языках, отличных от объектно-ориентированного программирования (таких как C и Pascal), для создания возможностей класса и возможностей наследования на уровне LP.

В этом нет никакого смысла. Просто определите правильные классы и используйте правильное наследование.

person S.Lott    schedule 06.12.2011
comment
Я не понимаю, почему вы подняли объектно-ориентированное программирование. Макросы используются, чтобы избежать повторяющегося кода, чего нельзя добиться в языке. Это происходит во всех типах языков, включая языки с собственными объектно-ориентированными конструкциями (особенно те, которые не поддерживают функции высшего порядка). - person Warbo; 15.07.2014

Я написал 2 разных инструмента LP: TCLP - не поддерживает макросы: http://code.google.com/p/tclp amd NanoLP с очень гибкими макросами, поддерживающими: http://code.google.com/p/nano-lp.

И когда я писал TCLP, мои представления о макросах были - это плохо, потому что они разрушают структуру программы, что-то вроде другой макросистемы - вы можете думать об этом как о параллельной макросистеме на языке C. Макросы C скрывают реальный код - они не являются реальным вызовом функций, но скрывают (как заполнители!) Реальный код, а LP-макросы - это параллельный способ скрытия кода. Это недостатки.

Но если вы пишете хорошие LP-макросы, читаемые и понятные, то с их использованием проблем не возникает, поэтому я включил систему гибких макросов (с плейхолдерами, импортом, словарями переменных ...) в свой следующий инструмент - NanoLP.

person RandomB    schedule 24.01.2013