• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

A categorical programming language


Commit MetaInfo

修订版1afe5549ea065f418310c47a71c3b222a30945a2 (tree)
时间2021-11-14 05:52:34
作者Corbin <cds@corb...>
CommiterCorbin

Log Message

cammy-run: Multiple JIT drivers.

更改概述

差异

--- a/cammy-run/main.py
+++ b/cammy-run/main.py
@@ -200,6 +200,10 @@ class Succ(Arrow):
200200 _immutable_ = True
201201 def run(self, x): return N(x.n().int_add(1))
202202
203+pr_driver = JitDriver(name="pr",
204+ greens=["pr"], reds=["n", "rv"],
205+ is_recursive=True)
206+
203207 class PrimRec(Arrow):
204208 _immutable_ = True
205209 def __init__(self, x, f):
@@ -210,6 +214,7 @@ class PrimRec(Arrow):
210214 n = x.n()
211215 rv = self._x.run(T())
212216 while n.tobool():
217+ pr_driver.jit_merge_point(pr=self, n=n, rv=rv)
213218 n = n.int_sub(1)
214219 rv = self._f.run(rv)
215220 return rv
@@ -222,6 +227,14 @@ class Cons(Arrow):
222227 _immutable_ = True
223228 def run(self, x): return Xs([x.first()] + x.second().l())
224229
230+fold_driver = JitDriver(name="fold",
231+ greens=["fold"], reds=["element"],
232+ is_recursive=True)
233+
234+def driveFold(fold, element):
235+ fold_driver.jit_merge_point(fold=fold, element=element)
236+ return fold.run(element)
237+
225238 class Fold(Arrow):
226239 _immutable_ = True
227240 def __init__(self, n, c):
@@ -230,7 +243,7 @@ class Fold(Arrow):
230243 def run(self, x):
231244 rv = self._n.run(T())
232245 for e in x.l():
233- rv = self._c.run(P(e, rv))
246+ rv = driveFold(self._c, P(e, rv))
234247 return rv
235248
236249 class FZero(Arrow):
@@ -465,11 +478,12 @@ class Window(object):
465478 c2 = scale(self._corners[1], self._corners[3], dh + ih * h)
466479 return c1, c2
467480
468-driver = JitDriver(greens=["program"],
469- reds=["x", "y"])
481+sample_driver = JitDriver(name="sample",
482+ greens=["program"], reds=["x", "y"],
483+ is_recursive=True)
470484
471485 def sample(program, x, y):
472- driver.jit_merge_point(program=program, x=x, y=y)
486+ sample_driver.jit_merge_point(program=program, x=x, y=y)
473487 rgb = program.run(P(F(x), F(y)))
474488 r = rgb.first().f()
475489 g = rgb.second().first().f()
@@ -508,7 +522,7 @@ def drawPNG(program, filename, corners, width, height):
508522
509523
510524 def main(argv):
511- set_param(driver, "trace_limit", 50001)
525+ set_param(None, "trace_limit", 50001)
512526
513527 prog = argv[1]
514528 window = [string_to_float(s) for s in split(argv[2])]