Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1...
Transcript of Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1...
![Page 1: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/1.jpg)
Slide 1© MBARI 2005
Embedding Ruby into a Robotic Marine Embedding Ruby into a Robotic Marine LaboratoryLaboratory
Brent Roman,
Christopher A. Scholin, Dianne I. Greenfield
Monterey Bay Aquarium Research Institute
www.mbari.org
![Page 2: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/2.jpg)
Slide 2© MBARI 2005
About MBARIAbout MBARIMonterey Bay Aquarium Research Institute
• Part of our stated mission is to develop better instruments, systems, and methods for scientific research in the deep waters of the ocean
• Founded in 1987 by David Packard of HP• Funded largely by the Packard Foundation• Employs >200 in Moss Landing, CA
![Page 3: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/3.jpg)
Slide 3© MBARI 2005
•What it does
•How it works
•Current applications
•Future directions
•Ruby's Central Role
MBARI's 2MBARI's 2ndnd Generation GenerationEnvironmental Sample ProcessorEnvironmental Sample Processor
![Page 4: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/4.jpg)
Slide 4© MBARI 2005
A.C. Hardy. 1936. Discovery Reports Vol. XI, pp. 457-510.A.C. Hardy. 1936. Discovery Reports Vol. XI, pp. 457-510.
Machines to collect microbes are not new
• Continuous Plankton Recorder (CPR)
• First deployed on the R.R.S. Discovery 1925-27.
• Design driven by need to document “patchiness” of zooplankton
• Many modifications over the years– took ~10 yrs to become
“operational”
A.C. Hardy. 1936. Discovery Reports Vol. XI, pp. 457-510.A.C. Hardy. 1936. Discovery Reports Vol. XI, pp. 457-510.
![Page 5: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/5.jpg)
Slide 5© MBARI 2005
Functional Requirements for Instruments that Detect Microorganisms and Gene Products
• Sample collection • Cell concentration, preservation and disruption• Separation of molecules based on physical properties• Use of intermolecular reactions to reveal target molecules
– lectin/carbohydrate– antibody/antigen– nucleic acid hybridization– receptor/target– enzyme mediated processing
• Optical and electrochemical signal transduction common
Functional Requirements for Instruments that Detect Microorganisms and Gene Products
• Sample collection • Cell concentration, preservation and disruption• Separation of molecules based on physical properties• Use of intermolecular reactions to reveal target molecules
– lectin/carbohydrate– antibody/antigen– nucleic acid hybridization– receptor/target– enzyme mediated processing
• Optical and electrochemical signal transduction common
![Page 6: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/6.jpg)
Slide 6© MBARI 2005
The Environmental Sample Processor (ESP)The Environmental Sample Processor (ESP) • Rotating carousel with 100, 25mm pucks holding user-defined
filters or solid phase media
• Fluid handling system permits autonomous collection of samples and timed application of multiple reagents in situ, subsurface
• Sample processing protocols written as a series of simple commands such as “Load Filter”, “Pull x ml reagent y”, “heat z oC 30 min”, etc.
• Two-way communication
![Page 7: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/7.jpg)
Slide 7© MBARI 2005
Environmental Sample Processor MooringEnvironmental Sample Processor Mooring
![Page 8: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/8.jpg)
Slide 8© MBARI 2005
![Page 9: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/9.jpg)
Slide 9© MBARI 2005
Functions of the ESP
• Development of DNA probe arrays (near real-time)– collect sample– create cell homogenate– discharge sample collection filter > load probe array filter– develop probe array > image > transmit result
• Sample Archival– for whole cell analysis (probes, microscopy)– for nucleic acids (gene libraries)– for toxins (domoic acid)
• Whole Cell Hybridization (FISH -- Fluorescent In-Situ Hybridization)
– collect, fix sample– label target species with probes– recover filter and view using epifluorescence microscopy
Functions of the ESP
• Development of DNA probe arrays (near real-time)– collect sample– create cell homogenate– discharge sample collection filter > load probe array filter– develop probe array > image > transmit result
• Sample Archival– for whole cell analysis (probes, microscopy)– for nucleic acids (gene libraries)– for toxins (domoic acid)
• Whole Cell Hybridization (FISH -- Fluorescent In-Situ Hybridization)
– collect, fix sample– label target species with probes– recover filter and view using epifluorescence microscopy
![Page 10: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/10.jpg)
Slide 10© MBARI 2005
controls/orient image
16,000 cells/ml lysate P. australis
27 28 29
23 26 30 31 32
20 22 25 33 34 35 36
19 21 24 6 3 1
18 17 16 15 7 4 2
14 13 12 8 5
11 10 9
auD1 muD2 NA-1 HET1
Heterosigma akashiwo
Alexandriumcatenella
Pseudo-nitzschia australis
Pseudo-nitzschia multiseries
•Array map – species/group specific DNA probes
•Sandwich hybridization assay (SHA) chemistry
•Image stored & sent to shore via radio modem
ESP's DNA Probe ArraysESP's DNA Probe Arrays
![Page 11: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/11.jpg)
Slide 11© MBARI 2005
junk
control
all eukaryotes
• 125 ml whole water• 0.45 μm filter• 2 ml homogenate
Multiple Taxa on Single ArrayMultiple Taxa on Single Array
![Page 12: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/12.jpg)
Slide 12© MBARI 2005
The Sandwich Hybridization Assay The Sandwich Hybridization Assay
18S rRNA
rRNA-targeted capture probe (streptavidin)
signal probe (dioxygenin)
HRP conjugate
enzyme substrate
Verification by matching 96-well bench run
Imaged array
array spot intensity ∝ absorbance (450 nm)
Photo courtesy of A. Haywood
rRNA-targeted capture probe (streptavidin)
signal probe (dioxygenin)
HRP conjugate
enzyme substrate
Verification by matching 96-well bench run
Imaged array
array spot intensity ∝ absorbance (450 nm)
Photo courtesy of A. Haywood
HRP = Horse Radish Peroxidase
![Page 13: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/13.jpg)
Slide 13© MBARI 2005
![Page 14: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/14.jpg)
Slide 14© MBARI 2005
Current ApplicationsCurrent Applications
• Develop DNA probe arrays (~2 h) for identification of: •Harmful Algal Blooms (plankton)
•Bacteria
•Invertebrate Larvae
• Sample archival to preserve cell structurewhole cell archival
(FISH) hybridization
• Domoic acid analysis (in progress)
Current ApplicationsCurrent Applications
• Develop DNA probe arrays (~2 h) for identification of: •Harmful Algal Blooms (plankton)
•Bacteria
•Invertebrate Larvae
• Sample archival to preserve cell structurewhole cell archival
(FISH) hybridization
• Domoic acid analysis (in progress)
![Page 15: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/15.jpg)
Slide 15© MBARI 2005
Future DirectionsFuture Directions
• Deep ESP: Deploy on Ocean Bottom at >2000m
• The 2G ESP is a sampling tool - protocols can be tailored for user requirements
Modifying chemistry as appropriate
Development of new probes
Adjusting sampling procedures
Other uses?
• Complete in situ domoic acid analysis methodology
• Increase array sensitivity
• Integrate PCR module
![Page 16: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/16.jpg)
Slide 16© MBARI 2005
NASA ASTEP: Astrobiology Science and Technology for Exploring Planets
![Page 17: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/17.jpg)
Slide 17© MBARI 2005
AcknowledgmentsAcknowledgments
The David and Lucile Packard Foundation
National Oceanographic Partnership Program (NOPP) funds allocated by the National Science Foundation (NSF OCE-0314222)
R. Marin III, S. Jensen, A. Haywood, C. Preston, M. Adachi, T. Walsh, J. Jones, C. Braby, A. Gough
![Page 18: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/18.jpg)
Slide 18© MBARI 2005
Why Choose Ruby for anembedded system like ESP?
• Can be configured to run in small memory footprint• Open Source
– Universities have cheap labor and little $$$– We can fix (or break) it ourselves as we see fit
• Readable, but terse syntax– No white space rules and no excess punctuation– Make it suitable for use as an interactive shell– Useful subset of Ruby is approachable for non-programmers
• Everything is an Object! – But, no OO baggage creeps into procedural definitions.– Most molecular biologists don't “get” OO. They write recipes.
• User defined Exception Objects• Multi-Threading
Why Choose Ruby for anembedded system like ESP?
• Can be configured to run in small memory footprint• Open Source
– Universities have cheap labor and little $$$– We can fix (or break) it ourselves as we see fit
• Readable, but terse syntax– No white space rules and no excess punctuation– Make it suitable for use as an interactive shell– Useful subset of Ruby is approachable for non-programmers
• Everything is an Object! – But, no OO baggage creeps into procedural definitions.– Most molecular biologists don't “get” OO. They write recipes.
• User defined Exception Objects• Multi-Threading
![Page 19: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/19.jpg)
Slide 19© MBARI 2005
ESP Software Overview
Mission
Hardware
System Libraries
User Libraries
Device Drivers
Device Models via I2C Gateway
Simulation Normal Operation
![Page 20: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/20.jpg)
Slide 20© MBARI 2005
• ESP Servo control requires hard real-time response– Sample rates of as high as 64hz– Event response in tens of microseconds
• Ruby cannot deliver this today (at low-power)• So, true to OO, make it someone else's problem!
– Distribute Servo Control among networked micro-controllers•TI's MSP 430 family consumes ~1mW/Mhz
– Ensure each runs identical, stable 'C' firmware– Each configured by the Ruby application at system start up
• Decouple supervisory from servo control– But, this cannot be done for many real-time systems...
•You're not going to fly a plane this way!
Real-Time Ruby?
![Page 21: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/21.jpg)
Slide 21© MBARI 2005
2nd Generation ESPElectrical Block Diagram
PC/104 Host Processor
Interconnect /Motherboard
5V & 3.3V Power Supplies
Sampler
Collection
Process
Manipulator
Storage
I2C
ContextualSensors
3 x RS-232
ExternalPower 10 - 16V
RFModem
Analytical Modules
3 x RS-232
RS-232
Serial Bus
Distributed Controllersaka “Dwarves”
~2 Watts
~450 mW
![Page 22: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/22.jpg)
Slide 22© MBARI 2005
2G ESPPC/104 Host Processor
• Inexpensive (<$250US) COTS product
– Technologic model TS-7200• ARM9 CPU with 32MB DRAM + 16MB flash
– Compact Flash storage used only for data logging
– USB Host for Camera interface
– 10/100Mb ethernet– Customized, Vendor supported Linux 2.4 kernel
• Approximately 2 Watts at idle, 4 Watts max.• Power cut off entirely while “sleeping” between samples
– Total power consumed while “sleeping” is <50mW • Boots to application in <10 seconds from power on
![Page 23: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/23.jpg)
Slide 23© MBARI 2005
Trimming Ruby• Fitting Linux/Ruby in 16MB flash requires some thought
– Use of JFFS2 filesystem compresses flash by ~40%
• But, Linux kernel takes 2MB leaving 14MB
– Ruby core interpreter is small ( ~ 500kByte )
– Native code libraries are large (~8MB base install!)
– “Pure” Ruby ASCII code is extremely compact!• Avoid use of Native Libraries in favor of pure Ruby
– Example: curses.so links with libcurses.so, libterm.so
• Curses support brings in close to 1MB of binary
• Hack core Makefile to skip building unneeded libraries
– Removed tcltk, tk & curses from Ruby 1.68 build
– Reduced /usr/lib/ruby to <0.8MB, /usr/lib < 0.5MB
– Still includes IRB, networking, readline, termios, ...
![Page 24: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/24.jpg)
Slide 24© MBARI 2005
SourceRef:Ruby Source code introspection
• Display source for specified method in a text editor• List all source files that contribute code to specified class
• Reload (modified) methods/objects
– edit MyObject.method :foo; reload MyOjbect
• Display source of any method on an exception backtrace
– Goes to the offending source after an error
• About 10kBytes for the Ruby script “sourceref.rb”
– Added two tiny core methods to v1.68
– __LINE__ & __FILE__ may work on > Ruby versions
– See ruby-talk/21555 for details
• Serves as tiny IDE for our memory constrained systems
![Page 25: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/25.jpg)
Slide 25© MBARI 2005
ESP seeks GUI
• We want to animate a cartoon of machine's physical state
– Dynamically changing
– TCP/IP Networked over a 50kbit/sec radio link• Doesn't need to be slick, but be responsive and intuitive• Platform independent
– Something that works in a web browser preferred
– No need to install anything on the client side
• Rich Kilmer's Ruby-to-Flash bridge sounds interesting
• Any other ideas very welcome!
![Page 26: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/26.jpg)
Slide 26© MBARI 2005
Ruby Threads:The Good
• Non-native “Green Threads” works very well for the ESP
– We have one instance of Ruby interpreter per process
• Thread scheduling seems to be fast and memory efficient
– Non-native threading may even be superior in this
– Is there a benefit of native threads on a uniprocessor?• Core IO and Process classes handle threads well
– Output = `myTimeConsumingCommand`
• Other threads run while this completes
• This was, for me, a pleasant surprise.
![Page 27: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/27.jpg)
Slide 27© MBARI 2005
Ruby Threads:Some Bad
• Standard Library Mutex class not guaranteed to be FIFO
– Lock not held while passing to the first waiting thread
– Third thread can then grab the lock without waiting
• Mutex.lock must hold lock after waking waiting thread
– Not fixed in Ruby 1.8
def lock while (Thread.critical = true; @locked) @waiting.push Thread.current Thread.stop end @locked = true Thread.critical = false self end
def unlock return unless @locked Thread.critical = true @locked = false begin t = @waiting.shift t.wakeup if t rescue ThreadError retry end Thread.critical = false begin #3 rd thread can steal lock here! t.run if t rescue ThreadError end self end
![Page 28: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/28.jpg)
Slide 28© MBARI 2005
Ruby Threads:More Bad
• Thread.sleep does not clear Thread.critical
• Ruby code cannot clear Thread.critical before sleeping
– Just as one can't clear it explicitly before Thread.stop
• Another thread my run between the clear & stop
• This is why Thread.stop clears Thread.critical
• My solution was to add the 'C' extension: Thread.doze
– Just like .sleep, but clears Thread.critical first
• Is there any reason Thread.sleep should not be changed?
– Could one ever want to sleep with Thread.critical set?!
• BTW -- there is a similar issue with the select method...
• See ruby-core:4053
![Page 29: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/29.jpg)
Slide 29© MBARI 2005
Ruby Threads:The Ugly
• Ruby Trap handlers are invoked even if Thread.critical
• So, it is very difficult (impossible?) to handle traps safely
• Interpreter calls rb_thread_schedule while Thread.critical
– When this happens, Thread.critical remains set
• Thread.pass
• Readline extension
– Random threads become “critical” spontaneously
• Patch in Ruby-core:4039, demoed in Ruby-core:4249
– Signal handling deferred while Thread.critical
– rb_thread_schedule revised to clear Thread.critical
– Readline now reads keyboard via Ruby sysread method
![Page 30: Embedding Ruby into a Robotic Marine Laboratory › dl › rubyconf2005 › EmbeddedRuby.pdfSlide 1 © MBARI 2005 Embedding Ruby into a Robotic Marine Laboratory Brent Roman, Christopher](https://reader036.fdocuments.in/reader036/viewer/2022081407/5f1e4d773ca33542d04ac691/html5/thumbnails/30.jpg)
Slide 30© MBARI 2005
Ruby Threads:Why we should fix this before 2.0
• These problems have nothing to do with whether threading implementation is native, pthreads, green, blue or yellow
– Thread.critical is the basic Ruby threading interlock
– All higher-level Mutexes, Queues, etc. build upon it
• This won't go away when threading finally gets implemented the “Rite” way
– Thread.critical's app-level behaviour must change
• Has no one else run into these issues?
– If so, how did you cope?
– If not, how did you avoid them?