LINUX.ORG.RU

Метапрограммирование - проблемы и пути их решения.

 , ,


12

6

Пичал я тут на днях токенайзел для C++-кода, но всё это меня добило я решил поделится.

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

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

Чтобы не быть голословным пишем что-то типа

constexpr uint64_t f(uint64_t a, uint64_t b) {
  return a + b; 
}
Всё ок, но пишем что-то сложнее, аля:

uint64_t m[] = {0, 1, 2, 3, 4};
constexpr uint64_t f(uint64_t a, uint64_t b) {
  return m[a] + m[b]; 
}

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

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

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

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

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

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

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

Хоть ЯП и вышли из матаппарата, но их переосмыслили более вменяемые личности.

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

Эта та которая про логические задачки?

Ага. Табличек там было много, но это другой класс задач.Там были рыцари (которые всегда говорили правду), лжецы (только врали) и человеки (которые когда как). Так вот доказать что ты человек было с полпинка - дост. сказать «я лжец». А вот доказать при наличии людей что ты лжец или рыцарь невозможно;-) Но вроде это из другой оперы, просто по ассоциациям...

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

Аккуратней, оно вообще может вынести мосг неподготовленному индивидуму.

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

Анонимус, ты же читаешь это. Ты ушел к другому? Ты меня кинул? Не покидай меня - я всё прощу.

(Замогильным голосом из за монитора) - Анонимусы все ушли. Тред открыт только для юзеров со скором >= 50ти. Ну и для Вас.

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

Общение на равных не надо заслуживать, заслуживать надо общение не на равных.

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

А классы в плюсах работают очень просто. Тоже могу объяснить;-)

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

Единственное, что мне не понятно - это ваш синтаксис записи. Объясните мне про производную, если я чего-то не понимаю. Причем не так, аля «ты лах иди учи книгу» - я слишком тупой для книги, ибо хоть я и царь - моё понимание слабее вашего. Попытайтесь объяснить идиоту на пальцах, авось я пойду.

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

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

Наверное потому, что Вы своим балабольством вызываете в первую очередь насмешки? А понты мне есть кроме Вас перед кем заколачивать.

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

Есть статья в вики. Алгоритм прост - читаете внимательно и пытаетесь понять. Многое будет неясно, но того что останется должно в итоге хватить. Таки мне бы хотелось, что бы Вы научились работать с литературой.

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

Если на пальцах, то производная — тангенс угла наклона касательной к графику в точке. Это в девятом классе рассказывают.

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

Я ХЗ что Вы понимаете под «ret». Если возвращаемое значение - то в матанализе я такого термина сходу не помню.

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

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

Это будет первый случай, когда 3классника вы научите дфу.

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

Ну вот у нас есть функция, она поидее возвращает значение - ваша f(1) возвращает 0. Насколько я понял из вики - ваша производная( от ~0) ещё может как-то высчитыватся какими-то пределами, но я так и не понял что там от меня хотят.

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

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

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

Да Вы ж весь тред криком кричали, что на это у Вас уйдет макс 15 мнут!!!111

Таки попытайтесь. Инет большой, есть объяснения и на пальцах. Вона PolarFox выше дал определение без единой формулы.

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

15минут у меня займёт не это, ну ладно. Сейчас ненадо придераться ко мне - мы пытаемся понять друг друга и забыть о треде.

Да я прочитал весь инет - я всю ночь гуглил про вашу производную и дфу, и вчера гуглил и щас гуглю, но не фортануло.

Моя голова работает так - если я не понимаю в чем смысл - я не запоминаю этого.

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

Ну предположим я нарисовал эту байду между точкой и нулём - как мне вычислить её угол?

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

Почему я такой тупой?, я вот пытаюсь понять какой профит нам принесёт этот угол, его тангенс.

Я пролистал пару учебников, вики - они там говорят про это, но кроме того, что написал выше polarfox и этой картинки - там ничего небыло.

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

а больше ничего и не надо. Только ноль тут непричем. Теперь надо посмотреть что есть касательная и что есть тангенс.

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

тангенс

угол

Это из геометрии в общем-то. Куда уж ближе к реальному миру?

Примеры применения производной? Если возьмём функцию зависимости координаты от времени, то первой производной будет скорость, второй ускорение.

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

А можно подробней? Геометрию я знаю на уровне - это круг, а это квадрат.

Скорость чего и ускорение чего?

Вот у нас есть t & x, как записать это в дфу?

1 2 3 4 5 6// это значение х.

Ну скорость у нас постоянна, находится x+1 - x;

Ускорение я не знаю - тут его нет, если оно есть - вычисляется не сложнее скорости.

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

Ну что есть касательная я понял. Что есть тангенс не очень.

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

На картиночке нарисованно, что она типа в х=0/

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

Ну скорость у нас постоянна, находится x+1 - x;

Забыл поделить на время между соседними измерениями. А если это время устремить к нулю (соответственно эти измерения будут проводиться очень часто), то ты получишь определение производной как оно даётся в учебниках по матану.

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

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

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

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

Я вроде думал, что сделал приписку, что в попугаях, а не сделал.

Т.е. это максимально приблеженное к идеальному значение функции?

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

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

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

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

Или одна точка и направление. Направление задается направлением графика функции в данной точке.

На картиночке нарисованно, что она типа в х=0/

Это совершенно необязательно.

http://ru.wikipedia.org/wiki/%D2%F0%E8%E3%EE%ED%EE%EC%E5%F2%F0%E8%F7%E5%F1%EA... - см. рис. 3.

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

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

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

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

Это совершенно необязательно.

Я прозрел и понял тригонофункции.

Производная - это значение функции с предельно высокой дискретезацией?

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

Я это понимаю. Но это уже детали. Попугаи, они и в африке попугаи, а какие это попугаи - это понятно из контекста.

Я это тоже понимаю.

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

Правда я один фиг нихрена не понял.

         2
d u     d u
--- = D ----
d t        2
        d t

Вот как понять эту надпись? это типа отношение u к т равно чему-то. Ну д понятно, а что там за двоечки?

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

это типа отношение u к т равно чему-то

нет

а что там за двоечки?

это вторая производная (дэ квадрат у по дэ x квадрат). У меня там права и правда t что ли стояло??? Блин, значит описался;-(

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

Вот оно сложно с царями, которые нихрена не понимают.

нет

А что? Там в википедии есть об этом синтаксисе лейбница, но я так и не осилил понять.

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

Куда уж ближе к реальному миру?

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

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

Это производная u по t. Такая запись означает отношение дифференциалов (приращений), что с-но и есть производная. Но вообще то в у-е теплопроводности речь идет о частных производных, это чуть более специфичная вещь.

Давайте сначала с обычной производной разберемся.

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

Ну как я понял касательная там С, а пачему ваша картинка темнит и там угол между какой-то чёрточной линией и чёрточной линией, а не С.

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

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

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

Ну горизонтальная черточная линия - от нее с-но угол всегда и меряют. А вот наклонная черточная линия AB стремится к С при Delta x стремящейся к нулю. С-но это определение производной через предел.

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