POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The essence of compiling with continuations
PLDI '93 Proceedings of the ACM SIGPLAN 1993 conference on Programming language design and implementation
An efficient implementation of Java's remote method invocation
Proceedings of the seventh ACM SIGPLAN symposium on Principles and practice of parallel programming
Object serialization for marshalling data in a Java interface to MPI
JAVA '99 Proceedings of the ACM 1999 conference on Java Grande
Announcing the Mozart programming system
ACM SIGPLAN Notices
A Value Transmission Method for Abstract Data Types
ACM Transactions on Programming Languages and Systems (TOPLAS)
Featherweight Java: a minimal core calculus for Java and GJ
ACM Transactions on Programming Languages and Systems (TOPLAS)
Types and programming languages
Types and programming languages
FUNCTIONAL PEARL Pickler combinators
Journal of Functional Programming
Scalable component abstractions
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Status report: hot pickles, and how to serve them
ML '07 Proceedings of the 2007 workshop on Workshop on ML
The java module system: core design and semantic definition
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
Whiteoak: introducing structural typing into java
Proceedings of the 23rd ACM SIGPLAN conference on Object-oriented programming systems languages and applications
Generic Pickling and Minimization
Electronic Notes in Theoretical Computer Science (ENTCS)
A generic deriving mechanism for Haskell
Proceedings of the third ACM Haskell symposium on Haskell
Functional pearl: every bit counts
Proceedings of the 15th ACM SIGPLAN international conference on Functional programming
Type classes as objects and implicits
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Capabilities for uniqueness and borrowing
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
JavaGI: The Interaction of Type Classes with Interfaces and Inheritance
ACM Transactions on Programming Languages and Systems (TOPLAS)
Resilient distributed datasets: a fault-tolerant abstraction for in-memory cluster computing
NSDI'12 Proceedings of the 9th USENIX conference on Networked Systems Design and Implementation
Hi-index | 0.00 |
As more applications migrate to the cloud, and as "big data" edges into even more production environments, the performance and simplicity of exchanging data between compute nodes/devices is increasing in importance. An issue central to distributed programming, yet often under-considered, is serialization or pickling, i.e., persisting runtime objects by converting them into a binary or text representation. Pickler combinators are a popular approach from functional programming; their composability alleviates some of the tedium of writing pickling code by hand, but they don't translate well to object-oriented programming due to qualities like open class hierarchies and subtyping polymorphism. Furthermore, both functional pickler combinators and popular, Java-based serialization frameworks tend to be tied to a specific pickle format, leaving programmers with no choice of how their data is persisted. In this paper, we present object-oriented pickler combinators and a framework for generating them at compile-time, called scala/pickling, designed to be the default serialization mechanism of the Scala programming language. The static generation of OO picklers enables significant performance improvements, outperforming Java and Kryo in most of our benchmarks. In addition to high performance and the need for little to no boilerplate, our framework is extensible: using the type class pattern, users can provide both (1) custom, easily interchangeable pickle formats and (2) custom picklers, to override the default behavior of the pickling framework. In benchmarks, we compare scala/pickling with other popular industrial frameworks, and present results on time, memory usage, and size when pickling/unpickling a number of data types used in real-world, large-scale distributed applications and frameworks.