Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Papers we love: Elixir edition
Search
Andrea Leopardi
July 16, 2018
Programming
1.1k
5
Share
Papers we love: Elixir edition
Andrea Leopardi
July 16, 2018
More Decks by Andrea Leopardi
See All by Andrea Leopardi
The Umbrella and the Range
whatyouhide
0
45
gen_statem - OTP's Unsung Hero
whatyouhide
2
320
The World is a Network (and We Are Just Nodes)
whatyouhide
1
250
BEAM: The Perfect Fit for Networks
whatyouhide
1
250
Update from the Elixir team - 2022
whatyouhide
0
450
Testing Asynchronous OTP
whatyouhide
1
570
Elixir Sightseeing Tour
whatyouhide
0
470
Mint - Disrupting HTTP clients
whatyouhide
0
290
BEAM Architecture Handbook
whatyouhide
7
2.9k
Other Decks in Programming
See All in Programming
Swift Concurrency Type System
inamiy
0
480
2026-03-27 #terminalnight 変数展開とコマンド展開でターミナル作業をスマートにする方法
masasuzu
0
320
AWS re:Invent 2025の少し振り返り + DevOps AgentとBacklogを連携させてみた
satoshi256kbyte
3
160
AI-DLC Deep Dive
yuukiyo
5
1.1k
「話せることがない」を乗り越える 〜日常業務から登壇テーマをつくる思考法〜
shoheimitani
4
740
存在論的プログラミング: 時間と存在を記述する
koriym
5
860
ネイティブアプリとWebフロントエンドのAPI通信ラッパーにおける共通化の勘所
suguruooki
0
260
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
270
Coding as Prompting Since 2025
ragingwind
0
820
Getting more out of Maven
mlvandijk
0
110
KagglerがMixSeekを触ってみた
morim
0
370
Running Swift without an OS
kishikawakatsumi
0
780
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
160
Context Engineering - Making Every Token Count
addyosmani
9
820
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.2k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
310
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
200
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Utilizing Notion as your number one productivity tool
mfonobong
4
290
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
380
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Transcript
PAPERS WE LOVE ELIXIR EDITION PAPERS WE LOVE ELIXIR EDITION
@whatyouhide
None
None
None
None
None
“You know Yelp? Yeah, but for weed”– me
None
None
“You know Uber Eats?”– me
None
weedmaps.com/careers
ELIXIR functional concurrent fault tolerant
The Elixir core team
we existing research
Formatting code Diffing data structures Property-based testing ⚙
FORMATTING CODE
Code formatter welcoming to newcomers consistency across teams/orgs/community no style
discussions
print code with line length limit
%{foo: [1, 2, 3], bar: "baz"}
%{foo: [1, 2, 3], bar: "baz"} 30
%{foo: [1, 2, 3], bar: "baz"} 25
%{ foo: [1, 2, 3], bar: "baz" } 25
%{ foo: [1, 2, 3], bar: "baz" } 13
%{ foo: [ 1, 2, 3 ], bar: "baz" }
13
The Design of a Pretty-printing Library John Hughes
Documents "text" concat(document1, document2) nest(document, columns)
"[" |> concat("1,") |> concat("2,") |> concat("3") |> concat("]") [1,
2, 3]
"[" |> line("1,") |> line("2,") |> line("3") |> nest(2) |>
line("]") [ 1, 2, 3 ]
A Prettier Printer Philip Wadler
group( "[" |> concat("1,") |> concat("2,") |> concat("3") |> nest(2)
|> concat("]") ) [ 1, 2, 3 ]
choose( doc, replace_concat_with_line_break(doc) ) DANGER: STRICT LANGUAGE AHEAD
Strictly Pretty Christian Lindig
Our documents color(doc, :blue) nest(doc, :cursor) ...
DIFFING DATA STRUCTURES
1) test two strings are different (Test) test.ex:6 Assertion with
== failed code: assert "hello world!" == "Hello, my world" left: "hello world!" right: "Hello, my world" stacktrace: test.ex:7: (test)
None
An O(ND) Difference Algorithm and Its Variations Eugene W. Myers
“Find the shortest edit script to turn a sequence A
into a sequence B.” = Find shortest path in a graph
O(ND) D is related to how "similar" the two sequences
are DNA strand mutation source code changes
iex> List.myers_difference([1, 4, 2, 3], [1, 2, 3, 4]) [eq:
[1], del: [4], eq: [2, 3], ins: [4]]
Now colorize
No modifications to the paper this time
String Matching with Metric Trees Using an Approximate Distance Ilaria
Bartolini, Paolo Ciaccia, Marco Patella
PROPERTY-BASED TESTING
Shape of input Properties of output + + Randomness =
Property-based testing
check all list <- list_of(term()) do sorted = sort(list) assert
is_list(sorted) assert length(list) == length(sorted) end
String.starts_with?(s1 <> s2, s1) String.ends_with?(s1 <> s2, s2) For any
strings s1 and s2:
Only Erlang tools (with different license)
QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs
Koen Classen John Hughes
all the base ideas are there but it relies too
heavily on types
data Colour = Red | Blue | Green instance Arbitrary
Colour where arbitrary = oneof [return Red, return Blue, return Green]
(prop/for-all [v (gen/vector gen/int)] (= (sort v) (sort (sort v))))
Clojure's test.check
StreamData check all s1 <- string(), s2 <- string() do
assert String.starts_with?(s1 <> s2, s1) assert String.ends_with?(s1 <> s2, s2) end
Generators functions that take some random state and return a
lazy tree
Lazy tree a value plus a "recipe" for shrinking it
StreamData.integer() 3 0 2 0 1 0
StreamData.integer() 3 0 2 0 1 0
map(StreamData.integer(), fn x -> x * 2 end) 3 *
2 0 * 2 2 * 2 0 * 2 1 * 2 0 * 2
map(StreamData.integer(), fn x -> x * 2 end) 6 0
4 0 2 0
HONORABLE MENTIONS
How to make ad-hoc polymorphism less ad hoc Philip Wadler
Stephen Blott
Recursive functions of symbolic expressions and their computation by machine
John McCarthy
Advances in record linkage methodology as applied to the 1985
census of Tampa Florida Matthew A. Jaro
Iteratee: Teaching an Old Fold New Tricks John W. Lato
CONCLUSIONS
Existing research is AWESOME
Research tends to solve problems in a general/simple/flexible/elegant way
HDD Hughes-driven development
@whatyouhide