in JS JS runs in the browser Dynamically typed JS is the way people-centric data apps are built today! Easy to prototype & add new features Continued to attract top JS talent …and on the desktop too JS deals well with ambiguous types and structures found while in wrangling
in JS JS runs in the browser Dynamically typed JS is the way people-centric data apps are built today! Easy to prototype & add new features Continued to attract top JS talent …and on the desktop too JS deals well with ambiguous types and structures found while in wrangling But does it perform? Does it scale?
Function.prototype.toString() Functions can be generated: new Function(functionBody) Inlining function calls brought ~15-20% speed up Difficult to maintain & debug. Modest wins don’t justify the maintenance cost.
parallelism via multi-core processors Garbage-collected language pain points: Value copies, object allocation and garbage collection Small inputs easily blow up memory usage
execution frameworks Chrome’s Portable Native Client (PNaCl) asm.js Upcoming: WebAssembly Run compiled C and C++ code LLVM No JIT overhead Dense data representations No unpredictable garbage collection
Google C++ libraries Modern C++11/14 std::unique_ptr & std::shared_ptr simplify memory management Standard threading library New container classes LLVM Clang libraries ASAN Address Sanitizer TSAN Thread Sanitizer Useful for catching large classes of bugs googletest googlemock benchmark
is yet another payoff of (DSL + compiler + intelligent execution) ➔ Alongside Spark and Hadoop ➔ Photon specialized for UX: immediacy and scale ➔ Start by establishing speed-of-light ➔ Design to ensure it remains achievable as you grow ➔ Memory management with portability ➔ LLVM + toolchain form a powerful portability platform. ➔ Explicit memory management is critical for immediacy, even more so in-browser Lessons learned
Spark and Hadoop Portability Browser, Desktop, Single-Node Server Lean usage of client memory Efficient and predictable. Photon performance preserves user flow No loss of context Immediate data wrangling Fluid UX with predictions, profiles, previews