LINUX.ORG.RU

Зачем нужно метапрограммирование?

 ,


2

1

Имеются ввиду возможности, встроенные в сам язык. Что имеем:

  • сильное усложнение языка(с т. з. кодера)
  • большая свобода действий для кодера, что, как известно, губительно в коммерческих(да и не только) проектах
  • ресурсы на сборку приложения превышают таковые для его запуска(иногда многократно)
  • сложность реализации компилятора, приводящая к ошибкам

Зачем нужна такая фича, когда можно генерировать код внешней утилитой?

Ответ на: комментарий от monk

Обоснуй. Код на целевом языке генерирует? Генерирует. Внешний скрипт? Да.

Нет. У тебя проблемы с методичкой. Откуда ты родил эти нелепые критерии? К тому же, ты даже здесь запутался. Это не внешний скрипт - это скрипт на отдельном «языке». Это больше макропроцессор. Он требует включения внешнего языка в исходный, когда как предполагаемая кодогенерация работает с языком напрямую.

Qt является самым популярным набором библиотек с графическим интерфейсом на C++.

Никакого С++ там нет. К тому же, к чему эта нелепая чушь? Абсолютно неважно то, чем там является qt. Тебя не об этом спрашивали и это не является аргументом.

Напиши лучше без moc, если можешь.

Каждая новая потуга нелепей предыдущей. Зачем ты болтаешь о том, в чём нихрена не понимаешь, а после так нелепо сливаешься?

Зачем мне писать, если этим занимаются авторы qt ещё с qt5. Ты в гугле узнал про moc и решил о нём сообщить? Ты опозорился.

Тебе сообщили, что moc не существует сам по себе - он существует вместе с макроснёй. moc в qt -это рудимент. Он создавался в бородатых годах, когда никаких С++ в текущем виде не было. Существует он вопреки.

И существует он только потому, что qt до сих пор легаси-мусор. И чем больше он будет C++ - тем меньше moc"а там будет оставаться.

Любой компилируемый язык программирования является кодогенератором для целевого языка.

Ты решил каждой новой чушью отрывать новые горизонты нелепости? Любой компилятор - кодогенератор. Очевидно, что это полная чушь. Ты обгадился и решил сыграть в дурочка?

Говорилось о конкретном виде кодогенерации. TS ею не является. Хотя даже это не особо важно, по определению необходима внешняя утилита, коей компилятор TS не являются.

Но давай я тебе помогу. Автор говорит о реализации метапрограммирования через внешний кодогенератор, управляемый через метаинформацию в исходном коде.

Хотя даже здесь тебе будет сложно. Потому как зачастую в недоязычках нету механизмов описания мета-информации. И любая внешняя херня - это уже макросня. Но в любом случае код должен быть валиден. Если это не так - это уже другой язык.

tosol4152
()

Кастуй Метапрога и спашивай. Он про метапрограммирование всё-о-о знает.

anonymous
()

Зачем нужна такая фича, когда можно генерировать код внешней утилитой?

Писать код кайфово. Есть из коробки. Вариативность решается не на уровне языка, а на уровне выше – нормы и практики. Вообще, для генерации нормальных утилит считай нету. Для того же Го на Го же писать генератор – лишние хлопоты. Кода много. Объём большой. В общем с генерацией проблемка.

anonymous
()
Ответ на: комментарий от tosol4152

Как же легко царь палится своим словом-паразитом.

anonymous
()

Тсарь опять забыл принять таблетки…

anonymous
()
Ответ на: комментарий от anonymous

«На уровень выше» о самом себе, о том же что корень.

Еще раз — бред. О каком «самом себе»? «О самом себе» это интроспекция, рефлексия.

Корочки филолога, или перестань расписывать бред без пруфов.

Virtuos86 ★★★★★
()
Ответ на: комментарий от anonymous

Ты свою чушь рассказываешь жене? Не проецируй на других.

Virtuos86 ★★★★★
()
Ответ на: комментарий от anonymous

Кастуй Метапрога и спашивай. Он про метапрограммирование всё-о-о знает.

@metaprog объяснял что означает «Мета».
В переводе с Украинского это - «цель».
Жаль конечно, что его комментарий нет в этом треде … /«Скучно господа»/.
Это был бы БОЛЬШОЙ ПРАЗДНИК «МЕТАПРОГРУММУВАННЯ».

anonymous
()
Ответ на: комментарий от Virtuos86

«О самом себе» это интроспекция, рефлексия.

Интроспекция (в смысле «о самом себе») - это знания о самом себе, в том числе знания о знаниях (метазнания) о самом себе.

Корочки филолога

Сперва к себе примени это требование - порефлексируй.

бред без пруфов

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

anonymous
()
Ответ на: комментарий от Virtuos86

Я тебя заигнорю вместе с твоими «пруфами».

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

anonymous
()
Ответ на: комментарий от cppsektant

Это где такое мнение? Ссылку, пожалуйста

Это общеизвестное, общепризнанное мнение. В частности изложено в этой вашей википедии в соответствующей статье.

no-such-file ★★★★★
()

Зачем нужна такая фича, когда можно генерировать код внешней утилитой

Собственно тебе уже ответили. Внешняя утилитка про язык ничего не знает и поэтому будет работать как тупая замена. А чтобы делать какой-то разбор и учёт синтаксиса «внешняя утилитка» должна быть равна компилятору и т.о. возвращаемся к тому, с чего начали.

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

В английской википедии, например, нет страницы «суперкомпиляция», а есть «metacompilation». Полагаю, на Западе эта техника известна именно под таким названием, иначе откуда это. В русской википедии в статье о суперкомпиляции есть оба этих термина, возможно «метакомпиляция» там в качестве кальки с английского. Сам Турчин использует термины «суперкомпиляция» и «метавычисление». Итого, можно усираться и доказывать что-то кому-то, а можно свободно использовать оба варианта.
А анонимные бараны, пытающиеся обосновывать исторически прихотливо сложившиеся профессиональные термины с точки зрения лингвистики, остаются анонимными баранами до тех пор, пока не смогут объяснить существование русскоязычных терминов вроде «потока» (thread) и наподобие его, очень логичных и понятных.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Окей. Порылся и немного скорректировал изменил свое мнение на следующее.

Суперкомпиляция - это техника вычисления программы, которая стремится её оптимизировать, и включающая в себя множественные метакомпиляции.

Метакомпиляция - это вычисление, которое включает в себя метасистемные переходы (MST) от вычислительной машины к метамашине, которая управляет, анализирует и имитирует работу оригинальной машины.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Сам Турчин использует термины «суперкомпиляция» и «метавычисление»

http://www.refal.net/doc/turchin/dag/node1.html

Sergei Abramov did an excellent and potentially very important work [1] on program testing on the basis of driving with a neighborhood (see Sec.3.3), and wrote a monograph on metacomputation other than supercompilation, [2] (it is still in Russian, though).

metacomputation = MST + SCP

MST - metasystem transformation SCP - суперкомпиляция.

anonymous
()
Ответ на: комментарий от Virtuos86

Зарегистрируйся, плиз. Я тебя заигнорю вместе с твоими «пруфами».

Игнор лист создан для баб. Поцан всегда может пояснить. Понял?

anonymous
()
Ответ на: комментарий от Virtuos86

Колхозная херня, целиком и полностью несостоятельна в том виде, в котором она описывается у колхозников.

Оптимизация на базе свойств входящих данных - это и есть одно из основных назначений метапрограммирования в С++. Единственное, что оно статическое. Но это не является проблемой.

Так же есть наработки и для рантайм-свойств - https://github.com/hfinkel/llvm-project-cxxjit/wiki Всё это есть в нормальном языке.

tosol4152
()

Зачем нужно метапрограммирование? …возможности, встроенные в сам язык.

С «метанедоумением» смотрят на тебя форт-системы :)

quickquest ★★★★★
()
Ответ на: комментарий от tosol4152

Оптимизация на базе свойств входящих данных - это и есть одно из основных назначений метапрограммирования в С++. Единственное, что оно статическое. Но это не является проблемой.

Когда в ссанном Си макросами выбирается тип float или double (в зависимости от define) – это не метапрограммирование?

anonymous
()
Ответ на: комментарий от anonymous

Ну ты не можешь в си выбрать тип - макросы этого не умеют. gnuc-фичи, либо какой-нибудь generic - это да, зачатки метапрограммирования.

Но в любом случае всё это не важно. Кидаются базвордами дошколята. У пацанов же вполне очевидный критерий - практика. Мне не интересно что там и как называется - интересно то, что это что-то даёт.

Поэтому и говорить о метапрограммировании имеет смысл только тогда, когда оно имеет какое-то весомое, определяющие место в языке. А выбор float/double - это дристня.

По этой причине никакого метапрограммирования нигде, кроме как в пацанских крестах - нет. А пацанские кресты - это лишь то, чем потенциально могут стать кресты.

tosol4152
()

Зачем нужна такая фича, когда можно генерировать код внешней утилитой?

для самовыражения фанатов С++.

waker ★★★★★
()

Тебе нужно попробовать метапрограммирование в нормальном языке. Например D Это будет полезно всем плюсистам - сразу понятнее становяться и плюсовая метамагия. Просто плюсы были первыми и метапрограммирование там появилось случайно. А в D уже продуманное было добавление с учетом опыта плюсов. Метапрограммирование в D настолько удобно, что его используют практически все, кроме самых новичков, а не только гуру языка как в плюсах.

Есть и другие языки с хорошим метапрограммированием, например Nim

anonymous
()
Ответ на: комментарий от no-such-file

В википедии много чего изложено, только первоисточником она не является.

cppsektant
() автор топика
Ответ на: комментарий от waker

ЧСХ, C++ здесь далеко не в лидерах. Но у меня подобная мысль мелькнула, когда тему создавал.

cppsektant
() автор топика
Ответ на: комментарий от anonymous

Я знаю, что в C++ метапрограммирования почти нет и что есть языки где оно по крайней мере более удобно. Как анонимус выше сказал - иногда оно нужно(в сложных случаях) - с этим тоже согласен. Но вот нафига оно большинству программистов - неясно.

cppsektant
() автор топика
Ответ на: комментарий от cppsektant

Но вот нафига оно большинству программистов - неясно.

Вы правы.
Разработка компиляторов, … не всем нужна.
Но есть одно «но».

C/C++ является лучшим языком для системного программирования.

Владимир

anonymous
()
Ответ на: комментарий от anonymous

C/C++ является лучшим языком для системного программирования.

ИМХО поэтому Microsoft давненько хочет от него «избавиться».
Не делают это лишь по одной причине …

Владимир

anonymous
()

ресурсы на сборку приложения превышают таковые для его запуска(иногда многократно)

сложность реализации компилятора, приводящая к ошибкам

Это исключительно проблемы дерьмово спроектированного метапрограммирования. Как в C++, например.

С остальными тоже поспорил бы, но лень.

Gentooshnik ★★★★★
()
Последнее исправление: Gentooshnik (всего исправлений: 1)
Ответ на: комментарий от anonymous

становяться

Ни разу так не делал, но тут всё же отправлю в школу учить русский язык. Это пи**** какой-то.

Gentooshnik ★★★★★
()
Ответ на: комментарий от Gentooshnik

Ах ну и да, дошколята с метапрограммированием на строках в бездарной скриптухе - это сильно. Хотя ладно, они всё равно ничего не знает и просто чушь несут. Маздайку домохозяйке накатили, пришли и давай срывать покровы на лоре.

Мне даже как-то неудобно апеллировать к тому, что d - бездарное тормозное дерьмо и его метапрограммирование никому, кроме дошколят, не нужно. Потому как зачем заморачиваться, если на выходе дерьмо?

tosol4152
()

Зачем нужна такая фича, когда можно генерировать код внешней утилитой?

Чтобы не генерировать код внешней утилитой, конечно же.

ugoday ★★★★★
()
Ответ на: комментарий от anonymous

Им тосол запретил? :)

C да, С++ скорее нет, чем да, но тут опять же зависит от того, что системным программированием называть.

anonymous
()
Ответ на: комментарий от tosol4152

Тебе, клоуну бездарному, неудобно бложИк на плюсах написать. Хотя ты, позорник, обещал всех порвать мощью си плюс плюс. Пока же ты очень жиденько обделался на глазах у всего Лора. И тем самым только вредишь крестам - с такими друзьями и врагов не надо.

Как только сцарь начинает критиковать какой-то язык - это верный знак, что язык достоин пристального внимания лоревцев.

anonymous
()
Ответ на: комментарий от Siborgium

Приложение собирается единожды

Посмотрел на тебя с недоумением. Порой при отладке оно собирается несколько десятков раз, прежде чем удаётся отладить всё как надо.

peregrine ★★★★★
()
Ответ на: комментарий от Lzzz

Ничего что C++ самый промышленный язык, а говнецом в виде шаблонов и препроцессора там только ленивый не обмазался. Архитектурно противно, но быстро и удобно.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Каждый конкретный бинарник собирается ровно один раз. Даже если просуммировать его время сборки с временем сборки его предшественников, будут существовать программы, для которых время их работы многократно выше такой суммы.

Siborgium ★★★★★
()
Последнее исправление: Siborgium (всего исправлений: 1)
Ответ на: комментарий от Siborgium

А будут существовать которые работают 1 раз. Например, программы для обработки данных (статистики), которые не меняются с течением времени. Правда нынче их на скриптах нормальные люди пишут.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Где я спорил с каким-либо утверждением из твоего списка? Все так, программы разные бывают. Язык нужно выбирать под задачу, а не наоборот.

Siborgium ★★★★★
()
Ответ на: комментарий от Siborgium

А я и не спорю. Я намекаю на то, что твой аргумент не является достаточным условием. Необходимым да, но не достаточным.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

сомневаюсь, что автор имел ввиду си :) где там усложнение языка и компилятора, и увеличение времени сборки? так-то да, метапрограммирование в разных проявлениях есть много где, но вот в таком ракурсе оно в основном в крестах. автор даже написал, что кодогенерацию противопоставляет метапрограммированию.

waker ★★★★★
()
Ответ на: комментарий от peregrine

Не понял. Какое отношение шаблоны имеют к динамике и почему этим занимаются именно статистики?

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.