📄 A Direct-Style Effect Notation for Sequential and Parallel Programs by @drcicer, Timon Böhler, Pascal Weisenburger, and @m_mezini - https://t.co/VbiRM25nwE
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.
Prisma is a language / Scala library for writing distributed programs that interact via efficient and safe Ethereum smart contracts. @drcicer, Kretzler, Weisenburger, @guidosalva, @SebastFaust, @m_mezini #ecoop22
➡https://t.co/VmxEfPR0WT
➡️https://t.co/oIAq1gqfMi
Details below…
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🛡️
@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😀
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 ...).
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.
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".
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: https://t.co/uF4MBpwDGw
The presentation of our @ECOOPconf distinguished paper on Multiparty Languages is online! 👀
https://t.co/MrFE7dYdfi
w/ @realThesave, @marcoperessotti, @drcicer, @guidosalva, and P. Weisenburger.
*Six* speakers in a 15 min 📽️!
Mini 🧵 on the paper in the 1st comment 👇.
@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