- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
BYTE1 *GetLanguageCodeString( BYTE1 upper, BYTE1 lower , BYTE1 *lang_idx )
{
int index = 0;
switch(upper){
case 'a' :
switch(lower){
case 'a' : index = 0; break;
case 'b' : index = 1; break;
case 'f' : index = 2; break;
case 'm': index = 3; break;
case 'r': index = 4; break;
case 's': index = 5; break;
case 'y': index = 6; break;
case 'z': index = 7; break;
default: break;
}
break;
case 'b' :
switch(lower){
case 'a' : index = 8; break;
case 'e' : index = 9; break;
case 'g' : index = 10; break;
case 'h': index = 11; break;
case 'i': index = 12; break;
case 'n': index = 13; break;
case 'o': index = 14; break;
case 's': index = 136; break; /* Added in SEIN 2004.04.01 KTJ */
default: break;
}
break;
case 'c' :
switch(lower){
case 'a' : index = 15; break;
case 'o' : index = 16; break;
case 's' : index = 17; break;
case 'y': index = 18; break;
default: break;
}
break;
case 'd' :
switch(lower){
case 'a' : index = 19; break;
case 'e' : index = 20; break;
case 'z' : index = 21; break;
default: break;
}
break;
case 'e' :
switch(lower){
case 'l' : index = 22; break;
case 'n' : index = 23; break;
case 'o' : index = 24; break;
case 's': index = 25; break;
case 't': index = 26; break;
case 'u': index = 27; break;
break;
}
break;
case 'f' :
switch(lower){
case 'a' : index = 28; break;
case 'i' : index = 29; break;
case 'j' : index = 30; break;
case 'o': index = 31; break;
case 'r': index = 32; break;
case 'y': index = 33; break;
default: break;
}
break;
case 'g' :
switch(lower){
case 'a' : index = 34; break;
case 'd' : index = 35; break;
case 'l' : index = 36; break;
case 'n': index = 37; break;
case 'u': index = 38; break;
default: break;
}
break;
case 'h' :
switch(lower){
case 'a' : index = 39; break;
case 'e' : index = 40; break;
case 'i' : index = 41; break;
case 'r': index = 42; break;
case 'u': index = 43; break;
case 'y': index = 44; break;
default: break;
}
break;
case 'i' :
switch(lower){
case 'a' : index = 45; break;
case 'd' : index = 46; break;
case 'k': index = 47; break;
case 'n': index = 48; break;
case 's': index = 49; break;
case 't': index = 50; break;
питушня на switch для распознавания какой-то фигни с буквами
j123123 30.07.2017 19:12 # +2
defecate-plusplus 30.07.2017 20:09 # +2
j123123 31.07.2017 14:25 # 0
defecate-plusplus 31.07.2017 16:21 # 0
А что такое SEIN 2004.04.01 KTJ?
j123123 31.07.2017 22:48 # 0
Что означает SEIN я понятия не имею. А KTJ это имя-фамилия корейского разраба из самсунга, который этот говнокод писал. Kwon TaeJin. [email protected]
https://au.linkedin.com/in/eric-kwon-b129093
https://kr.linkedin.com/in/eric-kwon-b129093
defecate-plusplus 01.08.2017 09:01 # +1
Не какой-то, а ISO, причем не страну, а язык, и уже давно трёхбуквенные, т.к. 2 буквенных не хватат.
А ещё есть ГОСТ (7.75-97, но и 7993-90 тоже был неплох, да), в котором догадались не только альфа, но и нумерик значения проставить языкам.
Я в этом ключе и спросил что за нёх этот SEIN - вдруг у этих разрабов тоже перед глазами была таблица соответствий языка числу.
Ибо так вот взять и перехуярить языки по порядку, чтобы потом патчить её номерами, сломав порядок, при этом не сославшись на некий стандарт, в котором уже эти номера присвоены - это одиозно.
j123123 31.07.2017 22:55 # 0
j123123 31.07.2017 23:09 # 0
j123123 01.08.2017 03:13 # 0
bormand 01.08.2017 06:43 # +2
j123123 01.08.2017 07:26 # 0
Вообще, это хренота из утекшего исходника прошивки караоке-DVD проигрывателя, судя по всему модель Arirang 3600 HDD (для вьетнамского рынка). И хрень эта построена на самсунговском SoC S5H5002
defecate-plusplus 01.08.2017 09:20 # +3
http://port70.net/~nsz/c/c89/c89-draft.html#2.2.1
Но In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.
Т.е. вполне можно переписать на формулу if (number < 10) return number + '0'; else return '0';
Dummy00001 01.08.2017 12:35 # 0
но они ведь не определяют в каком именно числовом пространстве. `a + 1 + 1` не гарантировано будет больше чем `а`. ;-)
defecate-plusplus 01.08.2017 17:39 # 0
Dummy00001 01.08.2017 17:45 # 0
ЗЫ вроде же бы уже по определению даже уже групп - самая примитивная структура где сложение вводится - ассоциативность сложения доказывается тривиально.
defecate-plusplus 01.08.2017 18:44 # 0
Требование, чтобы a + 1 + 1 было гарантировано больше, чем а, избыточно.
Dummy00001 01.08.2017 19:00 # 0
Dummy00001 01.08.2017 18:00 # 0
roman-kashitsyn 30.07.2017 20:31 # 0
j123123 30.07.2017 21:01 # 0
(switch кстати компилятором оптимизируется в двоичный поиск при определенных условиях)
roman-kashitsyn 30.07.2017 22:00 # 0
Это зависит от размера массива. Если это критичное место, в чём я сильно сомневаюсь, я бы померил оба варианта и выбрал тот, что работает быстрее.
g0cTb 30.07.2017 23:25 # +3
Dummy00001 01.08.2017 12:42 # 0
> Это зависит от размера массива.
еще зависит от того кто/как поддержку делает. как раз лукапы кодов стран/языков не раз видел что народ делает в лоб линейно.
обоснование простое: список меняется слишком редко, народ забывает об ограничениях структуры данных, и почти каждый второй раз когда надо список обновить лажаются и допускают тривиальные ошибки.
а так как лукапить в общем случае надо крайне редко - раз замапил и сохранил код - то никто и не оптимизирует.
j123123 01.08.2017 23:05 # 0
>обоснование простое: список меняется слишком редко, народ забывает об ограничениях структуры данных, и почти каждый второй раз когда надо список обновить лажаются и допускают тривиальные ошибки.
Так надо просто метапрограммирование (кодогенерацию) чтоб было так, что
и чтоб вот куда не добавь какую-нибудь {"hu", "HUI"} то чтоб компилтайм-метушня-кодогенератор потом все пересортировал и сам потом это упаковал сортированно в массив в компилтайме, и чтоб потом оно работало с двоичным поиском как положено, без багов и прочей хуйни. И чтоб гомоиконность!
j123123 01.08.2017 23:09 # 0
Индусы какие-то. Наверняка у них код - говно
А назвать "ASS" они видимо не могли, потому что это ЗАД. Хотя вот субтитры ж так назвали...
Dummy00001 01.08.2017 23:28 # 0
а на темплейтах+constexpr уже кто пробовал сортировку массивов в компайл тайм делать?
какой то гений уже сваял на 14х крестах:
https://stackoverflow.com/questions/19559808/constexpr-initialization-of-array-to-sort-contents
еще один плюс новых крестов для встроенщины.
j123123 01.08.2017 23:42 # 0
>какой то гений уже сваял на 14х крестах:
Для этого не нужно быть никаким гением
http://govnokod.ru/19105#comment307900 мне еще очень давно Antervis сваял сортировку пузырьком на constexpr, ну я конечно же обоссал эту тупую хуйню
>еще один плюс новых крестов для встроенщины.
Это никакой не плюс, учитывая что я это же могу сделать кодогенерацией на Си через printf() или же вообще написать эту кодохуерацио на каком-нибудь питоне и присобачить к этому препроцессор свой.
Да и под нестандартную встроенщину плюсов обычно просто нет, а если и есть, то древнего стандарта
Dummy00001 02.08.2017 00:21 # 0
можно. но на кой парится с кодогенерацией, если можно сделать стандартными средствами языка?
> Да и под нестандартную встроенщину плюсов обычно просто нет
это да. но на армах/кайлах есть. и IAR медленно уверенно прикручивает (с++14 для арма (v8.80) этой весной выпустили). глядишь через лет пять в проектах начнет появлятся.
j123123 02.08.2017 00:48 # 0
Потому что стандартные средства языка C++ являются говном.
Ну вот представим себе ситуацию, допустим что есть у меня код некоторой встраиваемой СУБД, которая работает полностью в оперативной памяти(на глобальном массиве) того процесса, который эту СУБД использует. Есть функции, написанные на языке Си, которые в СУБД добавляют какие-то записи. У меня допустим программа должна при запуске уже содержать некие записи в этой СУБД.
Т.е. я не хочу каждый раз при запуске дергать кучу каких-то функций, которые бы добавляли мне в глобальный массив кучу нужных при старте записей(от этого программа дольше запускается), я просто хочу иметь уже проинициализированный в компилтайме глобальный массив с готовыми записями. Итак, что мне проще всего сделать:
1. Разбираться в логике работы СУБД, написать какой-то ебанины на C++14 которая бы инициализировала глобальный массив, и работала в компилтайме (при этом мне б пришлось вникать в код СУБД, и разбираться в каких-то кретинских плюсовых говноконстэкспрах и шаблонах, что мне вообще-то совершенно нафиг не всралось)
2. Сделать вспомогательную программу, которая бы на этапе сборки компилировалась, запускалась бы, и дергая много раз функцию добавления записи в БД, инициализировала бы в себе глобальный массив, и из него генерировала бы особый файл startdb.bin и который бы я мог потом конвертнуть в объектник и слинковать уже с основной программой, чтобы этот startdb.bin был виден как глобальный массив
?
Dummy00001 02.08.2017 01:01 # 0
я понимаю тебя. я как бы в той же самой луже сижу.
но мне просто радостно что наконец (через Н лет) мне не надо будет изгалятся и мучится с вызовами конструкторов (для статической инитиализации) перед мэйном. что наконец статическая инициализация на 100% статическая. и даже с роскошью компайл-тайм подготовки этих данных.
defecate-plusplus 02.08.2017 12:39 # +1
Как там, в 90х? Небось, тёлки молодые и пиво дешёвое?
З.Ы. Больше всего радует
> в кучах сэйфти и медикал областей
посмотрите сколько стоит мед. оборудование. Какого хуя вы экономите на CPU и RAM, если оно стоит как сука космолёт?
Antervis 02.08.2017 16:28 # +1
defecate-plusplus 02.08.2017 18:08 # +2
В прошлом году заказывал у своего друга-железячника ("фуллстек" партия готовых изделий по заказанным характеристикам, плата прошивка питание корпус) некие сетевые смарт-девайсы. Сперва мне хотели рассказать, как заебись удобно мне ими будет управлять через modbus, ну максимум - modbus over udp, потом - про то, как код реализации стека tcp может не вместиться в выбранное ими железо (!!!), затем - ну бля, "ну какое удаленное обновление прошивки, ну какие две новые функции, чтобы так работало, надо было чип не за $1 покупать, а за $2". Это при цене-то одного девайса около $1k, да и задачи не стояло усраться в максимальный лоу-енд - так наэкономить на мозгах, чтобы было пиздец всем неудобно, и им, и нам, и никакого запаса.
Это в то время, как по PoE можно 30Вт слать, а аналогов raspberry pi с пердоликсом на борту и в тыщи раз большей памятью и мощью можно за $10-40 накупить, чтобы как сеалекса, хватило надолго!
Antervis 02.08.2017 19:52 # 0
А ежели вы бы делали китайские игрушки, то там и девелоперо-часо-доллары другие, и размеры партий
sos 02.08.2017 01:13 # 0
Лол. Если видишь шаблонную констекспр метушню там, где можно было обойтись скриптом на питоне - плюй автору в ебало смело. Единственное годное применение констекспров, приходящее на ум - парсинг строки формата и проверка типов аргументов в компайл-тайме в плюсовых аналогах принтфа.
sos 02.08.2017 01:16 # 0
Dummy00001 02.08.2017 01:31 # 0
во первый, питон говно.
во вторых, но кой трахатся с чем то внешним, если это делается нативно на самом языке.
constexpr'ы это шаг в сторону решения проблемы инициализации перед мэйном. простыми кодогенераторами ты эту дырку не закроешь.
конкретный пример. в кучах сэйфти и медикал областей, стоят условия что вся память/объекты должны быть проинициализированы/этц перед использованием. на каких уёбищных микроконтроллерах, эта инициализация с легкостью может занимать почти секунду. и это при каждом запуске (которых может быть очень много, потому что энергию экономят тупым выключением). на constexpr'ах 95% этого оверхеда на буте можно избежать - и тем неменее гарантировать корректную инициализацию памяти.
j123123 02.08.2017 04:51 # 0
Простым может и не закроешь, а вот сложным - вполне.
sos 02.08.2017 12:33 # 0
Да уж получше крестов или пердла.
j123123 04.08.2017 13:53 # 0
Ну, тут двояко. Как язык, питон мне кажется значительно меньшим говном, по сравнению с плюсами (но тоже говно). Но для решения конкретной описанной задачи он является примерно таким же говном, что и плюсы (если рассматривать стандартные плюсовые возможности метапрограммирования). Но если рассматривать возможности кодогенерации, плюсы уже немного меньшее говно, чем питон
Вот посудите: есть у вас какой-то код на Си, код этот напичкан какой-то хуйней, типа malloc, memcpy, указателееблей и прочей ебаниной, которая ничего общего с constexpr и шаблонной еблей не имеет. Перед вами стоит задача - этим кодом проинициализировать в компилтайме какие-то переменные, массивы, структуры. Так вот, по-моему для решения этой задачи оба языка являются полным говном, хотя плюсы в чем-то лучше. Нет, не тем, что constexpr и шаблоны, вы не подумайте. Просто можно написать кодогенератор на плюсах, но это к constexpr-шаблонной метушне никакого отношения вообще не имеет, с тем же успехом можно взять и Си. А у питона тупо нет совместимости на уровне исходного кода с Си
>во вторых, но кой трахатся с чем то внешним, если это делается нативно на самом языке.
Нативные средства метапрограммирования в плюсах являются полным говном, и кодогенерация намного лучше.
Dummy00001 04.08.2017 14:43 # 0
да, они пахнут. но они решают реальнуе проблемы.
для каких ниш типа таблиц (со статическими данными) кодогенерация это абсолютно ОК. но для чего-то большего (то чем я больше/дольше всего страдал: C++ FSM генераторы) то там сложность кодогенераторов может быть выше чем сложность остального кода в проекте. и выхлоп генератора (и/или сам генератор) приходится тоже тестировать.
но если у тебя все сводится до пары десятков строк на змие, то я сомневаюсь что ты до (тёмных) высот кодогенерации доходил.
j123123 04.08.2017 14:44 # 0
Попробуй Ragel
Dummy00001 04.08.2017 16:47 # 0
j123123 06.08.2017 03:09 # 0
Dummy00001 06.08.2017 04:21 # 0
ты что идиот? это дело резолвится *гарантировано* (иначе компайл ошибко) во время компайла.
это как раз все и упрощает - нет ни какого замудрого эффекта в рантайме. все уже заэвалюировано и лежит в дата/ro-дата сегменте.
j123123 06.08.2017 08:12 # +1
Нет
>это дело резолвится *гарантировано* (иначе компайл ошибко) во время компайла.
Если оно гарантировано во что-то отрезолвилось, еще никто не гарантирует что оно отрезолвилось в то, что нужно.
Например, сишный препроцессор тоже гарантировано или что-то там раскроет, или не раскроет и выплюнет ошибку (или на этапе препроцессирования, или же компилятор не сможет прохавать ту хуйню, которая получилась после препроцессирования). Но "безошибочное" раскрытие всякой хуйни через сишный препроцессор совершенно не гарантирует отсутствие багов из-за раскрытия хуйния препроцессором. типичный пример это когда делается что-то вроде
и потом кто-то делает в коде
отчего возникает всякая хуйня, но никакой ошибки раскрытия макросни тут нет, с т.з. препроцессора и компилятора тут все корректно
Да и констэксрпр-код разумеется может содержать какие-то БАГИ, и при вычислении констэкспров может получаться совсем не та хуйня, которую ожидал получить программист. Так вот, каким образом ДЕБАЖИТЬ ТАКОЙ КОМПИЛТАЙМ-БАГ? Куда брейкпоинт ставить?
Dummy00001 06.08.2017 14:50 # 0
да, но эти баги идентичны нормальным багам нормального крестового кода.
о дополнительном типе багов - кривое определение макроса и его последствия - задумыватся не надо.
> Так вот, каким образом ДЕБАЖИТЬ ТАКОЙ КОМПИЛТАЙМ-БАГ?
еще раз специально для тормозов: для статических объектов, просто смотришься сегмент данных. если не умеешь в дизасме это, то просто стартуешь дебагер что бы в мэйне остановился, и смотришь сегмент данных.
для не-статики, нет никакой разницы по сравнению с обычным нормальным кодом.
j123123 06.08.2017 21:46 # 0
ОК, допустим. Смотрю в сегмент данных. Вижу, что в сегменте данных какая-то хуйня, т.е. совсем не то, что мне нужно. Есть некая constexpr функция, которая вызывает другую constexpr функцию, которая в свою очередь вызывает третью, и там допустим есть всякие циклы в циклах, в общем есть некий нетривиальный constexpr код, который этот сегмент данных генерирует. Как мне его отдебажить? Как мне отследить выполнение (для тупых: сделать пошаговую отладку) этого constexpr говна
Dummy00001 06.08.2017 22:01 # 0
просто: убираешь constexpr и он магически-автоматически становится обычным кодом. та же семантика, тот же синтакс - только в одном слове различие.
попробуй подобное с макросами проэмулировать.
j123123 06.08.2017 22:15 # 0
Т.е. мне надо глобальной автозаменой пройтись и убирать из всей цепочки этих constexpr функций ключевое слово constexpr? Ну просто заебись.
И да, тут возникает новый вид жопы: предположим что я пишу хуйню под какой-нибудь говноконтроллер, и constexpr-параша считает синусы-тангенсы и инициализирует ими массив, и все синусы в рантайм-код тупо не влазят(недостаточно места на флеше говноконтроллера под всю ту хуйню), т.е. мне нужно эту constexpr-парашу делать не-constexpr и компилировать ДРУГИМ КОМПИЛЯТОРОМ ПОД ДРУГУЮ БЛЯДЬ АРХИТЕКТУРУ чтобы тупо отладить, да? Если это не пиздец, то что?
j123123 06.08.2017 22:20 # 0
Dummy00001 06.08.2017 22:25 # 0
> т.е. мне нужно эту constexpr-парашу делать не-constexpr и компилировать ДРУГИМ КОМПИЛЯТОРОМ ПОД ДРУГУЮ БЛЯДЬ АРХИТЕКТУРУ чтобы тупо отладить, да? Если это не пиздец, то что?
мля, как еслы бы нормальные юнит тесты когда либо в память говноконтроллера влазили. еще ни одного говноконтроллерного проекта не видел где бы 75% юнит тестов не на виндах делались. (потому что иначе и диагностики об ошибке иногда хер увидишь.)
по-моему, ты просто ни разу и не пробовал конст-экспры, почему и психуешь здесь. конст-экспры это безобидная и полезная *опциональная* фича. для начала, просто попробуй.
j123123 06.08.2017 22:32 # 0
Я вообще плюсы достаточно мало пробую. Мои попытки их серьезно попробовать обычно заканичватся тем, что я потом долго матерюсь в адрес тех, кто придумал весь этот маразм.
Что касается constexpr-ов, то их использование весьма ограничено. Код с какими-нибудь malloc/free и memcpy в них не засунуть, так что для меня, как сишника, эта фича практически бесполезна. А выкручивать себе руки и писать в каком-то недофункциональном стиле у меня нет никакого желания
sos 06.08.2017 23:20 # +1
Расскажи подробнее про пару последних попыток. Что ты делал и что вызвало твои маты?
j123123 07.08.2017 13:17 # 0
Например надо сделать JIT какой-нибудь примитивный, и я хочу в компилтайме вызывать ассемблер, чтоб он мне прямо в массив проинициализировал опкоды. вот типа:
и вот чтобы такую хуиту сделать, надо ассемблер переписывать нахуй весь на эти ебучие constexpr-ы, а я такой поебенью естественно заниматься не буду.
Или например хочу я сделать кучу функций по определенному правилу
Ясен хер, что подобная поебень в плюсах решается через т.н. шаблонное метапрограммирование. Ну ок, давайте напишем какую-то поебень на темплейтах
А теперь мне надо сделать ебучий массив из указателей на функции
Antervis 07.08.2017 15:15 # +3
http://ideone.com/OG2O1M
просто признай, что ты обычный неосилятор
j123123 07.08.2017 18:23 # −2
Эмм, что это за говно вообще? Я вроде бы просил нормальный статический массив, тут же я вижу только какой-то std::array.
21 : <source>:21:11: error: no viable conversion from 'const std::array<double (*)(double), 256>' to 'double (**)(double)'
double (**a)(double) = power_funcs;
^ ~~~~~~~~~~~
1 error generated.
что это за хуйня? Почему не работает?
Antervis 07.08.2017 18:53 # +3
j123123 07.08.2017 19:42 # 0
Во-первых, все языки (без исключения) говно. Во-вторых std::array это не статический массив в памяти, а какая-то блядь неведомая ебаная магия. А мне надо, чтоб все четко работало так, как я говорю
> Хочешь конвертнуть в указатель - std::array::data() в помощь
Попробовал - получилось какое-то откровенное говно
https://godbolt.org/g/GM6Nb3
Тебе не кажется, что это немного не то, что мне надо получить? Что это вообще говоря ГОВНО?
Ну давай возьмем код типа...
https://godbolt.org/g/y9zV4r
Вот смотри как заебись, тут честно дергатся инструкция mulsd, и я даже скобочки блядь расставил, чтобы оно заебись заоптимизировалось.
Сравни код функции pow_8 и pow_8_govno (кстати, компилятор GCC сделает эти функции аналогичными, если включить флаг -funsafe-math-optimizations)
j123123 07.08.2017 19:49 # 0
Antervis 07.08.2017 20:43 # 0
кто тебе вообще сказал, что массив обязан быть статическим? Куда положил, там и лежит
> а какая-то блядь неведомая ебаная магия
N лежащих подряд элементов выбранного типа - неведомая магия?
> Что это вообще говоря ГОВНО?
Ты попросил pow_N, получил pow_N.
> да кстати, попробуй ... и чтоб скобочки оптимально расставлялись
Че пробовать-то, делать надо:
https://godbolt.org/g/iLpEuo
(на 256 No output: generated assembly was too large - 9 мб кода).
j123123 07.08.2017 20:57 # 0
Лежащих где? Где-то "в астрале", да? Чтобы они реально где-то там начали лежать, надо использовать какую-то хуйню, типа std::array::data(). А как эта хуйня вообще устроена внутри? Если почитать исходники этого STL, там наверняка какой-то ебучий пиздец.
> Че пробовать-то, делать надо:
Не, так не пойдет. Попробуй обойтись без хуйни вида -funsafe-math-optimizations (представь что ты в говностудии компилируешь, где такой флаг отсутствует) но чтобы скобочки в умножении хуйни были таким образом расставлены, чтобы количество использованных mulsd инструкций для каждого случая было минимальным. Иными словами, в template нужно запрограммировать через какую-то жопу некую хуйню, которая бы находила наиболее оптимальный способ расставить скобочки в перемножении хуйни, чтобы количество умножений было наименьшим. Полагаться на какие-то нестандартные флаги компиляторов - говно.
subaru 07.08.2017 21:05 # 0
Antervis 08.08.2017 05:34 # +1
лежащих там, где положил, неужели это не очевидно? Компилятор выкидывает неиспользуемые constexpr значения, поэтому нужно обращаться к ним чтобы компилятор их не выкинул. Например, так:
https://godbolt.org/g/NZdEkv
> Если почитать исходники этого STL, там наверняка какой-то ебучий пиздец.
ты у libfftw3/zlib и прочего тоже исходники читаешь вместо документации?
j123123 07.08.2017 21:16 # 0
Ассемблерный выхлоп для pow_18_trivial имеет на одну инструкцию больше, и это при включенной опции -funsafe-math-optimizations
Если посмотреть ассемблерный выхлоп для этого же кода в Clang, то становится понятно, что Clang говно т.к. использует больше инструкций
j123123 07.08.2017 21:28 # 0
defecate-plusplus 07.08.2017 23:32 # +3
1) во всех вариантах, показанных Antervis, ты ВСЁ ЕЩЁ можешь перегрузить конкретные реализации шаблона и написать там хоть черта лысого - ровно так же, как и в сишечке во всех твоих примерах
2) "хочу генерить это НАПИТОНе, у меня есть алгоритм как сделать минимальные разбиения" - ради бога, алгоритм наверняка целочисленный и самоочевидный, с несколькими ветвлениями - реализуй шаблонами вореции через static_if, направляй компилятор на разные пути шаблонных реализаций, внутри шаблонной реализации вызывай не N-1 калькуляцию (тривиал), а делай mymul<N/2>(a)*mymul<N/3>(a) и т.д.
3) экономить 1 сука инструкцию, которая выигрывается только в сравнении с конкретной версией компилятора в конкретную фазу луны и набор ключей - да это пиздец, онанизм в предельной степени, займись делом уже
roman-kashitsyn 08.08.2017 00:27 # 0
Кстати, насколько эта инструкция критична по сравнению с вызовом функции по указателю?
j123123 08.08.2017 02:22 # 0
НАХЕРА мне еботня с убогими кривыми шаблонами, если я могу использовать кодогенерацию, и не ебать себе мозг?
>2) "хочу генерить это НАПИТОНе, у меня есть алгоритм как сделать минимальные разбиения" - ради бога, алгоритм наверняка целочисленный и самоочевидный, с несколькими ветвлениями - реализуй шаблонами вореции через static_if,
НАХЕРА мне еботня с убогими кривыми шаблонами, если я могу использовать кодогенерацию, и не ебать себе мозг? Вся эта плюсовая шаблонная мета-ебля, чтоб сука оптимальнейшим образом скобочки расставить чтобы все неанскилльно считалось, она сука займет намного больше времени, чем если написать блядь кодогенератор для этой параши.
> 3) экономить 1 сука инструкцию, которая выигрывается только в сравнении с конкретной версией компилятора в конкретную фазу луны и набор ключей - да это пиздец, онанизм в предельной степени, займись делом уже
В других компиляторах (отличных сука от GCC) этот флаг или вообще недоступен, или нихера не оптимизирует так как надо. И там причин ебаться с расстановкой ебучих скобочек намного блядь больше https://godbolt.org/g/NqBAXk
Вот было б заебись, если бы можно было с AST нормально напрямую работать, а не через кривое шаблонное говно и прочую ебанутую хуйню
sos 08.08.2017 02:27 # 0
Вроде в расте можно писать плагины к компилятору и подсовывать их при сборке проекта вместе с сорцами, и это типа штатный способ писать продвинутую метушню у них. Хотя я точно не знаю.
Antervis 08.08.2017 05:23 # 0
п.с. Одна инструкция ему дохуя, а реализация pow на 9 мб - это нормально.
j123123 08.08.2017 16:15 # 0
defecate-plusplus 08.08.2017 10:57 # +2
А теперь посмотри как твой же код выглядит в gcc 6.3 с теми же твоими флагами: https://godbolt.org/g/CY3anu
Ты готов при каждой мажорной (минорной?) смене компилятора перелопачивать проекты на миллионы строк кода, чтобы перепроверить, не добавилась ли вшивая инструкция в твой охуенно "оптимизированный" кококод?
Энивей, я вижу, что тебе нравится дрочить на работе. Так бывает, когда проекты не создают должный уровень челленджа, а времени (и гормонов) дохуя. Пройдет с возрастом. Ну или со сменой работы.
j123123 08.08.2017 16:31 # +1
Нет конечно. Мне такой хуйней заниматься нахуй не надо. Я просто пытаюсь на конкретных примерах показать ограниченность плюсового так называемого метапрограммирования, которое по факту является убогим говном, т.к. нет гомоиконности
inkanus-gray 09.08.2017 00:14 # +1
subaru 07.08.2017 15:42 # 0
Вот тебе скрипт в помощь:
Алсо, x**0 = 1, если что.
Antervis 07.08.2017 16:31 # 0
subaru 07.08.2017 16:48 # 0
Antervis 07.08.2017 18:56 # +1
subaru 07.08.2017 20:48 # 0
j123123 07.08.2017 18:27 # 0
Таким, что надо делать хуйню на питоне или другой хуйне, а встроенные средства плюсов - говно
subaru 07.08.2017 18:44 # 0
j123123 07.08.2017 20:01 # 0
j123123 06.08.2017 22:36 # 0
Говноконтроллер можно отдебажить на реальном железе внутрисхемной отладкой. А ассерты оттранслировать в какие-нибудь брейкпоинты в особо интересных местах.
>еще ни одного говноконтроллерного проекта не видел где бы 75% юнит тестов не на виндах делались
Это реально только если только всю говнопериферию эмулировать, которая к контроллеру цепляется
j123123 06.08.2017 22:42 # 0
И да, отдельная порция говна лично от меня. Для тех, кто свои компиляторы-говноSDK для контроллеров делает исключительно под винду
Antervis 07.08.2017 05:11 # +2
Зачем? Если на вход constexpr функции передать runtime-значения, она выполнится как обычная
Antervis 06.08.2017 18:46 # +3
bormand 06.08.2017 18:54 # 0
И что самое замечательное, результат такого теста видно прямо в IDE. Даже компилить не надо.
j123123 04.08.2017 14:08 # 0
Dummy00001 04.08.2017 14:25 # 0
Antervis 02.08.2017 05:31 # +1
sos 02.08.2017 12:32 # 0
> make && make install
Вменяемые люди голые мейкфайлы сейчас не пишут.
> установите 15 хуютилит
Питон есть везде, кроме разве что винды, которая нинужна.
Antervis 02.08.2017 16:38 # 0
Чем проще процесс сборки, тем реже приходится дергать девопса при внесении изменений. А система сборки может быть любой, лишь бы собирала просто
Dummy00001 04.08.2017 14:35 # 0
как ветеран кодогенерации, я думаю что фанатизм sos & j123 заключается в том что они только что для себя её (кодогенерацию) открыли. кодогенерация == хорошо. фанатизм == плохо.
т.к. они питон тут пихают, они может сконсом пользуются. тогда там да прямо в билд можно кодогенерацию в пихнуть, что есть очень удобно.
subaru 04.08.2017 18:12 # 0
Но раз уж мы заговорили о моей личности, то нет, я не фанат кодогенерации (единственное что генерирует у меня код - это протобуф). Я фанатично ненавижу крестовую метушню и всех этих программистишек, которые пишут нечитаемые компилирующиеся по полчаса портянки на этой метушне. И нет, я не хейчу с++. Я профессиональный крестушок и дошел до жизни такой не от того, что больше ничего не умею.
> может сконсом пользуются
Питон можно вызвать из любой системы сборки. Конкретно я пользуюсь симейком.
roman-kashitsyn 04.08.2017 18:33 # 0
subaru 04.08.2017 18:38 # 0
defecate-plusplus 04.08.2017 18:36 # 0
лол, где?
опять ботоводы распоясались
Antervis 02.08.2017 05:28 # +1
j123123 02.08.2017 06:30 # 0
roman-kashitsyn 02.08.2017 12:27 # 0
Зачем сортировку-то писать? Достаточно при сборке проверять, что массив отсортирован, это делается относительно просто через constexpr функцию и static_assert. Пущай людишки руками сортируют (ну как руками — M-x sort-lines). Кмк, лучше видеть вещи в сорцах такими, какими они должны быть.
Dummy00001 03.08.2017 14:13 # 0
в общем случае да. и я не против так же в ран-тайме в инициализации сортировать, но народ на это жалуется, потому что все пытаются такого типа данные конст делать.
но с другой стороны, в таблицы языков/стран/локалей/кодировок/часовых поясов настолько редко надо смотреться, что народ реально забывает (или люди работы поменяли) как новый элемент добавлять. поэтому "проще - лучше" это тоже решение.
это даже случалось официальной таблицой часовых поясов. много лет ничего не менялось - автор сам забыл формат. сдвинули часовой пояс для острова на пол часа. но криво. и какой-то там мелкий остров в океании только через Н лет догадался что смена пояса совсем не прошла: потому что звонки и банковские платежи изредка на неправильный день бухались.
Antervis 03.08.2017 14:24 # 0
roman-kashitsyn 03.08.2017 14:45 # 0
Antervis 03.08.2017 15:14 # 0
roman-kashitsyn 03.08.2017 15:54 # 0
Antervis 03.08.2017 15:56 # 0
roman-kashitsyn 03.08.2017 16:03 # 0
defecate-plusplus 03.08.2017 17:25 # 0
А в компайл-тайм варианте надо все эти посчитанные значения зашить в сегмент, который будет предоставлять глобальную таблицу.
Если они там под калькулятор пишут (для управления торсионными МБР, иначе зачем нужна таблица косинусов), то лишние 64МБ загружаемой прошивки - это болезненно. Да даже по интернетам распространять - 64МБ на дороге не валяются.
roman-kashitsyn 03.08.2017 18:27 # 0
Я просто думал, что таблица статически выделена, но от переноса в constexpr она увеличивается в размерах в 64 раза.
j123123 03.08.2017 19:20 # +1
Это еще почему? Зачем в хипе? Можно и в .bss
inkanus-gray 04.08.2017 00:01 # 0
inho 04.08.2017 00:07 # 0
j123123 04.08.2017 06:24 # 0
Да ну, всегда можно придумать какой-нибудь хитрожопый обходной маневр. Например, есть устройство с 128 мб ПЗУ. Под какую-то говнотаблицу синусов надо 64 мегов. Сама прошивка без таблицы синусов занимает скажем 32 мегабайта. Да тогда все просто. Делаем прошивку, которая без таблицы синусов но с хуитой чтобы считать синусы программно, через CORDIC или другое говно, типа всяких рядов Тейлора. Прошивка зашивается в целевое устройство, занимает она скажем 32 мегабайта + еще немного на эту функцию-считалку синуса. Сразу же после заливки прошивки, на самом прошитом устройстве запускается хуита, которая считает синус, и которая в ПЗУ память заносит это табличное говно с синусами, после чего эта функция для считания синуса больше никогда и не используется, а используется только та таблица, которая была проинициализирована в ПЗУ сразу после прошивки. Вот и все.
bormand 04.08.2017 07:09 # 0
defecate-plusplus 04.08.2017 10:02 # +2
Парк - несколько тысяч девайсов. Так что на 64 мега нет, не похуй.
Потом девайсы, слава богу, отмодернизировали до прельстивого x86 с пердоликсом, кучей рам, диска и сетью (и стало возможно хуярить всё на бусте), но осадочек остался.
Dummy00001 01.08.2017 12:36 # 0
Bro-C 02.08.2017 17:16 # 0
inho 03.08.2017 23:34 # 0
Я уже давно пролистываю эту поеботень (вореции) "как пропатчить МБР под 64кб на хуетино в компалтайме рантайма с констэкспрами"
inkanus-gray 03.08.2017 23:55 # +4
inkanus-gray 18.08.2017 17:17 # +2
Луи Седловой из отдела Абсолютного Знания изобрёл какую-то машину времени и сегодня будет докладывать об этом на семинаре.
В институте снова появился Выбегалло. Везде ходит и хвастается, что осенён титанической идеей. Речь многих обезьян, видите ли, напоминает человеческую, записанную, значить, на магнитофонную плёнку и пущенную задом наперёд с большой скоростью. Так он, эта, записал в сухумском заповеднике разговоры павианов и прослушал их, пустив задом наперёд на малой скорости. Получилось, как он заявляет, нечто феноменальное, но что именно – не говорит.
В вычислительном центре опять сгорел «Алдан», но Сашка Привалов не виноват, виноват Хунта, который последнее время из принципа интересуется только такими задачами, для которых доказано отсутствие решения.
Престарелый колдун Перун Маркович Неунывай-Дубино из отдела Воинствующего Атеизма взял отпуск для очередного перевоплощения.
В отделе Вечной Молодости после долгой и продолжительной болезни скончалась модель бессмертного человека.
Академия наук выделила институту энную сумму на благоустройство территории. На эту сумму Модест Матвеевич собирается обнести институт узорной чугунной решёткой с аллегорическими изображениями и с цветочными горшками на столбах, а на заднем дворе, между трансформаторной будкой и бензохранилищем, организовать фонтан с девятиметровой струёй. Спортбюро просило у него денег на теннисный корт – отказал, объявив, что фонтан необходим для научных размышлений, а теннис есть дрыгоножество и рукомашество…
Стругацкие. Понедельник начинается в субботу.