Skip to content

Instantly share code, notes, and snippets.

@headius
Last active January 25, 2016 18:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save headius/b39816f5698e68c9ca00 to your computer and use it in GitHub Desktop.
Save headius/b39816f5698e68c9ca00 to your computer and use it in GitHub Desktop.
#!/usr/local/bin/ruby
require 'benchmark'
BAILOUT = 16
MAX_ITERATIONS = 1000
class Mandelbrot
def initialize
puts "Rendering".freeze
y = -39; while y <= 39
puts
x = -39; while x <= 39
i = iterate(x/40.0,y/40.0)
if (i == 0)
print "*".freeze
else
print " ".freeze
end
x += 1
end
y += 1
end
end
def iterate(x,y)
cr = y-0.5
ci = x
zi = 0.0
zr = 0.0
i = 0
bailout = 16.0
max_iterations = 1000
while(1)
i += 1
temp = zr * zi
zr2 = zr * zr
zi2 = zi * zi
zr = zr2 - zi2 + cr
zi = temp + temp + ci
return i if (zi2 + zr2 > bailout)
return 0 if (i > max_iterations)
end
end
end
loop { puts Benchmark.measure { Mandelbrot.new } }
Rendering
*
*
*
*
*
***
*****
*****
***
*
*********
*************
***************
*********************
*********************
*******************
*******************
*******************
*******************
***********************
*******************
*******************
*********************
*******************
*******************
*****************
***************
*************
*********
*
***************
***********************
* ************************* *
*****************************
* ******************************* *
*********************************
***********************************
***************************************
*** ***************************************** ***
*************************************************
***********************************************
*********************************************
*********************************************
***********************************************
***********************************************
***************************************************
*************************************************
*************************************************
***************************************************
***************************************************
* *************************************************** *
***** *************************************************** *****
****** *************************************************** ******
******* *************************************************** *******
***********************************************************************
********* *************************************************** *********
****** *************************************************** ******
***** *************************************************** *****
***************************************************
***************************************************
***************************************************
***************************************************
*************************************************
*************************************************
***************************************************
***********************************************
***********************************************
*******************************************
*****************************************
*********************************************
**** ****************** ****************** ****
*** **************** **************** ***
* ************** ************** *
*********** ***********
** ***** ***** **
* * * *
0.320000 0.010000 0.330000 ( 0.251473)
Rendering
*
*
*
*
*
***
*****
*****
***
*
*********
*************
***************
*********************
*********************
*******************
*******************
*******************
*******************
***********************
*******************
*******************
*********************
*******************
*******************
*****************
***************
*************
*********
*
***************
***********************
* ************************* *
*****************************
* ******************************* *
*********************************
***********************************
***************************************
*** ***************************************** ***
*************************************************
***********************************************
*********************************************
*********************************************
***********************************************
***********************************************
***************************************************
*************************************************
*************************************************
***************************************************
***************************************************
* *************************************************** *
***** *************************************************** *****
****** *************************************************** ******
******* *************************************************** *******
***********************************************************************
********* *************************************************** *********
****** *************************************************** ******
***** *************************************************** *****
***************************************************
***************************************************
***************************************************
***************************************************
*************************************************
*************************************************
***************************************************
***********************************************
***********************************************
*******************************************
*****************************************
*********************************************
**** ****************** ****************** ****
*** **************** **************** ***
* ************** ************** *
*********** ***********
** ***** ***** **
* * * *
0.030000 0.010000 0.040000 ( 0.029972)
Rendering
*
*
*
*
*
***
*****
*****
***
*
*********
*************
***************
*********************
*********************
*******************
*******************
*******************
*******************
***********************
*******************
*******************
*********************
*******************
*******************
*****************
***************
*************
*********
*
***************
***********************
* ************************* *
*****************************
* ******************************* *
*********************************
***********************************
***************************************
*** ***************************************** ***
*************************************************
***********************************************
*********************************************
*********************************************
***********************************************
***********************************************
***************************************************
*************************************************
*************************************************
***************************************************
***************************************************
* *************************************************** *
***** *************************************************** *****
****** *************************************************** ******
******* *************************************************** *******
***********************************************************************
********* *************************************************** *********
****** *************************************************** ******
***** *************************************************** *****
***************************************************
***************************************************
***************************************************
***************************************************
*************************************************
*************************************************
***************************************************
***********************************************
***********************************************
*******************************************
*****************************************
*********************************************
**** ****************** ****************** ****
*** **************** **************** ***
* ************** ************** *
*********** ***********
** ***** ***** **
* * * *
0.480000 0.010000 0.490000 ( 0.498409)
L0
L1
NOP
ALOAD 0
INVOKEDYNAMIC nil(Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject; [
// handle kind 0x6 : INVOKESTATIC
org/jruby/ir/targets/Bootstrap.contextValue(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
// arguments: none
]
ASTORE 9
ALOAD 9
ASTORE 10
ALOAD 9
ASTORE 11
ALOAD 9
ASTORE 12
ALOAD 9
ASTORE 13
ALOAD 9
ASTORE 14
ALOAD 9
ASTORE 15
ALOAD 9
ASTORE 16
ALOAD 9
ASTORE 17
ALOAD 9
ASTORE 18
ALOAD 9
ASTORE 19
ALOAD 9
ASTORE 20
ALOAD 9
ASTORE 21
ALOAD 9
ASTORE 22
ALOAD 9
ASTORE 23
ALOAD 9
ASTORE 24
ALOAD 9
ASTORE 25
ALOAD 9
ASTORE 26
ALOAD 9
ASTORE 27
ALOAD 9
ASTORE 28
ALOAD 9
ASTORE 29
ALOAD 9
ASTORE 30
ALOAD 9
ASTORE 31
ALOAD 9
ASTORE 32
L2
NOP
ALOAD 3
ASTORE 21
ALOAD 4
ASTORE 20
L3
LINENUMBER 27 L3
ALOAD 0
ALOAD 2
ALOAD 20
INVOKEDYNAMIC floatOperator:-(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject; [
// handle kind 0x6 : INVOKESTATIC
org/jruby/runtime/invokedynamic/MathLinker.floatOperatorBootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;DLjava/lang/String;I)Ljava/lang/invoke/CallSite;
// arguments:
0.5,
"",
0
]
ASTORE 24
ALOAD 24
ASTORE 31
L4
LINENUMBER 28 L4
ALOAD 21
ASTORE 23
L5
LINENUMBER 29 L5
LDC 0.0
DSTORE 33
L6
LINENUMBER 30 L6
LDC 0.0
DSTORE 35
L7
LINENUMBER 31 L7
LDC 0
LSTORE 37
L8
LINENUMBER 32 L8
LDC 16.0
DSTORE 39
L9
LINENUMBER 33 L9
LDC 1000
LSTORE 41
L10
LINENUMBER 35 L10
ALOAD 23
INVOKESTATIC org/jruby/ir/runtime/IRRuntimeHelpers.unboxFloat (Lorg/jruby/runtime/builtin/IRubyObject;)D
DSTORE 43
ALOAD 31
INVOKESTATIC org/jruby/ir/runtime/IRRuntimeHelpers.unboxFloat (Lorg/jruby/runtime/builtin/IRubyObject;)D
DSTORE 45
L11
NOP
L12
NOP
ALOAD 0
INVOKEDYNAMIC checkpoint(Lorg/jruby/runtime/ThreadContext;)V [
// handle kind 0x6 : INVOKESTATIC
org/jruby/ir/targets/Bootstrap.checkpointBootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
// arguments: none
]
L13
LINENUMBER 36 L13
LLOAD 37
LDC 1
LADD
LSTORE 47
LLOAD 47
LSTORE 37
L14
LINENUMBER 37 L14
DLOAD 35
DLOAD 33
DMUL
DSTORE 49
DLOAD 49
DSTORE 51
L15
LINENUMBER 38 L15
DLOAD 35
DLOAD 35
DMUL
DSTORE 53
DLOAD 53
DSTORE 55
L16
LINENUMBER 39 L16
DLOAD 33
DLOAD 33
DMUL
DSTORE 57
DLOAD 57
DSTORE 59
L17
LINENUMBER 40 L17
DLOAD 55
DLOAD 57
DSUB
DSTORE 61
DLOAD 61
DLOAD 45
DADD
DSTORE 63
DLOAD 63
DSTORE 35
L18
LINENUMBER 41 L18
DLOAD 51
DLOAD 51
DADD
DSTORE 65
DLOAD 65
DLOAD 43
DADD
DSTORE 67
DLOAD 67
DSTORE 33
L19
LINENUMBER 42 L19
DLOAD 59
DLOAD 55
DADD
DSTORE 69
DLOAD 69
DLOAD 39
INVOKESTATIC org/jruby/ir/runtime/IRRuntimeHelpers.fgt (DD)Z
ISTORE 71
ILOAD 71
IFEQ L20
L21
NOP
ALOAD 0
GETFIELD org/jruby/runtime/ThreadContext.runtime : Lorg/jruby/Ruby;
LLOAD 37
INVOKEVIRTUAL org/jruby/Ruby.newFixnum (J)Lorg/jruby/RubyFixnum;
ASTORE 11
ALOAD 11
ARETURN
L22
NOP
ALOAD 0
INVOKEDYNAMIC nil(Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject; [
// handle kind 0x6 : INVOKESTATIC
org/jruby/ir/targets/Bootstrap.contextValue(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
// arguments: none
]
ARETURN
L20
NOP
L23
LINENUMBER 43 L23
LLOAD 37
LLOAD 41
INVOKESTATIC org/jruby/ir/runtime/IRRuntimeHelpers.igt (JJ)Z
ISTORE 72
ILOAD 72
IFEQ L24
L25
NOP
ALOAD 0
INVOKEDYNAMIC fixnum(Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject; [
// handle kind 0x6 : INVOKESTATIC
org/jruby/ir/targets/FixnumObjectSite.bootstrap(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;J)Ljava/lang/invoke/CallSite;
// arguments:
0
]
ARETURN
L24
NOP
L26
NOP
GOTO L11
L27
NOP
ALOAD 0
INVOKEDYNAMIC nil(Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject; [
// handle kind 0x6 : INVOKESTATIC
org/jruby/ir/targets/Bootstrap.contextValue(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
// arguments: none
]
ARETURN
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment