LINUX.ORG.RU

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

 ,


2

1

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

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

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

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

Давно пора на смену им разработать readable синтаксис поискового выражения /и с много большей функциональностью/.

Для «разминки» можно было бы использовать sqlite с его https://www.sqlite.org/vtab.html
Он имеет не малый «потенциал» …

Владимир

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

readable синтаксис поискового выражения

Поиск бывает разный в пространствах разных размерностей, не только одномерных. Успехов тебе написать «readable синтаксис» для поиска в общем случае.

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

Успехов тебе написать «readable синтаксис» для поиска в общем случае.

Вы чегой-то там за меня выдумали …
Давайте эшо.

Владимир

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

Вы чегой-то там за меня выдумали …

А сам чего выдумал? Не дал определения, даже намека, что есть «readable». Привел пример sqlite vtab, который совсем не про поиск.

И, вообще, причем тут истинный метапрог?

Олежа.

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

Привел пример sqlite vtab, который совсем не про поиск.

Да ну …
Как же тогда с использованием sqlite vtab обеспечил возможность поиска в dbf файлах /в т.ч. использующих индексные файлы типа CDX/?

Фразу «Для «разминки»» вы правильно поняли?
Подскажу …
Эта фраза не утверждает что это лучший путь.

Владимир

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

И, вообще, причем тут истинный метапрог?

О нем речи и не было …

Владимир

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

sqlite vtab обеспечил возможность поиска

Обеспечил доступ через единообразный интерфейс (sql запросов), вплоть до того, что в некотрых случаях можно даже изменять (insert и тп). Причем тут поиск (-овые выражения читаемые)?

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

Обеспечил доступ через единообразный интерфейс (sql запросов), вплоть до того, что в некотрых случаях можно даже изменять (insert и тп). Причем тут поиск (-овые выражения читаемые)?

При том, что sql запрос более readable, чем регулярные выражения.

Владимир

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

Причем тут поиск (-овые выражения читаемые)?

Понятно, что в этих вопросах вы - «не бум-бум».
Отвечаю лишь для того, чтобы обсудить альтернативы регулярным выражениям.

Владимир

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

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

Согласен.
И эшо для того - «чтобы не скучно было».

Владимир

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

sql запрос более readable, чем регулярные выражения.

Примеры будут? Например, для URL, или для IPv6.

И опять вопрос - причем тут vtab?

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

заменять кодеров кодогенераторами

«Стоп-стоп-стоп! Вы что и конфеты за меня есть будете?»

А кто нулевой пациент? Кто будет код писать?

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

Почитайте

И что я там должен увидеть? Где там про readable поиск?

Володька, давай, рисуй readable sql запрос для хотя бы IPv4.

Алёша.

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

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

Пора и над собой пошутить

Метапрограммирование для тех, у кого "Мета" в голове.

Владимир

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

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

Более того, нубу даже нельзя объяснить словами, потому что в понимании слов он тоже нуб. Жестами ты ему тоже ничего не объяснишь, потому что в понимании жестов он тоже нуб.
Метапрог-прототип 19 + API на СУВТ + ускорение трансляции (комментарий)

Нубу может помочь только нуб /они братья/.  

Владимир

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

Нубу может помочь только нуб /они братья/.

Вчера иду с работы домой и слышу как один малыш другому говорит

Мы с тобой друзья.  
Даже плюемся одинаково.

Владимир

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

А кто нулевой пациент? Кто будет код писать?

Программисты, конечно. AI изобретут как минимум нескоро.

А вот кодерков можно вполне заменять макросами.

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

Программисты, конечно. AI изобретут как минимум нескоро.

Я думал метапрограммы будут писать метапрограммисты, то есть, кто программирует или зомбирует программистов - духовные наставники, манагеры высшего звена. «И конфеты за них будут есть».

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

Я думал метапрограммы будут писать метапрограммисты,

Вы правы.
Хороший пример тому - «Метапрог».

Владимир

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

Хороший пример тому - «Метапрог».

И конечно Торвальдс не товарищ @metaprog

Они даже плюются по разному.

Владимир

anonymous
()

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

Очень емкая тема.
Отчасти знаю где метапрограммирование «уместно», а в целом

"Нельзя объять необъятное"

Владимир

anonymous
()

Вот Golang в этом плане хороший пример. Там как раз принято пользоваться кодогенераторами.

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

Самая большая, на мой взгляд, это необходимость иметь в наличие все эти генераторы нужных версий. Как контролировать эти версии - непонятно. В команде, где вас больше 2-3 человек начинаются пляски о том, что у каждого своя версия генератора, и пошло засирание git’а коммитами о том, что один нагенерил так, другой иначе. И это пол беды. Вторая, что с выходом новой версии генератора в нем могут поломать обратную совместимость и прочие приколы. Потому как каждый товарищ с github не проверяет совместимость новой версии с твоим кодом. И вот уже вместо разработки ты переключаешься на решение вопросов о том, что же там сломалось, а так же как это починить или как откатиться. Плюс, будем честны, не все писатели генераторов обладают компетенциями, сравнимыми с разработчиками языков.

На выходе получаем, что лучше одна кодогенерация, встроенная в язык программирования, отлаженная и проверенная на совместимость, чем много разных, написаных под разные версии языка, либ и пр. А причина проста: разработчики языка уже за тебя подумали и сделали (скорее всего) хорошо, экономя твое время.

По поводу сложности метапрограммирования: в рядовой бизнес-логике редко к этому прибегаешь. Да и тут мне нравится высказывание Страуструпа на тему того, что инструмент должен уметь решать возложенные на него задачи (точную формулировку не помню). А если программисту сложно это использовать, то не надо это использовать, либо сначала надо (представь себе) подумать!

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

Успехов тебе написать «readable синтаксис» для поиска в общем случае.

прочитал регулярки IPv6/IPv4 по сцылке, прослезился.

вдругорять прозреваю: PARSE ARG выражения из REXX, либо PARSE диалект из REBOL/Red возможно справятся.

datalog, опять же.

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

телеология объясняет фсё

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

кантова имманентова «вещь в себе», тащемта. метациклически.

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

напомнило фантастический рассказ, прочитанный в глубоком детстве ещё про функцию Шорина

tl;dr> у меня есть мысль, и я её думаю. в смысле – одна, единственная. с недостаточно истинным метапрогом вот то же самое – оно однозначно, функция один-в-один а не отображение «изо всё во всё».

и функция всей жизни этого вот космической величины человека – тоже одна единственная.

как же это всё скучно. для истинного метапрога. повелителей времени, ога.

Функцию Шорина — формулу победы над пространством — знает каждый студент-звездолетчик. Изящное многолепестковое тело, и еще искривленное в четвертом измерении — на нем всегда испытывают пространственное воображение. Мы говорили о другой функции — о функции жизни Шорина, простой, как уравнение первой степени, линейной, прямолинейной. Прямая линия, идущая вперед, невзирая на барьеры, пересекая барьеры! Первый барьер — арифметический: миллиард желающих на одно место. За ним — барьер энергетический: двигатели слабы. Барьер лучевой, потом барьер физиологический; тело слабо для субсветовых скоростей. Наконец — барьер эгоистический: мечта осуществима, но для себя. И этот барьер пересекает прямая, устремляется к следующему — световому барьеру. Сколько лет уйдет на его преодоление — пять или пятьсот? Этого Шорин не знает.

Прямая идет вперед — до бесконечности. Сворачивать она не умеет.

anonymous
()
Ответ на: телеология объясняет фсё от anonymous

Дин не соглашался категорически, потому что мысли Шорина противоречили старинной классической теории относительности.

айнштайн ф опасносте!!!111 а мужыки-то не знают

Дин выписывал формулы, где «С» делилось на «С» и под корнем получался ноль. Ноль пространства — абсурд!

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

man wheel деления вместо кольца, ненулевые делители нуля, паракомплексные, дуальные числа, ТФПКП пространственного комплексного вместо плоского ТФКП

Шорин выводил свои формулы. (Тогда и появилась та самая функция Шорина в виде многолепесткового тела, изогнутого в четвертом измерении.)

или в двумерном времени, так даже проще. вектор Умова, энергия времени Козырева, многомерное время.

силу времени не остановить!!! 111 //тащемта, есть над чем задуматься

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

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

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

Я думал метапрограммы будут писать метапрограммисты, то есть, кто программирует или зомбирует программистов - духовные наставники, манагеры высшего звена.

жёны программистов метапрограммируют оных.

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

кто метапрограммирует метапрограммистов

вы запрограммировали меня не делать этого?
нифига. я запрограммировал вас не хотеть этого делать.

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

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

а иногда же бывает – хочется странного. невозбранно.

** Quis custodiet ipsos custodes? ** невозбранно декогенерировав.

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

Смотрит в книгу, видит фигу.

вот это и его метамодель – это коммутативная диаграмма из теории категорий в ASCII art ?

или уравнение теорката «амальгама в категории» ???

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

лисп изначальный и опенженера православная, исходъ.

Вот Golang в этом плане хороший пример. Там как раз принято пользоваться кодогенераторами.

вотъ я (ѧ) смотрю исподникъ некоих срѣдствъ конвертации из исходниковъ Symbolics божественнаго откровения, явившегося нам в знамениях, и распечатанного каменным скрѣбкомъ в скрижалях выше (sct – срѣдство конфигуряционнаго управленiѧ).

собственно, и genesis изначальный и миры по ссылке в лялексах запускать возможно

почитываю тут user’s guide.pdf и Lisp Lore: A Guide to Programming the Lisp Machine.

и таки, знаете что? кодогенераторы эволюционирующие, ограниченно разумные, способные один олдскульный диалект (Symbolics Lisp с flavors объектной системою отображаемой на CLOS, как и прочие псевдоразумные метатрансляции зеталиспа ретикуляни изначального на этот ваш новомодный Common Lisp)

и эта вот ваша проблема

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

вполнѣ себѣ разрѣшаемаѧ.

если язык адекватный. даже скорее, метаязык как средство реализации. который из-за гомоиконности, мета, рефлексии, и прочих метациклических интроспекций вполне себе способенъ къ процедурной метагѣнерации, а стало быть при хоть-нитой ограниченной свышѣ псѣвдоразумности – парамѣтрическагому сiнтѣзу поди тоже ..

anonymous
()

если язык адекватный. даже скорее, метаязык как средство реализации. который из-за гомоиконности, мета, рефлексии, и прочих метациклических интроспекций вполне себе способенъ къ процедурной метагѣнерации, а стало быть при хоть-нитой ограниченной свышѣ псѣвдоразумности – парамѣтрическагому сiнтѣзу поди тоже ..

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

Владимир

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

цепепесектантъ> Зачем нужно метапрограммирование?

чтобы изучить С++ за 21 день. очевидно же, что для этого потребуется построить машину времени.

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

такъ, для корневой цели энтелехии «изучить С++ за 21 день» невозбранно придётся «построить машину времени» (телеологическая причина №1). и заметапрограммировать ея на С++ (телеологическая причина №3). для чего хорошо бы конечно, знать этот самый С++ (телеологическая причина №4). и вотъ, возбранно недостингувъ – мы уже попадаем словно попаданцы какия в петлю времени, ибо сказано: энтелехия = т.п.№4, то есть, цикл.

впрочемъ, поразмысливъ какъ следуетъ – энти причины всё-таки различаются. энтелехия содержит ограничение по времени, а т.п.№4 его не содержитъ. стало быть, изучать можно невозбранно долгое количество времени. которого у нас нетъ. которое чтобы появилось – следует невозбранно «построить машину времени» (т.п.№1), сиречь – опять вдругорядь петля, метациклически.

времени всегда нѣ хватаѣтъ. особенно въ простомъ одномерномъ линейномъ времени. а разгадка проста: безблагодатность – въ плоскомъ двумерномъ, напримеръ спиральныя инкрементацiи спрiнтовъ Скрамъ – ево прѣдостатошно.

а стало быть посѣму: изучать С++ будем в двумѣрномъ врѣмени. кажыя 20 день возвращаясь в пѣрвый, и изучая в слѣдующий разъ – новое разноѣ.

тогда какъ разѣ к 21 дню и уложимся. задачею возникаетъ типа укладки графа размѣченнаго компиляторомъ, при размѣщении регистровъ процѣссора. то есть, типичная задача компиляции – и мѣтакомпиляции.

пополамъ съ машиннымъ обучениемъ. обучениемъ безо всякаго учителя.

попросту говоря, статистической подгонке результатовъ (телеологическихъ причинъ мѣтрикъ качества обучения) подъ благостныя парамѣтры.

богъ дастъ, и качественно при этом чему-нибудь научимся. а не токмо формально.

телеологически, изъ формально вѣрнаго обучения может слѣдовать и вѣрно качѣственноя. а можѣтъ и нѣ слѣдовать. возбранно и нѣвозбранно.

а разгадка одна: обучение сиё должно чѣредоваться съ полезными результатами, дабы бросание камешковъ въ прудъ али забивание гвоздей золотымъ молоткомъ не было пустою забавою.

стало быть, в процессе сѣго обучения придётся выучить и 10500 другихъ языковъ (и мѣтаязыковъ). дабы отличать нѣвозбранно достигнутое желаемое отъ достигутого возбранно или пуще того, возбранно не достигнутаго.

обучение съ подгонкой формальныхъ параметровъ – это отличный примеръ для мѣтакомпиляции, для мѣтапрограммiрованiя.

дабы обучиться С++ за 21 годъ – потребуется мѣтапрограммировать. попутно поигрывая отъ скуки в тѣтрисъ врѣмёнъ компиляции на шаблонахъ цепепе.

затемъ, и дальнейшия примеры нужности С++ можно пѣреписать въ на шаблонахъ и концептахъ въ такомъ видѣ (но я лично столько не выпью)

потомъ, изучивъ цепепе какъ слѣдуетъ – по окончании 21 года достинувъ опрѣделённаго совершенства (пределъ или барьеръ ?? из функции Шорина) в многомѣрном, да хотя бы двумѣрномъ времени спиральныхъ инкрѣментаций анизатропнаго мира (ѣcть такое слово: Кадо! НАДО — вотъ вѣрный отвѣтъ!)

  • прыгаемъ въ машину времени

  • прыгаемъ въ ней назадъ – въ линейномъ одномѣрном врѣмени какъ разъ за этотъ 21 год двумѣрнаго пройдётъ всѣго лишь 21 дѣнь

  • и нѣвозбранно достигнувъ жѣлаемого, исполняемъ симъ корневую энтелехию.

вотъ зачѣмъ нужно мѣтапрограммированiе, на самом деле. истинно говорю вамъ.

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

пуськи бятые шизокрылыя

нелѣпо ли мы бяшем, братие? да, бяшем нелепо.

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