LINUX.ORG.RU

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

 ,


2

1

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

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

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

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

Остуди своё седалище и перестань за мной бегать. Полегчает, наверное

cppsektant
() автор топика

Метапрограммирование не нужно, нужна метакомпиляция. Только ее никак не могут довести до ума, но это не точно.

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

То шутка была.

Метаданные и метапрограммирование не панацея, но без метаданных можно «выковать» лишь «памятник», а с ними «робота» с ИИ.

Владимир

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

метакомпиляция

Что есть метакомпиляция? Предсказание переходов, предвыборка данных, спекулятивное выполнение?

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

метакомпиляция

Что есть метакомпиляция? Предсказание переходов, предвыборка данных, спекулятивное выполнение?

суперкомпиляция, Турчинов

Virtuos86 ★★★★★
()

Плыл-плыл, а на берегу описался.

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

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

Не понял сначала, что ты имел ввиду. Но суперкомпиляция тоже не нужна.

В лоровском треде ссылаться на другой лоровский тред в качестве пруфа.
Окай.

Virtuos86 ★★★★★
()

Я бы поставил вопрос шире: а зачем нужно программирование? Без него многим людям и так хорошо

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

Надо писать достаточно обобщённый код, который специализируется под все необходимые случаи

Обобщенное программирование к метапрограммированию как относится?

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

А ты сам почему не хочешь быть таким человеком?

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

Тогда зачем ты про обобщёнку сказал?

А зачем ты сам себя цитируешь?

Я пост процитировал, чей он - не так важно

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

Тогда зачем ты про обобщёнку сказал?

В моём первоначальном комменте какое-то слово непонятно?

Я пост процитировал, чей он - не так важно

О! Можешь же, когда хочешь.

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

в качестве пруфа

… у тебя ничего.

Пруфы у Мигеля. Обращайся к нему.

И да, это первая ссылка в поисковике была

Мысленно я аплодирую твоему подходу к ведению дискуссии.

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

В моём первоначальном комменте какое-то слово непонятно?

Этот тот случай, когда все слова понятны(и даже целый пост понятен), но вот к чему это сказано было - неясно.

Можешь же, когда хочешь.

Цитировать?

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

Пруфы у Мигеля

Это твой виртуал штоле?

Мысленно я аплодирую твоему подходу к ведению дискуссии.

Молодец, но держать меня в курсе своих фантазий необязательно.

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

но вот к чему это сказано было - неясно.

Это бывает. Даю подсказку: комменты обычно пишутся к чьему-то посту. Он, как правило, в начале топика.

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

У, это ты уже даже не до школьного уровня спустился, а прямо до детского садика. Иди в песочек играться.

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

Ладно, ладно. В эти подробности меня посвящать не надо.

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

Чёт ты быстро сегодня слился. Мысля в голову не идёт?

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

По-моему, молодой человек слишком юн разумом и возможно телом, чтобы с ним продолжать вести беседы.)

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

метакомпиляция

суперкомпиляция

Ты уж определись. Мета или супер.

суперкомпиляция, Турчинов

Можно основные тезисы, чтобы не искать чем суперкомпиляция отличается от, например, компиляции.

anonymous
()

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

Ныне «в почете» применение всякой чуши в компилтайме, о которой радостно и гордо говорят - «Это метапрограммирование».
М-да …

Метапрограммирование разное бывает, в т.ч. в run-time.
Взять к примеру 1С.
Что такое конфигуратор - метадата база.
Это всего лишь один из примеров использования метаданных.

Владимир

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

метаданные

Программы/алгоритмы уже есть, ничего не программируется, происходит выбор программ/алгоритмов на основе метаданных.

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

Программы/алгоритмы уже есть, ничего не программируется, происходит выбор программ/алгоритмов на основе метаданных.

Где-то так.
1С предоставляет много «мощных» /похвалил/ объектов.
При необходимости программист может разработать с помощью ВК новые объекты …
Конечно 1С не панацея.
Но даже такая объектная модель пригодна для большой ниши задач.

Не являюсь фатанатом 1С, но почему бы не похвалить то, что достойно похвалы?

Владимир

anonymous
()

Метапрограммирование имеет смысл для сред, которые поддерживают REPL Driven Development. Точнее даже REPLDD не имеет смысла без метапрограммирования.

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

Мне самому надо искать тогда). Зайди на википедию. Еще в каком-то номере некогда существовавшего короткое время журнала «Практика функционального программирования» была в популярном духе написана статья. Может, где-нибудь найдется pdf.

метакомпиляция

суперкомпиляция

Ты уж определись. Мета или супер.

Это синонимы, если что. Какой анонимус необразованный нынче пошел.

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

С чего это? Репл хорош для *KHUYAK-KHUYAK-AND-V-PRODUCTION* чего-то работающего на конкретных данных без долгого высиживания яиц проектирования. Если из лиспа убрать макросню, станет ли от этого репл ненужным?

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

Мета или супер.

Это синонимы, если что.

Приставка «мета» означает применение к самому себе. Метапрограммирование - программирование программирования. Метакомпиляция - компиляция компиляции. Метакомпилятор - компилатор компиляторов.

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

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

Ты вправе трактовать любые термины как тебе угодно, но общаясь в социуме, будь любезен применять общепринятые значения.

Суперкомпиляция это синоним метакомпиляции.

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

внутри языка этот кодоген функционал или внешним приложением

разница огромна: в C/C++ кодоген - это отдельный язык, не являющийся частью C/C++, а, скорее являющийся частью инфраструктуры UNIX. это сильно снижает их портативность. а вот в D избавляются от таких костылей.

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

скорее являющийся частью инфраструктуры UNIX

или инфраструктуры конпелятора

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

применять общепринятые значения

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

anonymous
()

А вот есть такой язык Scratch. Если я его выучу, я смогу зарабатывать на нем?

Владимир

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

Вполне. Сможешь обучать ему детей, для которых он и предназначен.

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

Приставка «мета» означает применение к самому себе.

Ну бред же. «Мета» означает «на уровень выше». Хотя Турчин использует термин «метавычисление», а «метакомпиляцию» придумали уже потом, наверное, не заботясь о смысле.

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

Это я отправляю в гугл, а не анонимус. Не путай. И то только потому, что готовых ссылок у меня самого нет.
А из-под анонимуса я в принципе не пишу. Зашел пару раз, ужаснулся от дефолтной темы, аватарок(бррр!) и зарекся.

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

Затем, что утилитку прикручивать к компилятору сложнее, чем реализовать функционал в компиляторе. … За вычетом Go я не вспомню ни одного языка, в котором подобный подход добился успеха.

Си : yacc, flex, kaitai, …

Си++ : moc, L++

Lisp : SWIG, Smoke

Javascript : parenscript, typescript, neverlang, …

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

Си : yacc, flex, kaitai, …

Мимо.

Си++ : moc

Мимо - это не С++, да и moc говно, который тянет qt на днище и который все мечтают выпилить, хотя днищем он и является.

L++

Это вообще какой-то мусор нелепый.

Lisp : SWIG, Smoke

Бездарная скриптуха для домохозяек никого не волнует.

Javascript : parenscript, typescript, neverlang, …

Опять нелепая чушь. Никакой ts не является кодогеном к жаваскрипту. Это надязык над жабаскриптом, который имеет таргет жабаскрипт.

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

Ну бред же. «Мета» означает «на уровень выше»

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

Метаязык - язык о языке.

Метафизика - физика о физике. Сама физика - общие, базовые знания о законах природы. В итоге, метафизика - общие/базовые знания об общих/базовых знаниях.

Супер - это превосходная форма.

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

А это уже более правдоподобно и осмысленно.

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

Мимо.

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

Мимо - это не С++, да и moc говно

Qt является самым популярным набором библиотек с графическим интерфейсом на C++. Напиши лучше без moc, если можешь.

Никакой ts не является кодогеном к жаваскрипту. Это надязык над жабаскриптом, который имеет таргет жабаскрипт.

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

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