{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,19]],"date-time":"2025-06-19T04:08:34Z","timestamp":1750306114076,"version":"3.41.0"},"reference-count":75,"publisher":"Association for Computing Machinery (ACM)","issue":"1","license":[{"start":{"date-parts":[[2017,3,6]],"date-time":"2017-03-06T00:00:00Z","timestamp":1488758400000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/www.acm.org\/publications\/policies\/copyright_policy#Background"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["ACM Trans. Program. Lang. Syst."],"published-print":{"date-parts":[[2017,3,31]]},"abstract":"<jats:p>\n            Big data is revolutionizing how all sectors of our economy do business, including telecommunication, transportation, medical, and finance. Big data comes in two flavors: data at rest and data in motion. Processing data in motion is\n            <jats:italic>stream processing<\/jats:italic>\n            . Stream processing for big data analytics often requires scale that can only be delivered by a distributed system, exploiting parallelism on many hosts and many cores. One such distributed stream processing system is IBM Streams. Early customer experience with IBM Streams uncovered that another core requirement is extensibility, since customers want to build high-performance domain-specific operators for use in their streaming applications. Based on these two core requirements of distribution and extensibility, we designed and implemented the Streams Processing Language (SPL). This article describes SPL with an emphasis on the language design, distributed runtime, and extensibility mechanism. SPL is now the gateway for the IBM Streams platform, used by our customers for stream processing in a broad range of application domains.\n          <\/jats:p>","DOI":"10.1145\/3039207","type":"journal-article","created":{"date-parts":[[2017,3,7]],"date-time":"2017-03-07T19:12:04Z","timestamp":1488913924000},"page":"1-39","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":17,"title":["SPL"],"prefix":"10.1145","volume":"39","author":[{"given":"Martin","family":"Hirzel","sequence":"first","affiliation":[{"name":"IBM Thomas J. Watson Research Center, Yorktown Heights, NY"}]},{"given":"Scott","family":"Schneider","sequence":"additional","affiliation":[{"name":"IBM Thomas J. Watson Research Center, Yorktown Heights, NY"}]},{"given":"Bu\u011fra","family":"Gedik","sequence":"additional","affiliation":[{"name":"Bilkent University, Ankara, Turkey"}]}],"member":"320","published-online":{"date-parts":[[2017,3,6]]},"reference":[{"key":"e_1_2_1_1_1","volume-title":"Conference on Innovative Data Systems Research (CIDR). 277--289","author":"Abadi Daniel J.","year":"2005","unstructured":"Daniel J. Abadi, Yanif Ahmad, Magdalena Balazinska, U\u011fur Cetintemel, Mitch Cherniack, Jeong-Hyon Hwang, Wolfgang Lindner, Anurag S. Maskey, Alexander Rasin, Esther Ryvkina, Nesime Tatbul, Ying Xing, and Stan Zdonik. 2005. The design of the Borealis stream processing engine. In Conference on Innovative Data Systems Research (CIDR). 277--289."},{"key":"e_1_2_1_2_1","doi-asserted-by":"publisher","DOI":"10.1007\/s00778-003-0095-z"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/1376616.1376634"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","unstructured":"Yanif Ahmad and Christoph Koch. 2009. DBToaster: A SQL compiler for high-performance delta processing in main-memory databases. In Demonstration at Very Large Data Bases (VLDB-Demo). 1566--1569. 10.14778\/1687553.1687592","DOI":"10.14778\/1687553.1687592"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","unstructured":"Tyler Akidau Alex Balikov Kaya Bekiroglu Slava Chernyak Josh Haberman Reuven Lax Sam McVeety Daniel Mills Paul Nordstrom and Sam Whittle. 2013. MillWheel: Fault-tolerant stream processing at internet scale. In Very Large Data Bases (VLDB) Industrial Track. 734--746. 10.14778\/2536222.2536229","DOI":"10.14778\/2536222.2536229"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICDE.2011.5767878"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1007\/s00778-004-0147-z"},{"key":"e_1_2_1_8_1","doi-asserted-by":"publisher","DOI":"10.5555\/1316689.1316732"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1147\/JRD.2016.2527419"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/1869459.1869469"},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","unstructured":"Brian Babcock Shivnath Babu Mayur Datar Rajeev Motwani and Jennifer Widom. 2002. Models and issues in data stream systems. In Principles of Database Systems (PODS). 1--16. 10.1145\/543613.543615","DOI":"10.1145\/543613.543615"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","unstructured":"Jonathan Bachrach and Keith Playford. 2001. The Java Syntactic Extender (JSE). In Object-Oriented Programming Systems Languages and Applications (OOPSLA). 31--42. 10.1145\/504282.504285","DOI":"10.1145\/504282.504285"},{"key":"e_1_2_1_13_1","volume-title":"Conference on Innovative Data Systems Research (CIDR). 363--373","author":"Barga Roger S.","year":"2007","unstructured":"Roger S. Barga, Jonathan Goldstein, Mohamed Ali, and Mingsheng Hong. 2007. Consistent streaming through time: A vision for event stream processing. In Conference on Innovative Data Systems Research (CIDR). 363--373."},{"key":"e_1_2_1_14_1","doi-asserted-by":"publisher","DOI":"10.1016\/0167-6423(92)90005-V"},{"volume-title":"Conference on Very Large Data Bases (VLDB). 1272--1283","author":"Beyer Kevin S.","key":"e_1_2_1_15_1","unstructured":"Kevin S. Beyer, Vuk Ercegovac, Rainer Gemulla, Andrey Balmin, Mohamed Eltabakh, Carl-Christian Kanne, Fatma Ozcan, and Eugene J. Shekita. 2011. Jaql: A scripting language for large scale semistructured data analysis. In Conference on Very Large Data Bases (VLDB). 1272--1283."},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/1807167.1807291"},{"key":"e_1_2_1_17_1","doi-asserted-by":"crossref","unstructured":"Alain Biem Bruce Elmegreen Olivier Verscheure Deepak Turaga Henrique Andrade and Tim Cornwell. 2010b. A streaming approach to radio astronomy imaging. In Acoustics Speech and Signal Processing (ICASSP). 1654--1657.","DOI":"10.1109\/ICASSP.2010.5495521"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","unstructured":"Jeffrey Bosboom Sumanaruban Rajadurai Weng-Fai Wong and Saman Amarasinghe. 2014. StreamJIT: A commensal compiler for high-performance stream programming. In Object-Oriented Programming Systems Languages and Applications (OOPSLA). 177--195. 10.1145\/2660193.2660236","DOI":"10.1145\/2660193.2660236"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/2335484.2335513"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","unstructured":"Craig Chambers Ashish Raniwala Frances Perry Stephen Adams Robert R. Henry Robert Bradshaw and Nathan Weizenbaum. 2010. FlumeJava: Easy efficient data-parallel pipelines. In Programming Language Design and Implementation (PLDI). 363--375. 10.1145\/1806596.1806638","DOI":"10.1145\/1806596.1806638"},{"volume-title":"Conference on Innovative Data Systems Research (CIDR).","author":"Chandrasekaran Sirish","key":"e_1_2_1_21_1","unstructured":"Sirish Chandrasekaran, Owen Cooper, Amol Deshpande, Michael J. Franklin, Joseph M. Hellerstein, Wei Hong, Sailesh Krishnamurthy, Samuel Madden, Vijayshankar Raman, Frederick Reiss, and Mehul A. Shah. 2003. TelegraphCQ: Continuous dataflow processing for an uncertain world. In Conference on Innovative Data Systems Research (CIDR)."},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/342009.335432"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","unstructured":"Tyson Condie Neil Conway Peter Alvaro Joseph M. Hellerstein Khaled Elmeleegy and Russell Sears. 2010. MapReduce online. In Networked Systems Design and Implementation (NSDI). 313--328.","DOI":"10.5555\/1855711.1855732"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/347090.347094"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/872757.872838"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.5555\/1939399.1939403"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","unstructured":"Jeffrey Dean and Sanjay Ghemawat. 2004. MapReduce: Simplified data processing on large clusters. In Operating Systems Design and Implementation (OSDI). 137--150.","DOI":"10.5555\/1251254.1251264"},{"key":"e_1_2_1_28_1","volume-title":"Conference on Innovative Data Systems Research (CIDR). 412--422","author":"Demers Alan","year":"2007","unstructured":"Alan Demers, Johannes Gehrke, Biswanath Panda, Mirek Riedewald, Varun Sharma, and Walker White. 2007. Cayuga: A general purpose event monitoring system. In Conference on Innovative Data Systems Research (CIDR). 412--422."},{"volume-title":"Event processing with esper and nesper. Retrieved","year":"2014","key":"e_1_2_1_29_1","unstructured":"Esper. 2014. Event processing with esper and nesper. Retrieved June 2014 from http:\/\/esper.codehaus.org\/."},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/1376616.1376729"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1109\/TPDS.2013.295"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","unstructured":"Michael I. Gordon William Thies and Saman Amarasinghe. 2006. Exploiting coarse-grained task data and pipeline parallelism in stream programs. In Architectural Support for Programming Languages and Operating Systems (ASPLOS). 151--162. 10.1145\/1168857.1168877","DOI":"10.1145\/1168857.1168877"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1109\/5.97300"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/2335484.2335506"},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1147\/JRD.2013.2243535"},{"key":"e_1_2_1_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/2103746.2103772"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/1297027.1297030"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/2933267.2933607"},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","DOI":"10.1145\/2528412"},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.5555\/551789.853532"},{"volume-title":"Summer School on Advanced Functional Programming","author":"Hudak Paul","key":"e_1_2_1_42_1","unstructured":"Paul Hudak, Antony Courtney, Henrik Nilsson, and John Peterson. 2003. Arrows, robots, and functional reactive programming. In Summer School on Advanced Functional Programming, Oxford University."},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/1013208.1013209"},{"key":"e_1_2_1_44_1","unstructured":"Gilles Kahn. 1974. The semantics of a simple language for parallel processing. In Information Processing. 471--475."},{"key":"e_1_2_1_45_1","doi-asserted-by":"publisher","DOI":"10.5555\/1813355.1813377"},{"key":"e_1_2_1_46_1","doi-asserted-by":"publisher","unstructured":"Romeo Kienzler R\u00e9my Bruggmann Anand Ranganathan and Nesime Tatbul. 2012. Incremental DNA sequence analysis in the cloud. In Scientific and Statistical Database Management (SSDBM) Demonstration. 640--645. 10.1007\/978-3-642-31235-9_50","DOI":"10.1007\/978-3-642-31235-9_50"},{"key":"e_1_2_1_47_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-31057-7_26"},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1109\/PROC.1987.13876"},{"key":"e_1_2_1_49_1","doi-asserted-by":"publisher","DOI":"10.1145\/1810479.1810526"},{"volume-title":"SPL LogAnalysisBenchmark on StreamsExchange. Retrieved","year":"2014","key":"e_1_2_1_50_1","unstructured":"LogMon. 2014. SPL LogAnalysisBenchmark on StreamsExchange. Retrieved June 2014 from https:\/\/www.ibm.com\/developerworks\/community\/files\/app?lang&equals;en#\/file\/fe90e883-3025-4eb1-a78f-87469a3d4d53."},{"key":"e_1_2_1_51_1","doi-asserted-by":"publisher","DOI":"10.1145\/2247596.2247659"},{"key":"e_1_2_1_52_1","doi-asserted-by":"publisher","DOI":"10.1145\/2517349.2522738"},{"key":"e_1_2_1_53_1","doi-asserted-by":"publisher","DOI":"10.1145\/1376616.1376726"},{"key":"e_1_2_1_54_1","volume-title":"The OpenMP API specificaiton for parallel programming. Retrieved","author":"MP.","year":"2014","unstructured":"OpenMP. 2014. The OpenMP API specificaiton for parallel programming. Retrieved June 2014 from http:\/\/openmp.org\/."},{"key":"e_1_2_1_55_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.1047"},{"key":"e_1_2_1_56_1","doi-asserted-by":"publisher","DOI":"10.1155\/2005\/962135"},{"key":"e_1_2_1_57_1","doi-asserted-by":"publisher","DOI":"10.1145\/316686.316697"},{"key":"e_1_2_1_58_1","doi-asserted-by":"publisher","DOI":"10.1145\/1367497.1367602"},{"key":"e_1_2_1_59_1","doi-asserted-by":"publisher","unstructured":"Scott Schneider Martin Hirzel Bu\u011fra Gedik and Kun-Lung Wu. 2012. Auto-parallelizing stateful distributed streaming applications. In Parallel Architectures and Compilation Techniques (PACT). 53--64. 10.1145\/2370816.2370826","DOI":"10.1145\/2370816.2370826"},{"key":"e_1_2_1_60_1","doi-asserted-by":"publisher","DOI":"10.1109\/TC.2013.221"},{"key":"e_1_2_1_61_1","doi-asserted-by":"publisher","DOI":"10.1145\/2002259.2002263"},{"key":"e_1_2_1_62_1","doi-asserted-by":"publisher","DOI":"10.1145\/2488222.2488255"},{"key":"e_1_2_1_63_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-11957-6_27"},{"key":"e_1_2_1_64_1","doi-asserted-by":"publisher","DOI":"10.1147\/JRD.2012.2197952"},{"key":"e_1_2_1_65_1","doi-asserted-by":"publisher","DOI":"10.1007\/s002360050095"},{"key":"e_1_2_1_66_1","doi-asserted-by":"publisher","DOI":"10.1145\/258993.259019"},{"key":"e_1_2_1_67_1","doi-asserted-by":"publisher","DOI":"10.1109\/TPDS.2012.333"},{"key":"e_1_2_1_68_1","doi-asserted-by":"publisher","DOI":"10.14778\/2752939.2752940"},{"key":"e_1_2_1_69_1","doi-asserted-by":"publisher","DOI":"10.14778\/1687553.1687609"},{"key":"e_1_2_1_70_1","doi-asserted-by":"publisher","unstructured":"Sam Tobin-Hochstadt Vincent St-Amour Ryan Culpepper Matthew Flatt and Matthias Felleisen. 2011. Languages as libraries. In Programming Language Design and Implementation (PLDI). 132--141. 10.1145\/1993498.1993514","DOI":"10.1145\/1993498.1993514"},{"key":"e_1_2_1_71_1","doi-asserted-by":"publisher","DOI":"10.1145\/2588555.2595641"},{"key":"e_1_2_1_72_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-662-44202-9_15"},{"key":"e_1_2_1_73_1","doi-asserted-by":"publisher","DOI":"10.1109\/ASE.2013.6693071"},{"key":"e_1_2_1_74_1","doi-asserted-by":"publisher","DOI":"10.5555\/1855741.1855742"},{"key":"e_1_2_1_75_1","doi-asserted-by":"publisher","DOI":"10.1145\/2517349.2522737"},{"key":"e_1_2_1_76_1","doi-asserted-by":"publisher","DOI":"10.1145\/2002259.2002295"}],"container-title":["ACM Transactions on Programming Languages and Systems"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3039207","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3039207","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T03:36:30Z","timestamp":1750217790000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3039207"}},"subtitle":["An Extensible Language for Distributed Stream Processing"],"short-title":[],"issued":{"date-parts":[[2017,3,6]]},"references-count":75,"journal-issue":{"issue":"1","published-print":{"date-parts":[[2017,3,31]]}},"alternative-id":["10.1145\/3039207"],"URL":"https:\/\/doi.org\/10.1145\/3039207","relation":{},"ISSN":["0164-0925","1558-4593"],"issn-type":[{"type":"print","value":"0164-0925"},{"type":"electronic","value":"1558-4593"}],"subject":[],"published":{"date-parts":[[2017,3,6]]},"assertion":[{"value":"2014-07-01","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2016-09-01","order":1,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2017-03-06","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}