- 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
// https://habr.com/ru/post/466985/
// о каррировании в крестоговне
// По сути это каррирующее говно просто складывает куда-то хуйню, а потом целиком ее в функцию призывает.
// Ну т.е. на Си можно написать дрисню вида
int shit(int a, int b, int c, int d)
{
return a*(b+c*d);
}
// И вот каррирование такой дрисни это как если б я сделал структуру
struct shit_arguments
{
int a;
int b;
int c;
int d;
};
// И потом бы с конца заполнял это говно
struct shit_arguments;
shit_arguments.d = 13;
shit_arguments.c = 666;
shit_arguments.b = 1488;
shit_arguments.a = 42;
// и при полном заполнении этого говна просто б вызвал функцию
// подставив туда накопившееся говно
int somecrap = shit(shit_arguments.a, shit_arguments.b, shit_arguments.c, shit_arguments.d);
// именно так эта крестовая дрисня и работает, она не может произвести частичное вычисление
// не может сделать функцию с частично вычисленной дрисней в ней на основе частично переданной хуйни
// если я например в функцию shit захочу частично подставить аргументы b,c,d как 1,2,3 то у меня не получится функции вида
int shit_b1_c2_d3(int a)
{
return a*(7); // 1+2*3 = 7
}
// Нихуя подобного не будет. А если нихуя подобного нет, нахуй это бесполезное дерьмо вообще надо?
// В крестах никак нельзя на основе каких-то готовых функций сгенерить
// видоизмененные функции с частично сделанными вычислениями
// Никакой нормальной рефлексии нет, просто какие-то тупые кривые костыли к сишечке налепили
// И это программисты?
guest8 15.09.2019 14:11 # −999
bootcamp_dropout 15.09.2019 14:24 # 0
Именно поэтому я пишу
и радуюсь жизни
Elvenfighter 16.09.2019 03:40 # 0
https://i.dailymail.co.uk/i/pix/2013/01/04/article-2257209-16C051F1000005DC-920_634x822.jpg
guest8 16.09.2019 03:45 # −999
j123123 15.09.2019 14:26 # +2
> Оптимизация программ на основе использования априорной информации о значении части переменных называется специализацией.
И возможно даже чтоб JIT можно было запилить с таким вот. Типа есть функция с кучей принимаемых аргументов, и чтоб на основе такой функции можно было сделать новую функцию с меньшим числом принимаемых аргументов, четко и дерзко захардкоживая часть значений, получая в итоге новую откомпилированную функцию, с уже частично сделанными вычислениями.
ropuJIJIa 15.09.2019 14:43 # +1
Если же эти аргументы известны только в рантайме, то всё плохо. Чтобы оптимизировать, нужно в рантайм встраивать оптимизирующий компилятор, значит, рантайм распухнет. Даже если плюнуть на оптимизацию, всё равно для взятия указателя на такую функцию с частично применёнными аргументами придётся строить трамплин. В «gcc» трамплины приводят к снятию защиты от исполнения кода в стеке.
j123123 15.09.2019 14:57 # +1
Необязательно, возможны промежуточные решения. Например:
такую newshit можно сделать так
Ну и вот эту дрисню b_c_d = (b+c*d) можно посчитать в момент исполнения, на основе кода функции shit
и сгенерить все это говно исключительно в компилтайме
Но в крестопарашной дрисне такого нет
ropuJIJIa 15.09.2019 15:15 # 0
>> int newshit(int a, int b_c_d)
Не всегда можно сделать именно так. Т. е. не всегда функцию можно свести к функции именно двух переменных. Если, например, в той же формуле a*(b+c*d) известны a, c, d, а переменная b остаётся свободной, то получим int newshit(int b, int a, int c_d). Если же известны a, b, c, а переменная d остаётся свободной, то получим int neswhit(int d, int a_b, int a_c). В самом же общем случае все аргументы придётся передавать отдельно.
j123123 15.09.2019 15:32 # +1
Не, ну естественно есть разные варианты
например, если у нас функция
И если мы специализируем по b, c, d, e то можно сделать так:
Смысл в том, что если в цикле такая частично специализированная функция вызывается много много раз, такое частичное вычисления по части известных аргументов лучше чем ничего. Можно и наинлайнить даже
guest8 15.09.2019 15:04 # −999
ropuJIJIa 15.09.2019 15:08 # +1
j123123 же интересует каррирование в нединамических языках.
guest8 15.09.2019 15:28 # −999
guest8 15.09.2019 15:06 # −999
KingKong 15.09.2019 15:58 # 0
guest8 15.09.2019 16:14 # −999
KingKong 15.09.2019 16:17 # +2
Уииииии
KingKong 15.09.2019 16:22 # 0
бляди
что такое F блядь?
сука именование одним символом чтобы быстрее компилилось или что?
guest8 15.09.2019 16:24 # −999
guest8 15.09.2019 16:24 # −999
j123123 15.09.2019 17:35 # +1
guest8 15.09.2019 17:48 # −999
bootcamp_dropout 15.09.2019 17:56 # 0
---
Жаль что тот тред на sql.ru заблочили. Никто не знает, сохранился ли он где-нибудь?
guest8 15.09.2019 17:59 # −999
bootcamp_dropout 15.09.2019 18:06 # 0
guest8 15.09.2019 18:07 # −999
Pretty_Young_Thing 15.09.2019 18:42 # −1
Как знание какого-то паршивенького неконсистентного языка с запутанным синтаксисом делает человека хорошим программистом?
bootcamp_dropout 15.09.2019 18:49 # 0
guest8 15.09.2019 18:50 # −999
Pretty_Young_Thing 15.09.2019 18:50 # 0
bootcamp_dropout 15.09.2019 18:51 # 0
Pretty_Young_Thing 15.09.2019 18:55 # 0
guest8 16.09.2019 03:47 # −999
guest8 16.09.2019 03:46 # −999
Pretty_Young_Thing 16.09.2019 12:58 # 0
guest8 16.09.2019 14:22 # −999
ropuJIJIa 16.09.2019 14:31 # 0
guest8 16.09.2019 14:44 # −999
ropuJIJIa 16.09.2019 16:57 # 0
j123123 15.09.2019 18:02 # 0
Pretty_Young_Thing 15.09.2019 16:01 # 0
То ли дело
Именно поэтому я за S" Forth".
Pretty_Young_Thing 15.09.2019 16:11 # 0
>> простыня из спецсимволов, реализующая простейшую хуйню с сомнительной надобностью
> Сейчас работаю в месте, где всё скорее так, и очень доволен.
guest8 15.09.2019 16:14 # −999
j123123 15.09.2019 16:30 # 0
Типа есть функция
и я такой
и оно туда всунуло хуйню которая та функция принимает, и будет как:
j123123 15.09.2019 16:35 # 0
Типа есть у нас структура:
и есть функция
Можно ли сделать что-то типа
?
guest8 15.09.2019 17:49 # −999
ropuJIJIa 15.09.2019 17:51 # +1
Перед тем, как пихать в стек, структуру придётся разуплотнить. Если она была упакована, её поля нужно разжать до размера, кратного машинному слову.
ropuJIJIa 15.09.2019 17:52 # 0
guest8 15.09.2019 17:54 # −999
guest8 15.09.2019 18:44 # −999
ropuJIJIa 15.09.2019 18:49 # 0
guest8 16.09.2019 03:48 # −999
Pretty_Young_Thing 15.09.2019 18:52 # 0
guest8 15.09.2019 19:39 # −999
ropuJIJIa 15.09.2019 19:43 # 0
nemyx_B_3AKOHE 15.09.2019 19:46 # 0
guest8 15.09.2019 20:03 # −999
guest8 16.09.2019 03:49 # −999
j123123 16.09.2019 04:51 # +2
Правда я не уверен что тут нет UB
Pretty_Young_Thing 16.09.2019 13:03 # 0
bootcamp_dropout 16.09.2019 13:44 # +1
guest8 16.09.2019 14:22 # −999
bootcamp_dropout 16.09.2019 16:36 # 0
ropuJIJIa 16.09.2019 16:41 # +1
А биекция — это инъективная сюръекция.
guest8 16.09.2019 17:08 # −999
guest8 16.09.2019 17:10 # −999
guest8 16.09.2019 13:46 # −999
ropuJIJIa 16.09.2019 14:07 # +1
guest8 16.09.2019 16:21 # −999
ropuJIJIa 16.09.2019 16:41 # 0
guest6 26.08.2023 21:39 # 0
guest6 26.08.2023 21:46 # 0