LINUX.ORG.RU

История изменений

Исправление byko3y, (текущая версия) :

То есть минусы наличия макросов есть (можно сделать нечитаемо), а плюсов от нормальных макросов (как в лиспах или Rust’е) нет

Я уже давно высказал свою позицию: макросы — зло. Сишные макросы используются в большинстве случаев для описания констант и обобщенных функций — эти применения легко реализуются в C++ безо всяких макросов, на уровне языка. Именно потому нынче никто не пишет на чистом Си, даже не ради классов и хитровыдуманных шаблонов, а просто чтобы получить обобщенные функции плана a+b в языке и нормальные константы.

Если бы язык Си действительно строился на макросах, то есть, реализация какого-нибудь printf была на макросах, то язык бы постигла та же судьба, что и лисп.

Кусками вспоминают: лямбды и лексические замыкания в JS (а с недавних пор и в C++)

Замыкания теоретически были известны до появления первых компьютеров, а практически были реализованы впервые в языке PAL. Первые же лексические замыкания появились не совсем в лиспе, а в Scheme — лексические замыкания в лиспе появились значительно позже, а в eLisp долго жили (а может и до сих пор живут) без лексических замыканий. Более того, в лиспе жили с негигиеничными макросами, которые позволяли непреднамеренные замыкания. Так-то замыкания были еще, например, в ML и APL — так что это не исключительная для лиспа фича.

s-выражения в WebAssembly

Да. Напоминаю, что макросов там нет.

макросы в Rust

Там всё непросто.

метаклассы в Python

Метакласс в питоне — это тупо функция. И ничего больше. Модно было в то время иметь метакласс, вот и создатели питона тоже назвали что-то метаклассом у себя.

Исходная версия byko3y, :

То есть минусы наличия макросов есть (можно сделать нечитаемо), а плюсов от нормальных макросов (как в лиспах или Rust’е) нет

Я уже давно высказал свою позицию: макросы — зло. Сишные макросы используются в большинстве случаев для описания констант и обобщенных функций — эти применения легко реализуются в C++ безо всяких макросов, на уровне языка. Именно потому нынче никто не пишет на чистом Си, даже не ради классов и хитровыдуманных шаблонов, а просто чтобы получить обобщенные функции плана a+b в языке и нормальные константы.

Есил бы язык Си действительно строился на макросах, то есть, реализация какого-нибудь printf была на макросах, то язык бы постигла та же судьба, что и лисп.

Кусками вспоминают: лямбды и лексические замыкания в JS (а с недавних пор и в C++)

Замыкания теоретически были известны до появления первых компьютеров, а практически были реализованы впервые в языке https://en.wikipedia.org/wiki/PAL_(programming_language)[/url. Первые же лексические замыкания появились не совсем в лиспе, а в Scheme — лексические замыкания в лиспе появились значительно позже, а в eLisp долго жили (а может и до сих пор живут) без лексических замыканий. Более того, в лиспе жили с негигиеничными макросами, которые позволяли непреднамеренные замыкания. Так-то замыкания были еще, например, в ML и APL — так что это не исключительная для лиспа фича.

s-выражения в WebAssembly

Да. Напоминаю, что макросов там нет.

макросы в Rust

Там всё непросто.

метаклассы в Python

Метакласс в питоне — это тупо функция. И ничего больше. Модно было в то время иметь метакласс, вот и создатели питона тоже назвали что-то метаклассом у себя.