aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/program/aedifex/runtime.lux
blob: 3c8ec6485e199ce0628bdae9832be5a6ab6f67b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
(.module:
  [library
   [lux {"-" [for]}
    [abstract
     [equivalence {"+" [Equivalence]}]]
    [data
     ["." product]
     ["." text
      ["%" format {"+" [format]}]]
     [collection
      ["." list ("#\." monoid)]]]
    [macro
     ["." template]]
    [world
     ["." file]]]])

(type: .public Runtime
  (Record
   [#program Text
    #parameters (List Text)]))

(def: .public equivalence
  (Equivalence Runtime)
  (product.equivalence
   text.equivalence
   (list.equivalence text.equivalence)))

(template [<name> <command> <parameters>]
  [(def: .public <name>
     Runtime
     [#program <command>
      #parameters (`` (list (~~ (template.spliced <parameters>))))])]

  [default_java "java" ["-jar"]]
  [default_js "node" ["--stack_size=8192"]]
  [default_python "python3" []]
  [default_lua "lua" []]
  ... [default_ruby "RUBY_THREAD_VM_STACK_SIZE=15700000 ruby" []]
  [default_ruby "ruby" []]
  )

(def: .public (for runtime path)
  (-> Runtime file.Path Runtime)
  (revised@ #parameters
            (function (_ parameters)
              (list\composite parameters (list path)))
            runtime))