samth / disassemble Goto Github PK
View Code? Open in Web Editor NEWDisassembler for Racket
License: MIT License
Disassembler for Racket
License: MIT License
Hi! Thank you very much for this library, it is extremely interesting.
One thing I tried out is checking how the emitted assembly changes under gradual typing. But I could not find in the documentation how to work with Typed Racket; I also tried racket/contract
.
My attempt with Typed Racket on the REPL:
$ racket -I typed/racket
Welcome to Racket v7.1.
> (: my-square (-> Number Number))
> (define (my-square x) (* x x))
> (require disassemble)
> (disassemble my-square)
; readline-input:7:0: Type Checker: missing type for identifier;
; consider using `require/typed' to import it
; identifier: disassemble
; from module: disassemble
; in: (disassemble my-square)
; [,bt for context]
> (require/typed disassemble [disassemble (-> Any Any)])
> (disassemble my-square)
; disassemble: contract violation
; expected: non-primitive procedure
; given: #<procedure:my-square>
; [,bt for context]
> ^D
And here is my attempt to use disassemble
on an untyped Racket procedure that has a contract:
$ racket
Welcome to Racket v7.1.
> (require disassemble)
> (define (my-square x)
(* x x))
> (disassemble my-square)
;; ... elided: it works ...
> (define/contract (real-square x)
(-> real? real?)
(* x x))
> (disassemble real-square)
; disassemble: contract violation
; expected: non-primitive procedure
; given: #<procedure:real-square>
; [,bt for context]
> ^D
Is this possible, but undocumented? Or is it just not doable?
Thanks again!
With racket 7.0, disassemble for fib:
(define (fib n)
(cond
[(<= n 1) n]
[else (fib (+ n 1) (+ n 2))]))
returns the following partial assembly code:
2f: 48bed749bc2e567f0000 (mov rsi #x7f562ebc49d7)
39: 488975d8 (mov (mem64+ rbp #x-28) rsi)
3d: 48bee049bc2e567f0000 (mov rsi #x7f562ebc49e0)
With nasm it shows up as:
0000002F 48BE574EBC2E567F mov rsi,0x7f562ebc4e57
-0000
00000039 488975D8 mov [rbp-0x28],rsi
0000003D 48BE604EBC2E567F mov rsi,0x7f562ebc4e60
-0000
I am confused about what those -0000
are and they look like some parsing bug of sorts.
$ racket
Welcome to Racket v8.5.0.7 [cs].
> (require disassemble my-lib)
> (disassemble a-proc-of-my-lib)
inspector-object: invalid message 'code to object type 'record [,bt for context]
> ,bt
inspector-object: invalid message 'code to object type 'record
context...:
/usr/local/google/home/lorseau/.local/share/racket/snapshot/pkgs/disassemble/disassemble/main.rkt:142:5: body of top-level
/usr/local/google/home/lorseau/.local/share/racket/snapshot/pkgs/disassemble/disassemble/main.rkt:193:0: disassemble
/usr/share/racket-8.5.0.7/pkgs/xrepl-lib/xrepl/xrepl.rkt:1573:0
/usr/share/racket-8.5.0.7/collects/racket/repl.rkt:11:26
>
The same happens whether I remove zos or recompile beforehand.
The basic example of the docs does work though.
Right now, it requires a manual number of isns.
Hi ,
Please add the racket topic to this repo - I think others will be interested and this will help them find it at https://github.com/topics/racket
https://help.github.com/en/articles/classifying-your-repository-with-topics
Kind regards,
Stephen
Example:
-> (require disassemble)
-> (disassemble map)
; error: contract violation
; expected: (or/c string? symbol?)
; given: '#(map
; #<path:/home/asumu/plt/racket-git/racket/collects/racket/private/map.rkt>
; 21 13 588 924 #f)
; argument position: 1st
; [,bt for context]
Use this code instead: https://github.com/weinholt/industria/blob/master/programs/fcdisasm
Definitely refactoring is needed here.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.