История изменений
Исправление www_linux_org_ru, (текущая версия) :
Твое дело - слушать, что я говорю.
бугага
Если понимать под метапрограммированием кодогенерацию, то лисповые макросы не буду метапрограммированием, что бред. А если считать лисповые макросы метапрограммированием, то придется считать метапрограммированием и определение своего класса. Иначе никак.
лисповые макросы могут делать кодогенерацию (а могут просто менять состояние компилятора), но я не буду придираться к твоим словам, а сразу разъясню твою ошибку
да, метапрограммирование это (скорее всего) изменение состояние компилятора, но однозначно, что не всякое изменение состояние компилятора это метапрограммирование
теперь встает вопрос, а что же тогда такое метапрограммирование?
объясняю на простом примере: чем программируемый калькулятор отличается от обычного — у него есть *программируемая* кнопка
возьмем двух юзеров — *оба* изменяют внутреннее состояние калькулятора, тыкая на кнопки, но один из них программированием не занимается, а другой занимается, т.к. *изменяет* значение программируемой кнопки (т.е. изменяет ту последовательность операций, что она вызовет)
точно так же программист, просто меняющий внутреннее состояние компилятора, МЕТАпрограммированием не занимается — чтобы он занялся МЕТАпрограммированием, нужна «кнопка», назначение которой он может изменить
так вот в яве 1.0 таких кнопок *нет*; там все кнопки имеют *фиксированное* значение, и невозможно определить кнопку со своим значением
как могла бы выглядеть «программируемая кнопка» в яве? например, это могло бы быть ключевое слово struct, которое изначально ничего не делает, но которое маша может заМЕТАпрограммировать на то, что struct создает класс, у которого все поля и методы публичны, а петя может заМЕТАпрограммировать struct на то, что struct создает класс, у которого все поля обязаны быть потомком класса Widget (это чтобы формошлепщики случайно не сунули в свой struct че-то, отличное от Widget-ов)
шаблоны, кстати, тоже позволяют делать свои программируемые кнопки (хотя и не такие, как я описал), насчет дженериков явы — это вопрос
и во-вторых, перестань путать фичу с ее реализацией — т.е. типизацию с ее возможной реализацией макросами — ибо она может реализовываться не только макросами, но и кодом внутри компилятора
Исправление www_linux_org_ru, :
Твое дело - слушать, что я говорю.
бугага
Если понимать под метапрограммированием кодогенерацию, то лисповые макросы не буду метапрограммированием, что бред. А если считать лисповые макросы метапрограммированием, то придется считать метапрограммированием и определение своего класса. Иначе никак.
лисповые макросы могут делать кодогенерацию (а могут просто менять состояние компилятора), но я не буду придираться к твоим словам, а сразу разъясню твою ошибку
да, метапрограммирование это изменение состояние компилятора, но не всякое изменение состояние компилятора это метапрограммирование
теперь встает вопрос, а что же тогда такое метапрограммирование?
объясняю на простом примере: чем программируемый калькулятор отличается от обычного — у него есть *программируемая* кнопка
возьмем двух юзеров — *оба* изменяют внутреннее состояние калькулятора, тыкая на кнопки, но один из них программированием не занимается, а другой занимается, т.к. *изменяет* значение программируемой кнопки (т.е. изменяет ту последовательность операций, что она вызовет)
точно так же программист, просто меняющий внутреннее состояние компилятора, МЕТАпрограммированием не занимается — чтобы он занялся МЕТАпрограммированием, нужна «кнопка», назначение которой он может изменить
так вот в яве 1.0 таких кнопок *нет*; там все кнопки имеют *фиксированное* значение, и невозможно определить кнопку со своим значением
как могла бы выглядеть «программируемая кнопка» в яве? например, это могло бы быть ключевое слово struct, которое изначально ничего не делает, но которое маша может заМЕТАпрограммировать на то, что struct создает класс, у которого все поля и методы публичны, а петя может заМЕТАпрограммировать struct на то, что struct создает класс, у которого все поля обязаны быть потомком класса Widget (это чтобы формошлепщики случайно не сунули в свой struct че-то, отличное от Widget-ов)
шаблоны, кстати, тоже позволяют делать свои программируемые кнопки (хотя и не такие, как я описал), насчет дженериков явы — это вопрос
и во-вторых, перестань путать фичу с ее реализацией — т.е. типизацию с ее возможной реализацией макросами — ибо она может реализовываться не только макросами, но и кодом внутри компилятора
Исправление www_linux_org_ru, :
Твое дело - слушать, что я говорю.
бугага
Если понимать под метапрограммированием кодогенерацию, то лисповые макросы не буду метапрограммированием, что бред. А если считать лисповые макросы метапрограммированием, то придется считать метапрограммированием и определение своего класса. Иначе никак.
лисповые макросы могут делать кодогенерацию (а могут просто менять состояние компилятора), но я не буду придираться к твоим словам, а сразу разъясню твою ошибку
да, метапрограммирование это изменение состояние компилятора, но не всякое изменение состояние компилятора это метапрограммирование
теперь встает вопрос, а что же тогда такое метапрограммирование?
объясняю на простом примере: чем программируемый калькулятор отличается от обычного — у него есть *программируемая* кнопка
возьмем двух юзеров — *оба* изменяют внутреннее состояние калькулятора, тыкая на кнопки, но один из них программированием не занимается, а другой занимается, т.к. *изменяет* значение программируемой кнопки (т.е. изменяет ту последовательность операций, что она вызовет)
точно так же программист, просто меняющий внутреннее состояние компилятора, МЕТАпрограммированием не занимается — чтобы он занялся МЕТАпрограммированием, нужна «кнопка», назначение которой он может изменить
так вот в яве 1.0 таких кнопок *нет*; там все кнопки имеют *фиксированное* значение, и невозможно определить кнопку со своим значением
как могла бы выглядеть «программируемая кнопка» в яве? например, это могло бы быть ключевое слово struct, которое изначально ничего не делает, но которое маша может заМЕТАпрограммировать на то, что struct создает класс, у которого все поля и методы публичны, а петя может заМЕТАпрограммировать struct на то, что struct создает класс, у которого все поля обязаны быть потомком класса Widget (это чтобы формошлепщики случайно не сунули в свой struct че-то, отличное от Widget-ов)
шаблоны, кстати, тоже позволяют делать свои программируемые кнопки, насчет дженериков явы — это вопрос
и во-вторых, перестань путать фичу с ее реализацией — т.е. типизацию с ее возможной реализацией макросами — ибо она может реализовываться не только макросами, но и кодом внутри компилятора
Исходная версия www_linux_org_ru, :
Твое дело - слушать, что я говорю.
бугага
Если понимать под метапрограммированием кодогенерацию, то лисповые макросы не буду метапрограммированием, что бред. А если считать лисповые макросы метапрограммированием, то придется считать метапрограммированием и определение своего класса. Иначе никак.
лисповые макросы могут делать кодогенерацию (а могут просто менять состояние компилятора), но я не буду придираться к твоим словам, а сразу разъясню твою ошибку
да, метапрограммирование это изменение состояние компилятора, но не всякое изменение состояние компилятора это метапрограммирование
теперь встает вопрос, а что же тогда такое метапрограммирование?
объясняю на простом примере: чем программируемый калькулятор отличается от обычного — у него есть *программируемая* кнопка
возьмем двух юзеров — *оба* изменяют внутреннее состояние калькулятора, тыкая на кнопки, но один из них программированием не занимается, а другой занимается, т.к. *изменяет* значение программируемой кнопки (т.е. изменяет ту последовательность операций, что она вызовет)
точно так же программист, просто меняющий внутреннее состояние компилятора, МЕТАпрограммированием не занимается — чтобы он занялся МЕТАпрограммированием, нужна «кнопка», назначение которой он может изменить
так вот в яве 1.0 таких кнопок *нет*; там все кнопки имеют *фиксированное* значение, и невозможно определить кнопку со своим значением
как могла бы выглядеть «программируемая кнопка» в яве? например, это могло бы быть ключевое слово struct, которое изначально ничего не делает, но которое маша может заМЕТАпрограммировать на то, что struct создает класс, у которого все поля и методы публичны, а петя может заМЕТАпрограммировать struct на то, что struct создает класс, у которого все поля обязаны быть потомком класса Widget (это чтобы формошлепщики случайно не сунули в свой struct че-то, отличное от Widget-ов)
и во-вторых, перестань путать фичу с ее реализацией — т.е. типизацию с ее возможной реализацией макросами — ибо она может реализовываться не только макросами, но и кодом внутри компилятора