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
5
1.1k
Papers we love: Elixir edition
Andrea Leopardi
July 16, 2018
Tweet
Share
More Decks by Andrea Leopardi
See All by Andrea Leopardi
The World is a Network (and We Are Just Nodes)
whatyouhide
0
180
BEAM: The Perfect Fit for Networks
whatyouhide
1
160
Update from the Elixir team - 2022
whatyouhide
0
370
Testing Asynchronous OTP
whatyouhide
0
480
Elixir Sightseeing Tour
whatyouhide
0
390
Mint - Disrupting HTTP clients
whatyouhide
0
230
BEAM Architecture Handbook
whatyouhide
7
2.7k
The Evolution of a Language
whatyouhide
0
130
Elixir - functional, concurrent, distributed programming for the rest of us
whatyouhide
2
310
Other Decks in Programming
See All in Programming
traP の部内 ISUCON とそれを支えるポータル / PISCON Portal
ikura_hamu
0
180
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
140
非ブラウザランタイムとWeb標準 / Non-Browser Runtimes and Web Standards
petamoriken
0
430
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
280
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
410
2025.01.17_Sansan × DMM.swift
riofujimon
2
560
PHPで学ぶプログラミングの教訓 / Lessons in Programming Learned through PHP
nrslib
4
1.1k
カンファレンス動画鑑賞会のススメ / Osaka.swift #1
hironytic
0
170
DMMオンラインサロンアプリのSwift化
hayatan
0
190
Асинхронность неизбежна: как мы проектировали сервис уведомлений
lamodatech
0
1.3k
AWSのLambdaで PHPを動かす選択肢
rinchoku
2
390
月刊 競技プログラミングをお仕事に役立てるには
terryu16
1
1.2k
Featured
See All Featured
Music & Morning Musume
bryan
46
6.3k
RailsConf 2023
tenderlove
29
970
Building Applications with DynamoDB
mza
93
6.2k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
The Invisible Side of Design
smashingmag
299
50k
BBQ
matthewcrist
85
9.4k
Gamification - CAS2011
davidbonilla
80
5.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
113
50k
Optimising Largest Contentful Paint
csswizardry
33
3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
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