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