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 пути: терпеть, пилить свой язык и конпелятор самому( что долго и нудно) и ваш совет.

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

Обучаемый заговорил почти нормальным языком. Ты крут как преподаватель. Уважуха.

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

заюзай 128бит и так деле - потери точности не будет, а мороки меньше

Где я могу купить камень, который мне будет выдавать больше операций в секунду на 128бит интах чем нынешние флоаты?

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

с несколькими разными анонимами?

есть вариант, что ТС и с собой еще немного разговаривает - и с прочими «воображаемыми друзями».

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

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

Да, но боюсь без документов за 11й класс в ВУЗ не возьмут. Есть правда еще техникумы/колледжи... Кроме сишки в нормальном вузе еще много-много чему учат. Например математике и физике, которых Вы практически не знаете.

Насчет выбора вуза. Самое главное, основное отличие тех, кто закончил илитный вуз от тех кто закончил заборостроительный техникум - первые подали документы в илитный вуз, а вторые нет. В РФ, что бы там не говорили, остались приличные вузы (ну еще в рамках самого вуза надо выбирать факультет, кафедру и пр.). Не знаю, в какой школе Вы учились, но в хорошем вузе Вы попадете в среду очень толковых ребят, это важно. М.б. Вы будете средти них лучшим программистом, но они будут гораздо лучше Вас знать математику, физику и пр. - среда очень много значит.

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

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

Еще раз - учится надо идти не за корочкой, а за знаниями. Претензии к Вам связаны не с тем что у Вас нет диплома, а с тем что Вы многого не знаете (и даже не знаете как много Вы не знаете к сожалению).

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

А любая предметная область подразумевает знание математики (каких то соответствующих разделов).

ложь.

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

Как я напишу, что я буду делать, если я не представляю, что от меня вообще хотя

Как я объясню, что от Вас хочу и зачем оно, если Вы отказываетесь прочитать и понять про производную например?

Я про маску ничего не говорил, я лишь сказал, что ваша маска в 90% случаев - это натычка из шаблончиков. Какие тут омегарасчёты нужны? Для размещения елементов? Вы мне так и не объяснили.

Хорошо, давайте разберем это подробней. Вы предлагали, насколько я понял, поглядеть на процессор в тепловизор и на основе этого сделать маску. Так? Идея прекрасная, но есть несколько проблем:

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

2) При фотолитографии процессор изготавливается послойно. Т.е. смотреть на процессор в сборе бессмысленно, нужно смотреть на отдельные «слои» (на самом деле все сложнее), и под каждый «слой» нужна своя маска.

3) Тепловизор ничего не даст. Смотреть надо в ультрафиолете, на той длине волны которая используется при литографии, даже в приближении геометрической оптики есть дисперсия, разные длины волн преломляются по разному.

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

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

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

ложь.

То, что Вы не знаете название соотв. раздела математики, не значит что Вы не знаете соотв. раздела в необходимом объеме, если работаете в этой области. Приведите хотя бы один пример области, где нужно программирование и не нужна математика;-)

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

Еще раз (надеюсь в последний).

1) Как правило, в расчетах используются float (4 байта) или double (8 байт). Более длинные числа используются редко. Выбор зависит от специфики конкретной задачи.

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

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

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

Разработка сайтов, разработка всяких бизнес-приложений, разработка драйверов (сетевых, например)

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

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

Приведите хотя бы один пример области, где нужно программирование и не нужна математика;-)

Могу привести пример «рынков»: весь аутсорс ынтерпрайз, «сайтики клепать», 1с, ондроед-сатрапы. Наверное не ошибусь, если скажу, что у нас в СНГ 95% программистов трудятся в этих областях.

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

Разработка сайтов, разработка всяких бизнес-приложений, разработка драйверов (сетевых, например)

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

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

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

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

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

Это заблуждение. Нужно «знать» цифровую схемотехнику, или ту же «сишечку» (если МК), редко когда - основы дискретной математики по курсу «за 21 день».

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

Вас не смущает, что само программирование и алгоритмы вообще то выросло из математики? Фон Нейман был математиком например;-) Даже в классификаторе РФФИ «Научное направление 01 - МАТЕМАТИКА, ИНФОРМАТИКА, МЕХАНИКА»

Говорить, что в программировании нет математики так же неправильно, как и говорить что в механике нет математики.

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

Драйвера - я не спец, но элементы теории алгоритмов там во весь рост. Деревья, графы - это что по Вашему, вышивание крестиком или ботаника?;-)

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

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

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

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

Могу привести пример «рынков»: весь аутсорс ынтерпрайз, «сайтики клепать», 1с, ондроед-сатрапы. Наверное не ошибусь, если скажу, что у нас в СНГ 95% программистов трудятся в этих областях.

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

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

Вы невнимательно читаете.

Я внимательно прочел ваше утверждение о необходимости знать «физику и математику», с физикой все понятно и без опровержений. А в перечисленных мной областях математикой не пользуются практически _вообще_: ни с сайтиках, ни в 1с, ни в интерпрайзе (тем более), ни в клепании будильников для айфона.

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

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

Так еж как продавец на рынке знает умеет складывать однозначные числа как минимум;-)

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

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

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

А, ну если складывать числа это математика,

Нет, блин, это спорт же!!!1111 Только сложением чисел все не ограничивается...

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

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

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

Нет, потому что неуч может успешно искать котиков, а вот составлять оптимальные SQL-запросы --- нет. Ваш, кэп.

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

А, ну если складывать числа это математика,

Нет, блин, это спорт же!!!1111

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

Только сложением чисел все не ограничивается...

Ну да, все что не получается сложить приходится разделять и властво^W и множить.

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

Нет, потому что неуч может успешно искать котиков, а вот составлять оптимальные SQL-запросы --- нет.

Без матана уже и sql-запрос не составить? haskell проник в real-world *omg*!

Ваш, кэп.

Нет ваш.

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

А в перечисленных мной областях математикой не пользуются практически _вообще_

А алгоритмы вы как выводить/доказывать собрались?

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

Внезапно математика это не только матан.

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

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

Внезапно математика это не только матан.

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

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

95% вакансий для программистов в СНГ не предполагают никакой математики *вообще*. А вы просите привести области, смешно.

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

реляционная-алгебра

Это и есть та мифическая математика? Тогда todo-стикер на холодильнике тоже математика - описание алгоритма действий: почистить зубы, выбросить мусор, написать на лоре про матан...

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

Реляционная-алгебра не относится к математике? Гм.

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

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

ну и что, что выросло?

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

Насчет вебни - работа с базами данных это чистая математика

SELECT товар FROM магазин - где здесь математика?

Драйвера - я не спец, но элементы теории алгоритмов там во весь рост.

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

Нет тут теории алгоритмов.

Деревья, графы

И этого тоже нет. В компиляторах - есть да, например определение всях SCC - да, но не здесь.

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

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

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

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

Пока запросы идут на уровне:

select id, name from users where age > 16

то, согласен, можно вообще мозг не включить.

В случае же чуть-более сложного использования начинаются стоны:

--- я использовал в запросе парочку джойнов и тут КРОВЬ-КИШКИ-ГОВНО-МАЙСКУЛ ВЕСЬ РАСПИДОРАСИЛО!!!! О, знатоки, ответьте почему странички из корзины заказов отдаются по сорок секунд иначе хозяева побьют и оставят без доширака на сладкое.

Такие дела.

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

Реляционная алгебра не математика? А что тогда такое математика?

200 раз уже обмусоливалось, лень начинать в 201-й. Кратко: математика - язык описания абстракций и их взаимоотношений.

alienclaster ★★★
()

Блин такой срач пропустил, прийдеться все читать

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

95% вакансий для программистов в СНГ не предполагают никакой математики *вообще*

95% вакансий для обезьянок за миску риса. Кого волнуют проблемы макак?

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

Алгоритм будильника для айфона? Или что?

Например, эффективная организация хранения данных и не менее эффективные алгоритмы их обработки.

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

И этого тоже нет. В компиляторах - есть да, например определение всях SCC - да, но не здесь.

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

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

И реляционная алгебра не математика потому что ...???

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

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