Size: a a a

2020 May 27

AZ

Alex Zhukovsky in rust_offtopic
Sergey Korotkov
эллегантно - может быть. Но это чертовски неэффективно же.
с чег ты взял?
источник

AZ

Alex Zhukovsky in rust_offtopic
Переслано от Victor Maia
Hi everyone. We have great news on the ultimate λ-calculus which will possibly lead to a next-gen compiler for Formality.

Long history: initially, we compiled Formality to interaction combinators, the Levy-optimal system everyone here knows. Sadly, inets, while asymptotically fast, are slightly inefficient in practice due to pointer gloat. A few months ago, I noticed a way to represent a subset interaction combinators in a more compact format that resembled terms, except "ill-scoped" (i.e., a lambda-bound variable can appear outside of its body). I called it the ultimate λ-calculus. It had 4 main constructors:

LAM(name, body)
APP(func, argm)
PAR(val0, val1)
LET(name0, name1, expr, body)

Afterwards, I found a very efficient way to evaluate a subset of the ultimate λ-calculus, by representing variables as pointers on LAM nodes (i.e., lambdas point to variables, not the other way around). This, together with a leftmost-innermost reduction, allowed beta-reduction to become a single array write! It is, ridiculously, 40x faster than interaction nets. It is the "fast-mode" on Formality v0.1.253. Sadly, this mode didn't allow duplications at all, only affine terms. The problem was that the order let redexes were found didn't match the leftmost-innermost reduction. This resulted in errors, since pointers would become invalid when the terms they pointed to moved. Today, I noticed that a small change on the ultimate λ-calculus could solve that issue. Instead of a let with two variables, we use a cpy with only one. That is, instead of:

let [a, b] = 42 in [a, b]

We have:

[cpy a = 42, a]

The cpy constructor injects a copy of something into another location, and then returns that thing. The result of this is that 1. the let constructor becomes smaller (from 3 to 2 fields), 2. the order it is found matches the innermost-leftmost reduction strategy, solving the problem mentioned.

I'll start immediately working in a C runtime for that new calculus and benchmark. If it works well, I'll proceed with the addition of native numbers and mutable arrays (which can be detected from types as I mentioned previously). If all turns ok, we'll have a functional runtime that is very CPU efficient, levy-optimal, non-garbage collected and with actual mutable arrays that don't need to live inside ST or other monad.
источник

SK

Sergey Korotkov in rust_offtopic
Alex Zhukovsky
с чег ты взял?
ды уже объяснили давно. Просто в начале доки описано насколько неэффективная реализация в лоб, что мне резко поплохело и я дальше читать не стал, а зря )
источник

AZ

Alex Zhukovsky in rust_offtopic
Sergey Korotkov
ды уже объяснили давно. Просто в начале доки описано насколько неэффективная реализация в лоб, что мне резко поплохело и я дальше читать не стал, а зря )
я другое скинул, от другого чувака
источник

AZ

Alex Zhukovsky in rust_offtopic
он конкретно ФП рантайм пилит, на который и хаскель и любой фп язык который я лямбда калкулус уумеет можно будет гонять
источник

AZ

Alex Zhukovsky in rust_offtopic
просто я про то что фп и всякая магия на типах обычно с перфоманс ништяками идет, а не наоборот
источник

AZ

Alex Zhukovsky in rust_offtopic
Kai Ren
А если закрасноглазить в завтипы самостоятельно, то сколько ещё оптимизаций можно будет сделать банально в типах ведь.
оч круто что всем в чатике так зашла ссылочка. Я доволен)
источник

SK

Sergey Korotkov in rust_offtopic
Alex Zhukovsky
просто я про то что фп и всякая магия на типах обычно с перфоманс ништяками идет, а не наоборот
с этим не спорю. Я докопался до конкретной реализации описанной в доке neut )
источник

AZ

Alex Zhukovsky in rust_offtopic
Victor Sapiens
Мне лично норм было бы если бы норм FP в Rust занесли. Даже без типов как в Идрис. Хотя да. Идея если забыть про синтаксис просто офигенная.
фп в расте не будет потому что &mut встроен в язык намертво
источник

AZ

Alex Zhukovsky in rust_offtopic
не будут они курочить все ради фпшности
источник

AZ

Alex Zhukovsky in rust_offtopic
Kai Ren
Раст в этом плане форкнулся от стандартного ФП. За счёт того, что там владение, заимствование и эксклюзивное заимствование выражено на уровне языка (lang item), там разъехались типы функций в три стороны как лебедь-щука-рак. В результате огромный пласт наработок ФП (вроде тех же монадок) тупо отвалился и неприменим в текущем виде. Было высказано ряд умных мнений, что Расту нужно развиваться в сторону экспресивности трейтов, а не типов, то есть GAT'ы, и потом дальше от них отталкиваться, тогда может что-то и выгорит. Но это пока невспаханное поле для исследований, которое никто толком не исследует в данный момент (насколько мне известно).
раст никогда не был фп
источник

AZ

Alex Zhukovsky in rust_offtopic
он форкался от плюсов, это видно по тому как он развивался
источник

AZ

Alex Zhukovsky in rust_offtopic
я доклад 2008 года грейдона не раз уже кидал
источник

AZ

Alex Zhukovsky in rust_offtopic
видно что чувак сначала выпилил небезопасные фичи плюсов, потом запилил всяких ништяков которых ему не хватало, и потом постепенно вырисовалось то что стало растом
источник

AZ

Alex Zhukovsky in rust_offtopic
скорее на плюсы навешали "фп фишек" типа зирокост итераторов, тайпклассов и пр
источник

AZ

Alex Zhukovsky in rust_offtopic
но тайпклассы ФП ортогональны, это фишки мощных систем типов
источник

AZ

Alex Zhukovsky in rust_offtopic
просто вне ФП типы обычно говно, но это не значит что это связь 1к1
источник

B

Bogdan in rust_offtopic
источник

AZ

Alex Zhukovsky in rust_offtopic
Doge Shibu
Идея в том, что ты инлайнешь ВСЁ и компилятор оптимизирует и анализирует именно эту портянку, тогда по идее он сможет справиться автоматом с расстановкой лайфтаймов, как он делает это сейчас в рамках одной функции
тогда если лайфтаймы проебаны то сообщения об ошибках будут километрвыми, и через час после начала компиляции
источник

AZ

Alex Zhukovsky in rust_offtopic
по сути это аналог не указывать типы у топлевел функций в хаскелле - путь вникуда
источник