Life is too short for imperative programming”

Download Report

Transcript Life is too short for imperative programming”

”Life is too short for imperative
programming”
John Hughes
Software Crisis, 1968—today
• Software project outcomes
Cancelled
>2x cost
overrun
Success
In Large Companies
Success
Failure
Implemented feature
Not implemented
Technology adoption life cycle
Technology adoption life cycle
Technology adoption life cycle
The Erlang Story
• 1986—Erlang emerges at Ericsson
– Functional language
– Extra support for concurrency & fault
tolerance
• Early 1990s—small products
• 1996
– Open Telecoms Platform (higher-order
functions for robust telecom systems)
– AXD 301 project starts
The AXD 301
• ATM switch (telephone
backbone)
• Born out of a failed
project!
• 1,5 MLOC Erlang
• Seven nines reliability
• 4-10x better
productivity, quality
Erlang Story II
• 1998—Erlang banned for new projects
• 1998—Open source Erlang
• 1998—Bluetail
– Jane Walerud VD
– Mail robustifier, Web prioritizer
SSL Accelerator
• Alteon WebSystems' SSL
Accelerator offers
phenomenal performance,
management and
scalability.
– Network Computing
Kreditor
Order 100:invoice
Order details
100:Kreditor
97:-
• Founded May 2006
• Selling… QuickCheck!
– Extra feature: simplifies failing tests
Session Border Gateway: A
Firewall for IP telephony
Monitors
signalling
traffic;
opens and
closes
pinholes
Opens
media pinholes for
calls in
progress
2x1G Ethernet
Media Gateway Controller Linux ”blade”
processor
2x10G Ethernet
Media Proxy
Hardware for
packet
forwarding
Session Border Gateway: A
Firewall for IP telephony
Media Gateway Controller
ITU standard
protocol
H.248
(Megaco)
Media Proxy
InterWork
Description
defines a
subset
150KLOC
Erlang
Session Border Gateway: A
Firewall for IP telephony
QuickCheck
Media Proxy
Megaco Commands
Context
Context
Megaco Commands
Context
Context
Context
Termination
Add
Megaco Commands
Context
Add
Context
Termination
Termination
Context
Megaco Commands
Context
Context
Context
Termination
Termination
Stream
Stream
Modify
Megaco Commands
Context
Subtract
Context
Termination
Termination
Stream
Stream
Context
Megaco Commands
Context
Context
Context
Termination
Stream
Stream
Subtract
Megaco Commands
Context
Context
Command Sequences
• Normal sequence:
Add
Modify
Add
Subtract
Modify
Subtract
We wanted to test
other sequences
that, according to
the IWD, should
work.
Add/Modify Error
Add
Modify
• Modify assumes there are
already two terminations
in the context
• Same bug found in
virtually every run!
• New ”bug precondition”
needed for Modify
Add/Subtract Error
Add
Subtract
• There one day, gone the
next…
• This bug had just been
found and fixed by the
development team
Add/Add/Modify Error
Add
Add
Modify
• If the terminations have
different numbers of
streams
• Same underlying problem:
Modify assumes each
stream has two ends…
Add/Add/Sub/Add… Error
Add
Add
Add
Subtract
Subtract
Add
Subtract
• Extracted from
a test case 160
commands long
• Caused by
corrupt datastructures after
the first
Subtract
• Derivatives trading in New York
Option to buy ●
for $100 anytime
In 2007
10 Microsoft
shares
Option to sell ●
for $10 in Nov 2006
How do they do it?
C++ plugins
Simon Peyton-Jones: Financial
Contracts in Haskell
 The option to acquire 10 Microsoft shares, for $100,
anytime between t1 and t2 years from now
anytime :: Contract -> Contract
-- Acquire the underlying contract at
-- any time before it expires (but
-- you must acquire it)
anytime:
Choose when
golden_handcuff = anytime shares
shares = zero `or` (scaleK -100 (one Dollar) `and`
scaleK 10 (one MSShare))
or: Choose
whether
MS shares
are a
“currency”
New Approach
Haskell contract models
C++ plugins
• Functional programming on Wall Street
– Proprietary trading
– 60 people
– OCaml primary development language
The Cat Among the Pigeons
The Cat Among the Pigeons
• Two cores, each hyperthreaded