{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T04:31:51Z","timestamp":1750221111778,"version":"3.41.0"},"reference-count":52,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA","license":[{"start":{"date-parts":[[2018,10,24]],"date-time":"2018-10-24T00:00:00Z","timestamp":1540339200000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"funder":[{"DOI":"10.13039\/100004682","name":"Oracle","doi-asserted-by":"publisher","id":[{"id":"10.13039\/100004682","id-type":"DOI","asserted-by":"publisher"}]},{"DOI":"10.13039\/501100001742","name":"Israel Science Foundation","doi-asserted-by":"publisher","award":["274\/14"],"award-info":[{"award-number":["274\/14"]}],"id":[{"id":"10.13039\/501100001742","id-type":"DOI","asserted-by":"publisher"}]},{"DOI":"10.13039\/501100002428","name":"Austrian Science Fund","doi-asserted-by":"publisher","award":["I2491-N31"],"award-info":[{"award-number":["I2491-N31"]}],"id":[{"id":"10.13039\/501100002428","id-type":"DOI","asserted-by":"publisher"}]}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2018,10,24]]},"abstract":"<jats:p>Dynamic programming languages such as Python and Ruby are widely used, and much effort is spent on making them efficient. One substantial research effort in this direction is the enabling of parallel code execution. While there has been significant progress, making dynamic collections efficient, scalable, and thread-safe is an open issue. Typical programs in dynamic languages use few but versatile collection types. Such collections are an important ingredient of dynamic environments, but are difficult to make safe, efficient, and scalable.<\/jats:p>\n          <jats:p>In this paper, we propose an approach for efficient and concurrent collections by gradually increasing synchronization levels according to the dynamic needs of each collection instance. Collections reachable only by a single thread have no synchronization, arrays accessed in bounds have minimal synchronization, and for the general case, we adopt the Layout Lock paradigm and extend its design with a lightweight version that fits the setting of dynamic languages. We apply our approach to Ruby's Array and Hash collections. Our experiments show that our approach has no overhead on single-threaded benchmarks, scales linearly for Array and Hash accesses, achieves the same scalability as Fortran and Java for classic parallel algorithms, and scales better than other Ruby implementations on Ruby workloads.<\/jats:p>","DOI":"10.1145\/3276478","type":"journal-article","created":{"date-parts":[[2018,10,24]],"date-time":"2018-10-24T11:57:18Z","timestamp":1540382238000},"page":"1-30","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":7,"title":["Parallelization of dynamic languages: synchronizing built-in collections"],"prefix":"10.1145","volume":"2","author":[{"given":"Benoit","family":"Daloze","sequence":"first","affiliation":[{"name":"JKU Linz, Austria"}]},{"given":"Arie","family":"Tal","sequence":"additional","affiliation":[{"name":"Technion, Israel"}]},{"given":"Stefan","family":"Marr","sequence":"additional","affiliation":[{"name":"University of Kent, UK"}]},{"given":"Hanspeter","family":"M\u00f6ssenb\u00f6ck","sequence":"additional","affiliation":[{"name":"JKU Linz, Austria"}]},{"given":"Erez","family":"Petrank","sequence":"additional","affiliation":[{"name":"Technion, Israel"}]}],"member":"320","published-online":{"date-parts":[[2018,10,24]]},"reference":[{"key":"e_1_2_2_1_1","doi-asserted-by":"publisher","DOI":"10.1177\/109434209100500306"},{"key":"e_1_2_2_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/1565824.1565827"},{"key":"e_1_2_2_3_1","doi-asserted-by":"publisher","DOI":"10.1145\/2509136.2509531"},{"key":"e_1_2_2_4_1","unstructured":"Carl Friedrich Bolz and Laurence Tratt. 2013. The Impact of Meta-Tracing on VM Design and Implementation. Science of Computer Programming (2013).  Carl Friedrich Bolz and Laurence Tratt. 2013. The Impact of Meta-Tracing on VM Design and Implementation. Science of Computer Programming (2013)."},{"volume-title":"Prawn: Fast, Nimble PDF Generation For Ruby. http: \/\/prawnpdf.org\/","year":"2017","author":"Brown Gregory","key":"e_1_2_2_5_1"},{"key":"e_1_2_2_6_1","unstructured":"Gregory Brown Brad Ediger Alexander Mankuta etal 2017b. Prawn::SynchronizedCache with a Mutex for JRuby. https:\/\/github.com\/prawnpdf\/prawn\/blob\/61d46791\/lib\/prawn\/utilities.rb  Gregory Brown Brad Ediger Alexander Mankuta et al. 2017b. Prawn::SynchronizedCache with a Mutex for JRuby. https:\/\/github.com\/prawnpdf\/prawn\/blob\/61d46791\/lib\/prawn\/utilities.rb"},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/74877.74884"},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/2754169.2754181"},{"key":"e_1_2_2_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/3018743.3018753"},{"key":"e_1_2_2_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/3030207.3030221"},{"key":"e_1_2_2_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/2983990.2984001"},{"key":"e_1_2_2_12_1","doi-asserted-by":"publisher","DOI":"10.1145\/2843915.2843921"},{"volume-title":"Proceedings of the 2018 ACM International Conference on Object Oriented Programming Systems Languages &amp; Applications (OOPSLA\u201918)","year":"2018","author":"Daloze Benoit","key":"e_1_2_2_13_1"},{"key":"e_1_2_2_14_1","unstructured":"Jerry D\u2019Antonio and Petr Chalupa. 2017. Concurrent Ruby \u2013 Modern concurrency tools for Ruby. http:\/\/www. concurrent-ruby.com  Jerry D\u2019Antonio and Petr Chalupa. 2017. Concurrent Ruby \u2013 Modern concurrency tools for Ruby. http:\/\/www. concurrent-ruby.com"},{"key":"e_1_2_2_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/2814228.2814231"},{"key":"e_1_2_2_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/2908080.2908106"},{"key":"e_1_2_2_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/2786805.2786831"},{"key":"e_1_2_2_18_1","unstructured":"David Heinemeier Hansson etal 2018. Ruby on Rails - A web-application framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) pattern. http:\/\/rubyonrails.org\/  David Heinemeier Hansson et al. 2018. Ruby on Rails - A web-application framework that includes everything needed to create database-backed web applications according to the Model-View-Controller (MVC) pattern. http:\/\/rubyonrails.org\/"},{"key":"e_1_2_2_19_1","doi-asserted-by":"crossref","unstructured":"Tim Harris James Larus and Ravi Rajwar. 2010. Transactional Memory 2nd Edition (2nd ed.). Morgan and Claypool Publishers.   Tim Harris James Larus and Ravi Rajwar. 2010. Transactional Memory 2nd Edition (2nd ed.). Morgan and Claypool Publishers.","DOI":"10.1007\/978-3-031-01728-5"},{"key":"e_1_2_2_20_1","doi-asserted-by":"publisher","DOI":"10.5555\/645958.676105"},{"key":"e_1_2_2_21_1","unstructured":"Maurice Herlihy and Nir Shavit. 2011. The Art of Multiprocessor Programming. Morgan Kaufmann.   Maurice Herlihy and Nir Shavit. 2011. The Art of Multiprocessor Programming. Morgan Kaufmann."},{"key":"e_1_2_2_22_1","unstructured":"JRuby. 2008. JRuby\u2019s threaded-reverse benchmark. https:\/\/github.com\/jruby\/jruby\/blob\/a0a3e4bd22\/test\/bench\/bench_ threaded_reverse.rb  JRuby. 2008. JRuby\u2019s threaded-reverse benchmark. https:\/\/github.com\/jruby\/jruby\/blob\/a0a3e4bd22\/test\/bench\/bench_ threaded_reverse.rb"},{"key":"e_1_2_2_23_1","doi-asserted-by":"crossref","unstructured":"Josh Juneau Jim Baker Frank Wierzbicki Leo Soto and Victor Ng. 2010. The Definitive Guide to Jython: Python for the Java Platform. Apress.   Josh Juneau Jim Baker Frank Wierzbicki Leo Soto and Victor Ng. 2010. The Definitive Guide to Jython: Python for the Java Platform. Apress.","DOI":"10.1007\/978-1-4302-2528-7"},{"key":"e_1_2_2_24_1","unstructured":"Hemant Kumar. 2013. Bug report on the RubyGems project: Thread issues with JRuby. https:\/\/github.com\/rubygems\/ rubygems\/issues\/597  Hemant Kumar. 2013. Bug report on the RubyGems project: Thread issues with JRuby. https:\/\/github.com\/rubygems\/ rubygems\/issues\/597"},{"key":"e_1_2_2_25_1","doi-asserted-by":"publisher","DOI":"10.1145\/2754169.2754187"},{"key":"e_1_2_2_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/3191697.3214334"},{"key":"e_1_2_2_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/2989225.2989232"},{"key":"e_1_2_2_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/2989225.2989233"},{"volume-title":"Proceedings of the 2018 ACM International Conference on Object Oriented Programming Systems Languages &amp; Applications (OOPSLA \u201918)","author":"Meier Remigius","key":"e_1_2_2_29_1"},{"key":"e_1_2_2_30_1","unstructured":"Mozilla. 2018. SharedArrayBuffer Documentation. https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/ Global_Objects\/SharedArrayBuffer  Mozilla. 2018. SharedArrayBuffer Documentation. https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/ Global_Objects\/SharedArrayBuffer"},{"key":"e_1_2_2_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/2784731.2784734"},{"key":"e_1_2_2_32_1","unstructured":"Takafumi Nose. 2013. Ruby version of NAS Parallel Benchmarks 3.0. https:\/\/github.com\/plus7\/npb_ruby  Takafumi Nose. 2013. Ruby version of NAS Parallel Benchmarks 3.0. https:\/\/github.com\/plus7\/npb_ruby"},{"key":"e_1_2_2_33_1","unstructured":"Charles Nutter Thomas Enebo Ola Bini Nick Sieger etal 2018. JRuby \u2013 The Ruby Programming Language on the JVM. http:\/\/jruby.org\/  Charles Nutter Thomas Enebo Ola Bini Nick Sieger et al. 2018. JRuby \u2013 The Ruby Programming Language on the JVM. http:\/\/jruby.org\/"},{"key":"e_1_2_2_34_1","doi-asserted-by":"publisher","DOI":"10.1145\/2555243.2555247"},{"key":"e_1_2_2_35_1","unstructured":"Tim Peierls Brian Goetz Joshua Bloch Joseph Bowbeer Doug Lea and David Holmes. 2005. Java Concurrency in Practice. Addison-Wesley Professional.   Tim Peierls Brian Goetz Joshua Bloch Joseph Bowbeer Doug Lea and David Holmes. 2005. Java Concurrency in Practice. Addison-Wesley Professional."},{"key":"e_1_2_2_36_1","unstructured":"Mike Perham. 2017. Sidekiq \u2013 Simple efficient background processing for Ruby. https:\/\/sidekiq.org\/  Mike Perham. 2017. Sidekiq \u2013 Simple efficient background processing for Ruby. https:\/\/sidekiq.org\/"},{"key":"e_1_2_2_37_1","unstructured":"Evan Phoenix Brian Shirai Ryan Davis Dirkjan Bussink etal 2018. Rubinius \u2013 An Implementation of Ruby Using the Smalltalk-80 VM Design. https:\/\/rubinius.com\/  Evan Phoenix Brian Shirai Ryan Davis Dirkjan Bussink et al. 2018. Rubinius \u2013 An Implementation of Ruby Using the Smalltalk-80 VM Design. https:\/\/rubinius.com\/"},{"key":"e_1_2_2_38_1","unstructured":"Filip Pizlo. 2017. Concurrent JavaScript: It can work! https:\/\/webkit.org\/blog\/7846\/concurrent-javascript-it-can-work\/  Filip Pizlo. 2017. Concurrent JavaScript: It can work! https:\/\/webkit.org\/blog\/7846\/concurrent-javascript-it-can-work\/"},{"key":"e_1_2_2_39_1","unstructured":"William Pugh et al. 2004. JSR 133 - Java Memory Model and Thread Specification Revision. http:\/\/www.cs.umd.edu\/~pugh\/ java\/memoryModel\/jsr133.pdf  William Pugh et al. 2004. JSR 133 - Java Memory Model and Thread Specification Revision. http:\/\/www.cs.umd.edu\/~pugh\/ java\/memoryModel\/jsr133.pdf"},{"key":"e_1_2_2_40_1","unstructured":"Rails Project. 2018. Threading and Code Execution in Rails. http:\/\/edgeguides.rubyonrails.org\/threading_and_code_ execution.html  Rails Project. 2018. Threading and Code Execution in Rails. http:\/\/edgeguides.rubyonrails.org\/threading_and_code_ execution.html"},{"key":"e_1_2_2_41_1","unstructured":"Chris Seaton Benoit Daloze Kevin Menard Petr Chalupa Brandon Fish and Duncan MacGregor. 2017. TruffleRuby \u2013 A High Performance Implementation of the Ruby Programming Language. https:\/\/github.com\/graalvm\/truffleruby  Chris Seaton Benoit Daloze Kevin Menard Petr Chalupa Brandon Fish and Duncan MacGregor. 2017. TruffleRuby \u2013 A High Performance Implementation of the Ruby Programming Language. https:\/\/github.com\/graalvm\/truffleruby"},{"key":"e_1_2_2_42_1","unstructured":"Brian Shirai. 2016. Bug report on the Bundler project: Unsynchronized concurrent modification of Set instance. https: \/\/github.com\/bundler\/bundler\/issues\/5142  Brian Shirai. 2016. Bug report on the Bundler project: Unsynchronized concurrent modification of Set instance. https: \/\/github.com\/bundler\/bundler\/issues\/5142"},{"key":"e_1_2_2_43_1","unstructured":"Brian Shirai. 2018. Bug report on the Bundler project: Unsychronized concurrent updates of Hash. https:\/\/github.com\/ bundler\/bundler\/issues\/6274  Brian Shirai. 2018. Bug report on the Bundler project: Unsychronized concurrent updates of Hash. https:\/\/github.com\/ bundler\/bundler\/issues\/6274"},{"key":"e_1_2_2_44_1","volume-title":"Optimization Coaching for JavaScript. In 29th European Conference on ObjectOriented Programming (ECOOP 2015)","volume":"37","author":"St-Amour Vincent","year":"2015"},{"key":"e_1_2_2_45_1","doi-asserted-by":"publisher","DOI":"10.1145\/2581122.2544157"},{"key":"e_1_2_2_46_1","doi-asserted-by":"publisher","DOI":"10.1007\/11516798_18"},{"key":"e_1_2_2_47_1","doi-asserted-by":"publisher","DOI":"10.1145\/1869459.1869507"},{"key":"e_1_2_2_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/2047849.2047860"},{"key":"e_1_2_2_49_1","doi-asserted-by":"publisher","DOI":"10.1145\/3062341.3062381"},{"key":"e_1_2_2_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/2647508.2647517"},{"key":"e_1_2_2_51_1","doi-asserted-by":"publisher","DOI":"10.1145\/2384577.2384587"},{"key":"e_1_2_2_52_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-642-39038-8_1"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3276478","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3276478","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,18]],"date-time":"2025-06-18T01:01:58Z","timestamp":1750208518000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3276478"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2018,10,24]]},"references-count":52,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2018,10,24]]}},"alternative-id":["10.1145\/3276478"],"URL":"https:\/\/doi.org\/10.1145\/3276478","relation":{},"ISSN":["2475-1421"],"issn-type":[{"type":"electronic","value":"2475-1421"}],"subject":[],"published":{"date-parts":[[2018,10,24]]},"assertion":[{"value":"2018-10-24","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}