Jul. 31st, 2014

thedeemon: (office)
Занялся давеча генерацией C#, узнал, что этот недоязык не позволяет описать и тут же на месте вызвать лямбду, вроде:
(x => x * 2)(21)

А вывод типов там такой слабенький, что почти и нету; пришлось самому делать.

А скажите, друзья, насколько легко понять, не запуская, что вычисляет этот код?
Thunk fmain = () => run<Kont<Pair<Kont<Kont<int>>, Kont<int>>>>(x0 =>
 () => run<Pair<Kont<Kont<int>>, Kont<int>>>(x0, pair<Kont<Kont<int>>,
 Kont<int>>(k1 => () => run<int>(k1, 8), x => { throw new Res<int>(x); 
})), unrec<Pair<Kont<Kont<int>>, Kont<int>>>((w2, rec3) => () => 
run<Kont<int>>(w2.fst, a18 => () => run<int>(b19 => () => run<Sum<Unit,
 Unit>>(z7 => match<Unit, Unit>(z7, u5 => () => run<Kont<Kont<Pair<
Kont<Kont<int>>, Kont<int>>>>>(u4 => () => run<Kont<Pair<Kont<Kont<int>>,
 Kont<int>>>>(u4, rec3), x14 => () => run<Pair<Kont<Kont<int>>, Kont<
int>>>(x14, pair<Kont<Kont<int>>, Kont<int>>(k15 => () => run<Kont<int
>>(w2.fst, a16 => () => run<int>(b17 => () => run<int>(k15, (a16 - b17)),
1)), a8 => () => run<Kont<Kont<Pair<Kont<Kont<int>>, Kont<int>>>>>(u4 =>
() => run<Kont<Pair<Kont<Kont<int>>, Kont<int>>>>(u4, rec3), x10 => ()
=> run<Pair<Kont<Kont<int>>, Kont<int>>>(x10, pair<Kont<Kont<int>>, 
Kont<int>>(k11 => () => run<Kont<int>>(w2.fst, a12 => () => run<int>(
b13 => () => run<int>(k11, (a12 - b13)), 2)), b9 => () => run<int>(
w2.snd, (a8 + b9)))))))), u6 => () => run<int>(w2.snd, 1)), less(a18, 
b19)), 3)))); 

(полный текст с определениями здесь)

Это у меня примитивный вариант недопростотипизированной лямбды (с функциями, произведениями и суммами типов) транслируется с семантикой call-by-need по заветам SPJ и Mycroft'a в строгое промежуточное представление, где совсем нет аппликаций, зато есть первоклассные продолжения, а из него уже генерится шарп.

Profile

thedeemon: (Default)
Dmitry Popov

July 2025

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
27282930 31  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 17th, 2025 12:47 am
Powered by Dreamwidth Studios