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'