Я знаю, что они реализованы крайне небезопасно в C / C ++. Разве они не могут быть реализованы более безопасным способом? Действительно ли недостатки макросов достаточно серьезны, чтобы перевесить огромную мощность, которую они...
Макросы используются для того, чтобы сделать последовательность вычислительных инструкций доступной для программиста в виде единого программного оператора, что делает задачу программирования менее утомительной и менее подверженной ошибкам. [
Я знаю, что они реализованы крайне небезопасно в C / C ++. Разве они не могут быть реализованы более безопасным способом? Действительно ли недостатки макросов достаточно серьезны, чтобы перевесить огромную мощность, которую они...
Препроцессор C подключен к C, но его синтаксис совершенно отличается от основного языка: синтаксически значимые пробелы (конец строки завершает оператор, пробел после макроса определяет начало списка замены) блоки на основе ключевых слов вместо фигурных блоков elifвместоelse if определения на...
Из разных сравнений среди шаблонов C ++ и C # / обобщений Java, как этот /programming/31693/what-are-the-differences-between-generics-in-c-and-java-and-templates-in-c/31929#31929 У меня сложилось впечатление, что шаблоны C ++ реализуются с помощью некоторой предварительной обработки (замена...
Common Lisp позволяет вам писать макросы, которые выполняют любые преобразования исходного кода, которые вы хотите. Схема предоставляет вам гигиеническую систему сопоставления с образцом, которая также позволяет вам выполнять преобразования. Насколько полезны макросы на практике? Пол Грэм сказал в...
Я изучаю Scheme из SICP, и у меня складывается впечатление, что большая часть того, что делает Scheme и, тем более, LISP особенным, - это макросистема. Но, поскольку макросы расширяются во время компиляции, почему люди не делают эквивалентные системы макросов для C / Python / Java / что угодно?...
Я читаю «Стандартную библиотеку С» П. Дж. Плаугера, которая действительно интересна. Книга объясняет не только как использовать библиотеку, но и как она реализована. Я закончил чтение ctype.hраздела и в шапке функции объявлены как макросы и функции. Например int isdigit(int); но и #define...
В настоящее время этот вопрос не очень подходит для нашего формата вопросов и ответов. Мы ожидаем, что ответы будут подтверждены фактами, ссылками или опытом, но этот вопрос, скорее всего, вызовет дебаты, споры, опрос или расширенное обсуждение. Если вы считаете, что этот вопрос можно улучшить и,...
Я пытаюсь изучить некоторые LISP, и я много читал о важности макросов LISP, поэтому я хотел бы получить некоторый опыт работы с ними. Можете ли вы предложить практическую область применения, которая позволила бы мне использовать макросы для решения реальной проблемы и понять полезность этой...
При поиске декораторов Python кто-то утверждал, что они такие же мощные, как макросы Lisp (особенно Clojure). Глядя на примеры, приведенные в PEP 318, мне кажется, что это всего лишь причудливый способ использования простых старых функций высшего порядка в Лиспе: def attrs(**kwds): def decorate(f):...
Допустим, я хочу, чтобы в моем коде было несколько типов выходных сообщений. Один из них DEBUG, который печатается, только когда код скомпилирован в режиме отладки. Обычно я должен был написать что-то вроде #ifdef DEBUG std::cout << "Debug message" << std::endl; #endif что довольно...
Я читал о библиотеках, написанных людьми для таких языков, как Java и C #, в которых используется переплетение байт-кода для таких вещей, как перехват вызовов функций, вставка кода регистрации и т. Д. Я также читал в макросах Lisp / Clojure в попытаться лучше понять, как их использовать. Чем больше...
Я слышал, что макросы Clojure легче писать, но они не так надежны, как гигиенические макросы Racket. Мой вопрос состоит из 2 частей: Чем gensymотличаются гигиенические макросы? Что предоставляют макросы Racket, чего нет у Clojure? (будь то безопасность, композитность или что-нибудь)...