Макрос в грамотном программировании - PullRequest
0 голосов
/ 01 декабря 2011

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

Ответы [ 2 ]

0 голосов
/ 24 января 2013

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

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

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

0 голосов
/ 06 декабря 2011

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

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

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

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

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

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

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

...