+ All Categories
Home > Documents > Mixing Worlds - complang.tuwien.ac.at · { 4 dict begin m2 exch def m1 exch def } aload pop %/3add...

Mixing Worlds - complang.tuwien.ac.at · { 4 dict begin m2 exch def m1 exch def } aload pop %/3add...

Date post: 14-Jun-2020
Category:
Upload: others
View: 11 times
Download: 0 times
Share this document with a friend
8
Mixing Worlds Stackbasierte Sprachen, Gruppe 100 15.01.2010 Wolfgang Bumiller (0725517) Peter Frühwirt (0725673) Martin Perner (0725782)
Transcript
Page 1: Mixing Worlds - complang.tuwien.ac.at · { 4 dict begin m2 exch def m1 exch def } aload pop %/3add { add add add } /def load 0 1 3 {/i exch def 0 1 3 {/j exch def 0 1 3 {/e exch def

Mixing Worlds

Stackbasierte Sprachen, Gruppe 100

15.01.2010

Wolfgang Bumiller (0725517)

Peter Frühwirt (0725673)

Martin Perner (0725782)

Page 2: Mixing Worlds - complang.tuwien.ac.at · { 4 dict begin m2 exch def m1 exch def } aload pop %/3add { add add add } /def load 0 1 3 {/i exch def 0 1 3 {/j exch def 0 1 3 {/e exch def

Architecture

• Postscript 3D rendering engine

• Logic over Forth

• Interprocesscommunication using FIFO

• Distributed system

• Simple artificial intelligence agent

• Integrated sound (mplayer connection)

Page 3: Mixing Worlds - complang.tuwien.ac.at · { 4 dict begin m2 exch def m1 exch def } aload pop %/3add { add add add } /def load 0 1 3 {/i exch def 0 1 3 {/j exch def 0 1 3 {/e exch def

Architecture

user input

Input

gforth pacman.fs

game logic

cat engine.eps

rendering

while(true)

echo „frame“

sleep 0.1

Output mplayer ghostscript

Page 4: Mixing Worlds - complang.tuwien.ac.at · { 4 dict begin m2 exch def m1 exch def } aload pop %/3add { add add add } /def load 0 1 3 {/i exch def 0 1 3 {/j exch def 0 1 3 {/e exch def

Livedemo

Page 5: Mixing Worlds - complang.tuwien.ac.at · { 4 dict begin m2 exch def m1 exch def } aload pop %/3add { add add add } /def load 0 1 3 {/i exch def 0 1 3 {/j exch def 0 1 3 {/e exch def

Language highlights

• Execution tokens (Game logic, Forth)

• Runtime Code Generation (Rendering engine,

Postscript)

• Dynamic scoping (Rendering engine, Postscript)

• Document structuring

Page 6: Mixing Worlds - complang.tuwien.ac.at · { 4 dict begin m2 exch def m1 exch def } aload pop %/3add { add add add } /def load 0 1 3 {/i exch def 0 1 3 {/j exch def 0 1 3 {/e exch def

: set-op-p \ save operation ['] + opxt !;

: set-op-m \ save operation ['] - opxt !;

: exec-op \ executes operation opxt @ execute;

: move ( n1 n2 flag -- n3 n4 ) if getField 10 * ( n1 n4 ) \ center element swap 2 exec-op ( n4 n3 ) \ move element swap endif;

Language highlightsExecution Tokens (Forth)

Page 7: Mixing Worlds - complang.tuwien.ac.at · { 4 dict begin m2 exch def m1 exch def } aload pop %/3add { add add add } /def load 0 1 3 {/i exch def 0 1 3 {/j exch def 0 1 3 {/e exch def

/mat*mat-gen % matrix1 matrix2 -- matrix{ /mat*mat 4 dict begin [ { 4 dict begin m2 exch def m1 exch def } aload pop %/3add { add add add } /def load 0 1 3 { /i exch def 0 1 3 { /j exch def 0 1 3 { /e exch def {m1} 0 get j e 4 mul add /get load {m2} 0 get i 4 mul e add /get load /mul load } for { 3add } 0 get } for } for { 16 array astore end } aload pop ] end cvx bind def} def mat*mat-gen

Language highlightsRuntime Code Generation (Postscript)

Page 8: Mixing Worlds - complang.tuwien.ac.at · { 4 dict begin m2 exch def m1 exch def } aload pop %/3add { add add add } /def load 0 1 3 {/i exch def 0 1 3 {/j exch def 0 1 3 {/e exch def

1 dict begin/3add { add add add } bind def... 3add ... end

Language hickupsRuntime Code Generation (Postscript)

1 dict begin/3add { add add add } def... 3add ... end

... add add add

... add ... add ... add

slow

slow

slow

fast


Recommended