Polyglot Architecture: A Rational Approach to Software Design
A Rational Approach to
Senior Researcher at Bayard Rock
Research and Development Perspective
▪ A focus on long term solutions to
▪ A lot of room for experimentation,
but decisions must be justified
▪ Very small teams, and so few
resources for maintenance, and
little time for production issues
▪ Talented people who are generally
excited about learning new things
Why do we use the languages we use?
▪ I always use the same one or two languages.
▪ Pseudo-Technical management picks all of our technologies.
▪ I need to Maximize Synergy by Hadooping the Big Data Analytics.
▪ I am fanatically obsessed with a particular language.
▪ Weighted random sampling fed by the benchmark game.
▪ We came up with a set of criteria and judged several candidates
empirically in context.
Considerations (oh god)
Safety, FindingTalent, CPU Performance,Training, Platform
Limitations, Compiler Support, Community, External Libraries,Tooling,
Debugging, Primary Community Focus, Unique Features, Simplicity,
Development Environments, Familiarity, Cross Platform Support,
Asynchrony, Hype, Industry Standards, Algorithms,Tutorials, Data
Structures, Stability, Memory Usage, Garbage Collection, Syntactic
Flexibility, CompilationTargets, Language/Platform Interop,Taste,
Core Libs, Code Clarity, Licensing, Error Messages, BuildTools,
Testability, Requirements,Type Systems, Embeddability, Scalability,
FaultTolerance, Parallelization, Binary Package Size, Permissions,
Algebraic DataTypes, Obfuscation, Peer Pressure,Technical Debt,
Does it have what plants crave?
Safety – “In the limit”, cost of unexpected changes, testing
burden, sanity of core libs, dependency handling
Community – Support options, library quantity and quality,
training, hiring, enthusiasm, culture of craftsmanship
Performance – Relative dimensions include cpu, memory and network
Tooling – Debugging, static analysis, linting, test frameworks
And they’re all tradeoffs based on Context.
i.e. Requirements, Platform(s),Team Skills, Available Funds
What is Safety? (My favorite topic)
Imagine your goal is perfect bug-free software (in the limit)
▪ Is the compiler your friend?
▪ Is it easy to write correct code?
▪ Will it “fail fast” when
in an unexpected state?
▪ When things fail will it
get up and keep going?
▪ Can you trust external libraries?
Context is everything
▪ Projected lifetime, time to market, burn rate
▪ Explicit requirements, technology interop, customer systems
▪ Current talent, willingness to learn, and training expenditure
▪ Previous purchases and existing platform limitations
▪ Domain problems that are helped greatly certain unique features
It Usually Comes Down To Unique Features
▪ C# – Great GUI builders, code generation tooling
▪ F# –Type providers, data modeling and transformation
▪ Matlab – Fast linear algebra, tons of high quality algorithms
▪ C++ (/CLI) – Library selection, managed-unmanaged interop
Currently Under Consideration
▪ R – table structured data analysis and visualization, type provider
▪ Haskell – Unique libraries, fantastically safe
▪ Scala – Beautiful and concise leverage of Spark/Hadoop, quite safe
Isn’t writing your own language
generally a bad idea?
What I found for scripting options on .NET:
IronPython, IronRuby, IronJS, DynamicLinq…
DynamicLinq was almost exactly what I wanted. Almost…
…If it weren’t for the darned manual conversions…
… So after much consideration, I wrote Barb.
It’s a simple .net scripting language
Name.Contains "John“ and (Age > 20 orWeight > 200)
Slots to fill (Safe Alert Manager)
▪ User Interface
▪ User Behavior Model
▪ Data Access
▪ Algorithms / Data Structures
▪ Ad-Hoc Behaviors
UI (C#) &
Glue (F# and Barb)
Key Insight: Reverential Transparency
Matlab C++ Haskell R Python
F# Type Providers
Typed Access to Data and Languages
MAP: Secure Distributed ML
UI (JS),Analysis (JS & SQL)
& Computation (F#)
F# or viaType
Experts and users coexist
in the same system with
MAP Language Choices
▪ Analysis Data Access – BRSQL in the UI
▪ Glue – Almost entirely F#
▪ Algorithms / Data Structures – F#,Type Provider, C++/CLI
On the Horizon: Asm.js (with emscripten)