Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
”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