From 4b0c1b2c207b1c49732410653774981f754b976c Mon Sep 17 00:00:00 2001 From: Maple Ong Date: Tue, 4 May 2021 09:11:38 -0400 Subject: [PATCH] Use new TruffleRuby::ConcurrentMap backend for Concurrent::Map --- .../collection/map/truffleruby_map_backend.rb | 14 ++++++++++++++ lib/concurrent-ruby/concurrent/map.rb | 9 +++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 lib/concurrent-ruby/concurrent/collection/map/truffleruby_map_backend.rb diff --git a/lib/concurrent-ruby/concurrent/collection/map/truffleruby_map_backend.rb b/lib/concurrent-ruby/concurrent/collection/map/truffleruby_map_backend.rb new file mode 100644 index 000000000..68a1b3884 --- /dev/null +++ b/lib/concurrent-ruby/concurrent/collection/map/truffleruby_map_backend.rb @@ -0,0 +1,14 @@ +module Concurrent + + # @!visibility private + module Collection + + # @!visibility private + class TruffleRubyMapBackend < TruffleRuby::ConcurrentMap + def initialize(options = nil) + options ||= {} + super(initial_capacity: options[:initial_capacity], load_factor: options[:load_factor]) + end + end + end +end diff --git a/lib/concurrent-ruby/concurrent/map.rb b/lib/concurrent-ruby/concurrent/map.rb index c83ae7808..a2010ad69 100644 --- a/lib/concurrent-ruby/concurrent/map.rb +++ b/lib/concurrent-ruby/concurrent/map.rb @@ -16,8 +16,13 @@ module Collection require 'concurrent/collection/map/mri_map_backend' MriMapBackend when Concurrent.on_rbx? || Concurrent.on_truffleruby? - require 'concurrent/collection/map/atomic_reference_map_backend' - AtomicReferenceMapBackend + if defined?(::TruffleRuby::ConcurrentMap) + require 'concurrent/collection/map/truffleruby_map_backend' + TruffleRubyMapBackend + else + require 'concurrent/collection/map/atomic_reference_map_backend' + AtomicReferenceMapBackend + end else warn 'Concurrent::Map: unsupported Ruby engine, using a fully synchronized Concurrent::Map implementation' require 'concurrent/collection/map/synchronized_map_backend'