4 ms·
The reason to bet on Julia is disassembling a function? This is a standard feature in Common Lisp (ANSI standardized in 1994) CL-USER> (defun f(x) (* x x))
by avodonosov 13y ago
The reason to bet on Julia is disassembling a function?
This is a standard feature in Common Lisp (ANSI standardized in 1994)
CL-USER> (defun f(x) (* x x))
F
CL-USER> (disassemble 'f)
L0
(leaq (@ (:^ L0) (% rip)) (% fn)) ; [0]
(cmpl ($ 8) (% nargs)) ; [7]
(jne L33) ; [10]
(pushq (% rbp)) ; [12]
(movq (% rsp) (% rbp)) ; [13]
(pushq (% arg_z)) ; [16]
(movq (% arg_z) (% arg_y)) ; [17]
(leaveq) ; [20]
(jmpq (@ .SPBUILTIN-TIMES)) ; [21]
L33
(uuo-error-wrong-number-of-args) ; [33]
- kisielk 13y agoThis is also possible to a degree in Python, though you only get the bytecode: >>> def f(x): ... return x * x ... >>> import dis >>> print dis.dis(f) 2 0 LOAD_FAST 0 (x) 3 LOAD_FAST 0 (x) 6 BINARY_MULTIPLY 7 RETURN_VALUE
- sitkack 13y agoAnd the bytecode is just calling polymorphic methods. All the real work is done in the object implementations of type(x). I was very bummed years ago to realize how shallow the bytecode representation in Python is. There is no sub-terpreter, just C.
- steveklabnik 13y agoYou can get the bytecode in Ruby too: http://www.ruby-doc.org/core-2.1.0/RubyVM/InstructionSequence.html http://www.ruby-doc.org/core-2.1.0/RubyVM/InstructionSequenc...
- blt 13y ago(jmpq (@ .SPBUILTIN-TIMES)) So, this is going to be really slow inside a loop. Would the compiler be able to optimize it into a single multiply instruction if it could prove that the input had to contain integers?
- draven 13y agoCL-USER> (defun f (x) (declare (fixnum x) (optimize speed (safety 0) (debug 0))) (the fixnum (* x x))) CL-USER> (disassemble #'f) ; disassembly for F ; Size: 19 bytes ; 0337CE2F: 488BCA MOV RCX, RDX ; no-arg-parsing entry point ; 32: 48D1F9 SAR RCX, 1 ; 35: 480FAFCA IMUL RCX, RDX ; 39: 488BD1 MOV RDX, RCX ; 3C: 488BE5 MOV RSP, RBP ; 3F: F8 CLC ; 40: 5D POP RBP ; 41: C3 RET NIL