FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf ·...
Transcript of FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf ·...
![Page 1: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/1.jpg)
FunTAL: Reasonably Mixing a Functional
Language with Assembly
Daniel Patterson, Jamie Perconti, Christos Dimoulas, Amal Ahmed
Irene Yoon
![Page 2: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/2.jpg)
Mixed Language Programs
High-level LanguageHigh-level Language
Low-level Language
![Page 3: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/3.jpg)
Mixed Language Programs
High-level Language
Inline assembly
![Page 4: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/4.jpg)
Mixed Language Programs
High-level Language
Inline assembly
+ hardware access
+ fine-tune performance
![Page 5: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/5.jpg)
Mixed Language Programs
• no safety guarantees
• low-level code can
• alter control flow
• mutate inaccessible values
• introduce security vulnerabilities
![Page 6: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/6.jpg)
Mixed Language Programs
High-level Language
Assembly
JITThis portion can be
compiled!
![Page 7: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/7.jpg)
Mixed Language Programs
High-level Language
Assembly
JITThis portion can be
compiled!
Verification of correctness?
![Page 8: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/8.jpg)
Mixed Language Programs
High-level Language
Assembly
Verification of correctness?
=
Need to prove contextual equivalence
![Page 9: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/9.jpg)
Goals
• Safely mix high-level and low-level code
• Prove contextual equivalence of mixed programs
![Page 10: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/10.jpg)
FunTAL
• Multi-language
• Embeds assembly in typed functional language
• Embeds typed functional language in assembly
![Page 11: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/11.jpg)
FunTAL Goals
• Appropriate granularity for comparison
• Keep low-level language low and high-level language high
• Mix high-level and low-level language
• Prove (contextual) equivalence
![Page 12: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/12.jpg)
Fun + TAL
![Page 13: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/13.jpg)
Fun : Functional Language
• Simply Typed Lambda Calculus
• (iso-) recursive types
![Page 14: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/14.jpg)
Fun + Assembly
![Page 15: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/15.jpg)
Assembly
![Page 16: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/16.jpg)
Assembly
• Inherently non-compositional
![Page 17: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/17.jpg)
Assembly
• Inherently non-compositional
direct jump
![Page 18: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/18.jpg)
Assembly
• Inherently non-compositional
_______ _______ _______ _______ _______ _______
call stack
direct jump
![Page 19: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/19.jpg)
Mixing Fun
direct jump
_______ _______ _______ _______ _______ _______
call stack
Fun
compositional
![Page 20: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/20.jpg)
Mixing Fun
Fun
compositional
• Need to constrain non-compositional behavior
![Page 21: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/21.jpg)
Fun + (compositional) TAL
![Page 22: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/22.jpg)
TAL : Typed Assembly Language
• Types at assembly level
• Stack-based TAL = STAL
[Morrisett, Crary, Glew, Walker ’98]
![Page 23: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/23.jpg)
TAL : Typed Assembly Language
• Types at assembly level
• Stack-based TAL = STAL
[Morrisett, Crary, Glew, Walker ’98]
HeapTyping
![Page 24: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/24.jpg)
TAL : Typed Assembly Language
• Types at assembly level
• Stack-based TAL = STAL
[Morrisett, Crary, Glew, Walker ’98]
HeapTyping
Type Env
![Page 25: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/25.jpg)
TAL : Typed Assembly Language
• Types at assembly level
• Stack-based TAL = STAL
[Morrisett, Crary, Glew, Walker ’98]
HeapTyping
Type EnvRegister File
Typing
![Page 26: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/26.jpg)
TAL : Typed Assembly Language
• Types at assembly level
• Stack-based TAL = STAL
[Morrisett, Crary, Glew, Walker ’98]
HeapTyping
Type EnvRegister File
Typing
Stack Typing
![Page 27: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/27.jpg)
TAL : Typed Assembly Language
• Types at assembly level
• Stack-based TAL = STAL
[Morrisett, Crary, Glew, Walker ’98]
HeapTyping
Type EnvRegister File
Typing
Stack Typing
instr; … ; jmp l
![Page 28: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/28.jpg)
![Page 29: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/29.jpg)
![Page 30: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/30.jpg)
Fun + (compositional) TAL
![Page 31: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/31.jpg)
![Page 32: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/32.jpg)
type parameter register stack
typing preconditions
![Page 33: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/33.jpg)
type parameter register stack
typing preconditions
![Page 34: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/34.jpg)
type parameter register stack
typing preconditions
![Page 35: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/35.jpg)
type parameter register stack
typing preconditions
![Page 36: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/36.jpg)
TAL in Fun
Fun
TAL
![Page 37: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/37.jpg)
_________________ _________________
Granularity
![Page 38: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/38.jpg)
_________________ _________________
assembly components
![Page 39: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/39.jpg)
_________________ _________________
assembly components
![Page 40: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/40.jpg)
_________________ _________________
instr. sequence
(basic block)
localheap
fragment
assembly components
![Page 41: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/41.jpg)
TAL Components
• Represent one or more basic blocks
• Local heap fragment - locations to code blocks used in jumps
• Similar granularity to expressions in Fun
instr. sequence
localheap
fragment
![Page 42: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/42.jpg)
Fun + (compositional, TAL component-based)
![Page 43: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/43.jpg)
FunTAL Goals
• Appropriate granularity for comparison
• Keep low-level language low and high-level language high
• Mix high-level and low-level language
• Prove (contextual) equivalence
![Page 44: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/44.jpg)
_________________ _________________
![Page 45: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/45.jpg)
_________________ _________________ Input Output
![Page 46: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/46.jpg)
type parameter register stack
typing preconditions
![Page 47: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/47.jpg)
![Page 48: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/48.jpg)
return addr l l
![Page 49: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/49.jpg)
Return Marker
• return marker specifies register/stack position where return continuation is stored
![Page 50: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/50.jpg)
Result Type
• Must provide components with return continuations
• Called f/ assembly jump: jump to next instr.
• Called f/ high level code: contain halt
![Page 51: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/51.jpg)
End / Halt
![Page 52: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/52.jpg)
Polymorphic return marker
![Page 53: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/53.jpg)
Polymorphic return markerI know
the future!!!
![Page 54: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/54.jpg)
Polymorphic return marker
caller instantiates where control flow should go next
![Page 55: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/55.jpg)
FunTAL Goals
• Appropriate granularity for comparison
• Keep low-level language low and high-level language high
• Mix high-level and low-level language
• Prove (contextual) equivalence
![Page 56: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/56.jpg)
jmp
call
bz
![Page 57: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/57.jpg)
![Page 58: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/58.jpg)
Component Based Jumps
• intra-component jump jmp
• inter-component jump ret
• inter-component jump call
![Page 59: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/59.jpg)
jmp (intra-component)
“current component will terminate by jumping to a same TAL component”
=> same return marker
![Page 60: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/60.jpg)
jmp (intra-component)
“current component will terminate by jumping to a same TAL component”
=> same return marker
![Page 61: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/61.jpg)
ret (intra-component)
“returning from a component(jumping back to different component)”
![Page 62: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/62.jpg)
ret (intra-component)
“returning from a component (jumping back to different component)”
=> no restrictions on return marker
![Page 63: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/63.jpg)
call (inter-component)
“current component will terminate by halting”
![Page 64: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/64.jpg)
call (inter-component)
• STAL stack-tail polymorphism : “callee-saved” stack tail
“current component will terminate by halting”
![Page 65: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/65.jpg)
“current component will terminate by jumping to another TAL component”
call (inter-component)
![Page 66: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/66.jpg)
![Page 67: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/67.jpg)
![Page 68: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/68.jpg)
![Page 69: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/69.jpg)
![Page 70: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/70.jpg)
![Page 71: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/71.jpg)
![Page 72: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/72.jpg)
![Page 73: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/73.jpg)
![Page 74: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/74.jpg)
![Page 75: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/75.jpg)
![Page 76: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/76.jpg)
![Page 77: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/77.jpg)
![Page 78: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/78.jpg)
![Page 79: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/79.jpg)
![Page 80: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/80.jpg)
![Page 81: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/81.jpg)
FunTAL Goals
• Appropriate granularity for comparison
• Keep low-level language low and high-level language high
• Mix high-level and low-level language
• Prove (contextual) equivalence
![Page 82: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/82.jpg)
def fn(x): _________________ _________________
![Page 83: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/83.jpg)
def fn(x): _________________ _________________
need multi-language!
![Page 84: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/84.jpg)
Multi-Language• Syntax of both languages combined
• Boundary terms added to mediate interactions
•
[Matthews-Findler `07]
Fun TAL (e) TAL Fun (e)
![Page 85: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/85.jpg)
Multi-Language• Syntax of both languages combined
• Boundary terms added to mediate interactions
•
[Matthews-Findler `07]
Fun TAL (e) TAL Fun (e)
![Page 86: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/86.jpg)
Multi-Language• Syntax of both languages combined
• Boundary terms added to mediate interactions
•
[Matthews-Findler `07]
translation meta-functionreduce
Fun TAL (e) TAL Fun (e)
![Page 87: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/87.jpg)
Multi-Language FunTAL
![Page 88: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/88.jpg)
Multi-Language FunTAL
![Page 89: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/89.jpg)
Multi-Language FunTAL
![Page 90: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/90.jpg)
Multi-Language FunTAL
![Page 91: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/91.jpg)
Fun in TAL
def fn(x): _________________ _________________
![Page 92: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/92.jpg)
Import (Fun in TAL)
![Page 93: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/93.jpg)
FunTAL Goals
• Appropriate granularity for comparison
• Keep low-level language low and high-level language high
• Mix high-level and low-level language
• Prove (contextual) equivalence
![Page 94: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/94.jpg)
Mixed Language Programs
High-level Language
Assembly
Verification of correctness?
=
Need to prove contextual equivalence
![Page 95: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/95.jpg)
Logical Relation for Multi-Language
https://dbp.io/talks/2017/funtal-pldi.pdf
![Page 96: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/96.jpg)
Equivalence in Fun
“related inputs result in related outputs”
https://dbp.io/talks/2017/funtal-pldi.pdf
![Page 97: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/97.jpg)
Equivalence in TAL
https://dbp.io/talks/2017/funtal-pldi.pdf
![Page 99: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/99.jpg)
Future Work
• Verification of JIT transformations
• Compositional compiler correctness
• Return markers for slightly higher-level languages
![Page 100: FunTAL: Reasonably Mixing a Functional Language with Assemblyeuisuny/talks/funtal.pdf · 2020-01-04 · TAL : Typed Assembly Language • Types at assembly level • Stack-based TAL](https://reader034.fdocuments.us/reader034/viewer/2022043017/5f39a367f1c8531a6158a75d/html5/thumbnails/100.jpg)
Goals
• Safely mix high-level and low-level code
• Prove contextual equivalence of mixed programs