David Richter

30 posts

David Richter

David Richter

@drcicer

❤️ programming languages. phd student at @stg_darmstadt. DR are my initials not my title.

Germany Katılım Eylül 2014
110 Takip Edilen26 Takipçiler
David Richter
David Richter@drcicer·
@ProfMaxNew stuff, property, structure, thing, object, gadget, widget, container, category, ...
English
0
0
3
0
Max ⊶ New @maxsnew@types.pl
Max ⊶ New @[email protected]@maxstewartnew·
Half of PL research is coming up with new synonyms for "type" because you already made a formal definition for all the others: type, kind, sort, set, collection, class, ...
English
4
3
58
0
David Richter
David Richter@drcicer·
We also evaluate the performance of the compiler generated code to show that its similar to handwritten Solidity code. In contrast to other smart contract languages using linear, type-state or session types, Prisma is inspired by tierless and choreographic programming.
English
0
0
2
0
David Richter
David Richter@drcicer·
We formalise compilation&evaluation. Although compiler goes through heavy changes like CPS and defunctionalisation, we show that malicious client code 👿 cant distinguish contract code from before or after compilation (secure compilation), after inserting control-flow guards🛡️
English
1
0
1
0
David Richter
David Richter@drcicer·
@famontesi (Although its titled categorical logic, 95% of the pages contain only inference rules and no commutative diagrams 😅)
David Richter tweet media
English
0
0
1
0
David Richter
David Richter@drcicer·
@schrijvers_tom Ah! Initially I thought algebraic < scoped < latent, and the expected the I to be the effect. But I suppose the paper actually says to separate the latent part of the effect from the non-latent part. I probably need to reread it. The video is also nice😀
English
0
0
1
0
Tom Schrijvers
Tom Schrijvers@schrijvers_tom·
@drcicer Nondeterminism is an algebraic effect. Algebraic effects are a special case where l is the identity functor. Often l is a special kind of state, sometimes it has more structure (e.g., an applicative functor) where l () is not uncommon.
English
1
0
1
0
David Richter
David Richter@drcicer·
CPS translation gives every function another parameter (to be called with the result of the function) (\x.M := \x\k.M), and every application another argument (M N := M N K); and additionally all terms another argument to be called with the result of the term (... := \k.k ...).
English
0
0
0
0
David Richter
David Richter@drcicer·
Looking for nice equations. Today, continuation passing style translation: Via Griffin, POPL 1989. A formulae-as-type notion of control
David Richter tweet media
English
1
0
0
0
David Richter
David Richter@drcicer·
Namely, the we must be able to pick a enclosing description (data) for any predicate (function), but we cant just try the function for all possible inputs to look for the best description (potentially infinite)! With a Kleisli GC, we return the element safely hidden in a monad.
English
0
0
0
0
David Richter
David Richter@drcicer·
Looks cool: Constructive Galois Connections, JFP'18, Darais, Horn. The problem is, how can we extract static analyses from mechanized soundness proofs for Galois Connections (GC)? The authors propose "Kleisli GC".
David Richter tweet media
English
1
0
0
0
David Richter retweetledi
R. Hill
R. Hill@gorhill·
Since Manifest V3's "performance" argument is back in the current news cycle, a reminder of what "Understanding the Performance Costs and Benefits of Privacy-focused Browser Extensions" concluded: twitter.com/gorhill/status…
R. Hill tweet media
R. Hill@gorhill

"Understanding the Performance Costs and Benefits of Privacy-focused Browser Extensions": "we urge browser vendors to retain functionality necessary for privacy-focused extensions, but which is slated for deprecation, as the [...] performance argument does not appear to be valid"

English
1
3
19
0
David Richter
David Richter@drcicer·
@rob_rix Cool! But why not apply id to extract? Oh, I see! Only if r is existential not universal. 😃 {-# LANGUAGE RankNTypes, TypeApplications #-} type CPS a b = forall r. (b -> r) -> (a -> r) pure :: (a -> b) -> CPS a b pure f g = g . f extract :: CPS a b -> (a -> b) extract k = k id
English
1
0
1
0
Rob Rix‎
Rob Rix‎@rob_rix·
we can lift any a -> b into CPS r a b but we can only lower CPS r a b to (b -> r) -> (a -> r), not to a -> b. what happens in CPS stays in CPS (until you run it and extract the final r.)
English
2
0
0
0
Rob Rix‎
Rob Rix‎@rob_rix·
A → B ≈ ¬B → ¬A ¬A ≈ A → ⊥ ∴ A → B ≈ (B → ⊥) → (A → ⊥) cps :: (a -> b) -> ((b -> r) -> (a -> r)) cps = flip (.) -- yes, really newtype CPS r a b = CPS { runCPS :: (b -> r) -> (a -> r) } we have straightforward Functor, Applicative, Monad for CPS; also Category.
English
3
3
19
0