000195609 001__ 195609
000195609 005__ 20181203023411.0
000195609 0247_ $$2doi$$a10.1145/2509136.2509547
000195609 022__ $$a0362-1340
000195609 02470 $$2ISI$$a000327697300010
000195609 037__ $$aARTICLE
000195609 245__ $$aInstant Pickles: Generating Object-Oriented Pickler Combinators for Fast and Extensible Serialization
000195609 260__ $$bAssoc Computing Machinery$$c2013$$aNew York
000195609 269__ $$a2013
000195609 300__ $$a19
000195609 336__ $$aJournal Articles
000195609 520__ $$aAs 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.
000195609 6531_ $$aSerialization
000195609 6531_ $$apickling
000195609 6531_ $$ameta-programming
000195609 6531_ $$adistributed programming
000195609 6531_ $$aScala
000195609 700__ $$0242185$$g191683$$uEcole Polytech Fed Lausanne, Lausanne, Switzerland$$aMiller, Heather
000195609 700__ $$0240993$$g172057$$aHaller, Philipp
000195609 700__ $$0246182$$g214505$$uEcole Polytech Fed Lausanne, Lausanne, Switzerland$$aBurmako, Eugene
000195609 700__ $$aOdersky, Martin$$uEcole Polytech Fed Lausanne, Lausanne, Switzerland$$g126003$$0241835
000195609 773__ $$j48$$tAcm Sigplan Notices$$k10$$q183-201
000195609 909C0 $$xU10409$$0252187$$pLAMP
000195609 909CO $$pIC$$particle$$ooai:infoscience.tind.io:195609
000195609 917Z8 $$x166927
000195609 937__ $$aEPFL-ARTICLE-195609
000195609 973__ $$rREVIEWED$$sPUBLISHED$$aEPFL
000195609 980__ $$aARTICLE