The Computer Language
Benchmarks Game

reverse-complement Ruby JRuby #3 program

source code

# The Computer Language Benchmarks Game
# http://benchmarksgame.alioth.debian.org
#
# Contributed by Aaron Tavistock

def process_segment(segment)
  (header, _, sequence) = segment.partition("\n")

  sequence.delete!("\n\r >")
  sequence.reverse!
  sequence.tr!(
    'wsatugcyrkmbdhvnATUGCYRKMBDHVN',
    'WSTAACGRYMKVHDBNTAACGRYMKVHDBN'
  )

  results = [">#{header}"]

  idx = 0
  length = sequence.length
  while idx < length
    results << sequence[idx,60]
    idx += 60
  end

  results.join("\n")
end

def forking_worker(segment)
  reader, writer = IO.pipe

  pid = Process.fork do
    begin
      reader.close
      results = process_segment(segment)
      Marshal.dump(results, writer)
    ensure
      writer.close
    end
  end

  writer.close
  begin
    results = Marshal.load(reader)
  ensure
    reader.close
  end
  Process.waitpid(pid)

  results
end

threads = []
$stdin.each_line('>') do |segment|
  next if segment.length < 2

  threads << Thread.new do
    if RUBY_PLATFORM == 'java'
      Thread.current[:output] = process_segment(segment)
    else
      Thread.current[:output] = forking_worker(segment)
    end
  end
end
threads.each(&:join)

threads.each do |thread|
  puts thread[:output]
end
    

notes, command-line, and program output

NOTES:
64-bit Ubuntu quad core
jruby 9.1.16.0 (2.3.3) 2018-02-21 8f3f95a Java HotSpot(TM) 64-Bit Server VM 10+46 on 10+46 +jit [linux-x86_64]


Tue, 27 Mar 2018 15:41:51 GMT

MAKE:
mv revcomp.jruby-3.jruby revcomp.rb

0.24s to complete and log all make actions

COMMAND LINE:
/opt/src/jruby-9.1.16.0/bin/jruby -Xcompile.fastest=true -Xcompile.invokedynamic=true -J-server -J-Xmn512m -J-Xms3072m -J-Xmx3072m revcomp.rb 0 < revcomp-input100000000.txt

UNEXPECTED OUTPUT 

8333337c8333337,16666671
< 
---
> >THREE Homo sapiens frequency
> GTCTCGCTACCTACTGTGAATGTTAATAAAGCCTACGGCCAAAAAAGTCCCAAGCTGCAC
> CTTATTAATGAAATCGTTGCACAGAGTATCCCGTGTATTTTTCTCTAAGAACAAGTTAGC
> GTCTGATCATAAATCTACATTTTGAGTGCGATGGGAGGGTGTTGTGACACAGGAAATACA
> GCCGTTATAGGGACTGTACACGCGCTGTCGAGAACTCCTTTTTTGATAAGTTGGGGTCTT
> ATTGCTCAATCATGATTTTCTACCTTTTATAGAGCGTTATCAAAATTCTACCTTGAATAG
> TCTAAAGGACACTACTTCGCTCCCCTGCCGTTATAGGACACACTCTCACGCACCGTGGAC
> CTGAAATAAGCGTAACTATCAGGTCACAAAAAACACATCCTTACATTCTAGGCAGAAAAC
> AAATAACAGTCACAAAAAATTTGAATAAATAATATTCCTTGTTATGTTATTCCGTGCACT
> ACCACCAACTTTATCGACACAAGCCGCATTTGTACCGAGAGTTGTTTAGCTTTTTTCAGT
> AGTGTTCTCGTTGCGAACTACGCACACGGACGCGGAGTAGTTGCTTCAAGGATGGAGTTA
> TAGTTGACCTACGAGATTCTTCACCACCTTTATGTTTGTTAGGGACGGATGACGGTAGAC
> ATACATGCTTTTCATCTTGTTGCGATGTAACTAACCCTTTGTATTTACGTTCGGAGCCCG
> TTGATTTATGTAAACTATTTGCGTAGGTGCACTGGCAACTAATTTCCAGCTGTCCGCCCA
> GTATTATCAGAATTTACGCGCTATCAAGAACTATACCATGCTAGCTTGAGGTTTCGTTCA
> TTCCCGAAGACGGTCTAATAGTTAAGACTTATCAGGAACGTTATTTTTGGTGAGATGCTC
> CTCCTTAAGAATGCCCGATTAACGAGAAATATGGAGCCGTTTTTTTTATTATGCATCTCC
> ATATGTGTCATTTATTCGATTATAGGTTTGTACACAGCACAAGAACGTATTGAAATTTAA
> TGGAAGCGCAGTTAACTTATGAGTTAGTTTGATAGAGTACTCACAGACCAATATAGAGTG
> TCCGAACTGTATAAGTGATAAGTTGATAACTGCCCAGTATCGTGACAGTTTATTTCGATT
> CGCTTAATTTATTTGGATAGTAAACTATAACTAATATATTCGTCTTTATTAATTGTATGG
> GTAAGGCCGTCAGAATCTAATCAGAACATTTAGTATAAATCTACTATAAACAGAAATCCT
> ACGGATGTTCTAATTAAACCTATTACGTTCGAGATTTATGCGTTTGTAACTACAAGACTT
> TTGCGCGGCCTTTATAAATTTCAAACCGTAGAACACTGGCCAAATATTGAGCATAATGCT
> AGTTGAGTTTGTGGCTCAATCCAGTGCAAAATGCATCACACTATGTCATTAAGTTTTCGC
> CAAGCGGGATTCCGGCCCAAACCCGATTACAATTATTTTCATGCTTATTGTATTGCTGGG
> TTAATTTGATACGTATTTCTACCCTGTCACTAAATTTGGTTAACAAATAAGTTTCACCTG
> GTTAAGCTCCGGAGTATGACACGTAGTAATATTAGTTCTGTTTAGACCCTAAAGGCTAAA
> GATCCGGGTAGTCACGATGAGGCATCACTGGTGATAGATAAACTTTTTTAAAGTTTGGTT
> AAACGGACATTACATAATTAGACTGCGAAGTGCTACGTTATCAAGCATGGGTAATGCATG
> TTAGACCGAATTTAGATATATATGAAAACGACACTATCCTAACGTGTTTGATCTACAGCA
> GTTAATCCGCTTCCGGCGTAATAAAAGAAATTCGAGCTAGTTTGATAACCGTTTATGCCA
> TTATAGAGCACTTAGCTTAACTTCATGGTATGTGAACAAAATAGCATATGTAATTTGGGG
> AACAGCAGACTTCACAGTGTATCACCTAGGAGTTGTTAATTGTTATTTATCGAAGATAAA
> CATTAAATTCTTATTCAGACATACAGCGATAGCTAAACTTATCAGTAGAACCTCAAAATT
> TCAAATACTACTCTGGAACGCGTCCGTATAGATACAAGTACCTGAATGAACTGGTCATGA
> CAAATTGACTCCTTGTTAATCGGACATTATTCGTTGTACTAAAGTTGGAGAAGGTAGCCT
> AACATTGGACATTACAGGCCAGTTACCTCTATGAGAGCGATTTACCGCGCCACTAAGTGG
> GCGAGAATGATCGTTTATGGGACGGAACCACATTCCGTTATCCTCTGCACATGGTGGACG
> CTTCGAAGTACAAATGGCCCAACCACACAAGGGAGGGTGTTAGATTTTATTGCAATGTCC
> TCTGATAAGAACGTATGACTGCACTTGACAATAAGAATTCAAAGAAGATCGCCTTTCCTT
> AACATTTTCTATTCCGGGGCTGGTTATGGCTTTATTTCTTACAATCTCAATGATGCCCGC
> CTACTTGACAAACACATTTGTCGTAACTTTAGTTTTCTAGCCTTTTCAATTTTAAATTTA
> CCTTTTCTAAGAAAACAGCTAAAATTAATGAATAACCTTCATAGCGACATTTATGTCTTT
> TAAACGCAGGTGTGAGGGCGGTACTGTTATCACATTAGCGTGCGATGGACAAAAAGGGCC
> AGCAGTTGCAACCCAGTGAATGGGTGACATGTCTTATTTAAGTCAGTTACAATCAACTTC
> TTTAAAGGAGGACAATACACTGGACCTCAATATTAAGGCCGGAATACGCTGTAAAGGACC
> ATCTGTTCTATGTCAAATAACAGATGTTGGTTACGGCCTAAATTAATATCCGTTTCTGTG
> TTTTATAGCAATCAAAAGACATACAGTGTTATAGCTCATTTATCTCGGTCGCCTTCATCG
> AAAAATTGCAAAGGTATCTCTACCTGGATTCGTGTTTGAAGGACCCAACCCATGTTTCGA
> CATGCACTGTTTTGATAATGCACAGCAGCGAATCTTGTGGATTGAGTGGTAAATCTCCTA
> CGGGTCATTTCCATCAATACGTACTATTAAACAACTTTAATAGTCTATCTACCCTCTTCA
> CGGAGGTATGAGTGCCTTGAACTTACTATATGAAATTCATATTACGCAACGAAAAGGGAA
> GTAAGGTACAAAGCGCTTCCTAGCCGGCTGCAACGAGTGAGTATCTAGAGTCTTGTAAAT
> TTGACTATAGAATTTCTATGATGTAAATATCGATTAACCGCAAACCTTTAAAACCTACAT
> GTATGGTCCTTATAACGAACGTAGGGATGCCATGTTGGAGAAGGCGAAAATTAACTCGCC
> GAATCATTCCTTCTATATTTATGTTACAGACGCATTCATCGAAGTTAGGATGAATCATAT
> CTTGGTTGAAGAGCGCTTTGAGGCATGTGGCAGAACACATGCTTGTGCCTAAACTTCACT
> GGATATGAAAATTAACTTCAATGGTCTCTTTCGAACCGGATTACGGGCTACTCCGTGGAG
> GAAATAAAGGCTTTAATTCTTTAGCGCGAGCGTTGGAACCACTTGGTTTAAGATACACTT
> GAATATGGAGGCAGGCCGCACCCACTCGGGCCACTTATTTCTCTATGAGTGTAGCCAGAA
> CTCCCAACAAATGTGCTTTCATTTTTCTTGTAGCAAATAGATGTAGCTCAACCGGATCCC
> GGCCTCATAGCTCAAACAGCTCAGTCGAACAAGCAGTTACAAGTCGTGATTGGGAAGTTA
> TATAAAACATATGAGAGTTATTGACGACATAAAGATATATGGTTTAAATTACCAGGTTCG
> AGTTTTTCGACAAAAAATTCATGATGGAAGACTCGTGTATTTTTTATCTCATTAGACTAA
> AGTGCTTATGTAGCCCATGCATTGATTCTCTAGTATATTCTTCCGAGAAACCGGTAAAGT
> TGTAAGGGTAAGTCTTCACTACCAATCACATCATTTAGCTCCAAGACCTATTATTCTACA
> TACAATATAACGTTTTACTTCGTTGATCATTACGGTACATCAAATTTCAAACTACTAGGA
> TACGGCGATCAGTTTAGGTAGATAATGGTTCTTAGCGGAATATCTTTAATCAATTAAATG
> GTTAAAACCATGAAGCGGGTATGTATTGATCACTATTTTGTGATTTAGTATAGTTGACTA
> CTAGATGGTTTACATCGTTTAATGCAAGTATGACAACCCAATCCACGCGGTTGAATAAGC
> CCCCACCGTATCAAGAGGGAAGGGACCGTATAACGATTCTTCCAGCGCAAGTCACCACTG
> GCAAAACGAATTAGCTGATGAAGCTACTATTGTGACCGGATAACATCATGACGATCGCTA
> TCATCATATCTATAATGTTCTTAGAGTGTTGCTAATTATATGCTCTTTGGCTGCTGCCAT
> TACACCTGATTCATCTATCTTTTCAGGGTTCTTCAAAGTCATGACTTTTTTAATAACCAT
> AGGTGCGGCAGAAGCATATTCATAAAAAATAGTCGATTGTAGACGCAAGGGGACTTACCC
> AGCTATTATTCCTCCAATCCTAATGTTGGGATAATGTAGTTGAAAACCTAAACTATTGAG
> ACTTAGAATATGTAGCCAAAATGCTATGTTGATGCAAATTTGTTCTTGGAGGATGGTAAA
> TCCGCGGAGTTTTTGGTCTGTATCTGACCACAGAGAATTAACATCAGAAAAGAAGTAACT
> GATTTGTTCCGGACACCAAAAGGCTGTCTTTTCGAGTTGGATATTCGAGCAAGGGGGTTG
> AACGCAGCGGAAGTTTATGACTTGGCCAATTATCAGATTCCGTAGAACAACTATTGGTGT
> ATCATAGAAGTGGTAGCTTAGAGGAGGCATGATGAACAACTCTACCGCGAAGTTAACTAT
> GCGGTGTATTAAATTCAGGCCTGAATAACAAGAATTTAGACATATCCACTGTGCTTCTTT
> CCAAATTAGTTGCCGCCTAGTTTAAAATACTGAACAACTGCTTTAAACGTCACAAAGGGT