avodonosov 2 days ago
| link |
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]reply
kisielk 2 days ago
| link |
This 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_VALUEreply
sitkack 2 days ago
| link |
And 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.
reply
steveklabnik 2 days ago
| link |
You can get the bytecode in Ruby too: http://www.ruby-doc.org/core-2.1.0/RubyVM/InstructionSequenc...
reply