”Life is too short for imperative programming”
John Hughes
Software Crisis, 1968—today
• Software project outcomes
Cancelled
>2x costoverrunSuccess
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
Kreditor
Order 100:-
Order details
97:-
invoice
100:-
• Founded May 2006
• Selling… QuickCheck!– Extra feature: simplifies failing tests
Session Border Gateway: A Firewall for IP telephony
Media Proxy
Opens media pin-holes for calls in
progress
2x10G Ethernet
Hardware for packet forwarding
Media Gateway Controller
Monitors signalling
traffic; opens and closes pinholes
2x1G Ethernet
Linux ”blade”processor
Session Border Gateway: A Firewall for IP telephony
Media Proxy
Media Gateway Controller
ITU standard protocol H.248
(Megaco) 150KLOC Erlang
InterWork Description defines a subset
Session Border Gateway: A Firewall for IP telephony
Media Proxy
QuickCheck
Megaco Commands
ContextContext
Megaco Commands
Context
ContextContext
Termination
Add
Megaco Commands
Context
ContextContext
TerminationTermination
Add
Megaco Commands
Context
ContextContext
TerminationTermination
StreamStream
Modify
Megaco Commands
Context
ContextContext
TerminationTermination
StreamStream
Subtract
Megaco Commands
Context
ContextContext
Termination
StreamStream
Subtract
Megaco Commands
ContextContext
Command Sequences
• Normal sequence:
Add
Modify
Add
Modify
Subtract
Subtract
We wanted to test other sequences that, according to the IWD, shouldwork.
Add/Modify Error
• Modify assumes there are already two terminationsin the context
• Same bug found in virtually every run!
• New ”bug precondition”needed for Modify
Add
Modify
Add/Subtract Error
• There one day, gone the next…
• This bug had just been found and fixed by the development team
Add
Subtract
Add/Add/Modify Error
• If the terminations have different numbers of streams
• Same underlying problem: Modify assumes each stream has two ends…
Add
Modify
Add
Add/Add/Sub/Add… Error• Extracted from
a test case 160 commands long
• Caused by corrupt data-structures after the firstSubtract
Add
Subtract
Add
Add
Add
Subtract
Subtract
• Derivatives trading in New York
10 Microsoft shares
Option to buy �for $100 anytime
In 2007
Option to sell �for $10 in Nov 2006
How do they do it?
C++ plugins
Simon Peyton-Jones: Financial Contracts in Haskell
anytime :: Contract -> Contract-- Acquire the underlying contract at-- any time before it expires (but-- you must acquire it)
� ��������������� �������������������������������������������������������������������
golden_handcuff = anytime shares
shares = zero `or` (scaleK -100 (one Dollar) `and`scaleK 10 (one MSShare))
anytime������������
�������������
�� �����
or����������������
New Approach
C++ plugins
Haskell contract models• 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