A lot more languages
This commit is contained in:
parent
1ae424f328
commit
c34ccf26e8
|
@ -4,16 +4,70 @@ export interface LangConfig {
|
||||||
name: string;
|
name: string;
|
||||||
monacoLang: string;
|
monacoLang: string;
|
||||||
repl?: string;
|
repl?: string;
|
||||||
main?: string;
|
main: string;
|
||||||
prefix?: string;
|
prefix?: string;
|
||||||
suffix?: string;
|
suffix?: string;
|
||||||
compile?: string;
|
compile?: string;
|
||||||
run?: string;
|
run: string;
|
||||||
template?: string;
|
template: string;
|
||||||
hacks?: "ghci-config"[];
|
hacks?: "ghci-config"[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export const langs: { [key: string]: LangConfig } = {
|
export const langs: { [key: string]: LangConfig } = {
|
||||||
|
ada: {
|
||||||
|
name: "Ada",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "main.adb",
|
||||||
|
compile: "x86_64-linux-gnu-gnatmake-9 main.adb",
|
||||||
|
run: "./main",
|
||||||
|
template: `with Ada.Text_IO;
|
||||||
|
|
||||||
|
procedure Main is
|
||||||
|
begin
|
||||||
|
Ada.Text_IO.Put_Line("Hello, world!");
|
||||||
|
end Main;
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
algol: {
|
||||||
|
name: "ALGOL 68",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "main.alg",
|
||||||
|
run: "a68g main.alg",
|
||||||
|
template: `print(("Hello, world!",new line))
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
arm: {
|
||||||
|
name: "ARM",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "main.S",
|
||||||
|
compile: "arm-linux-gnueabihf-gcc main.S -o main -static",
|
||||||
|
run: "qemu-arm-static main",
|
||||||
|
template: ` .text
|
||||||
|
.globl main
|
||||||
|
main:
|
||||||
|
mov r7, #4
|
||||||
|
mov r0, #1
|
||||||
|
ldr r1, =message
|
||||||
|
mov r2, #14
|
||||||
|
swi 0
|
||||||
|
mov r7, #1
|
||||||
|
mov r0, #0
|
||||||
|
swi 0
|
||||||
|
.data
|
||||||
|
message:
|
||||||
|
.string "Hello, world!\\n"
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
ats: {
|
||||||
|
name: "ATS",
|
||||||
|
monacoLang: "postiats",
|
||||||
|
main: "main.dats",
|
||||||
|
compile: "patscc main.dats -o main",
|
||||||
|
run: "./main",
|
||||||
|
template: `val _ = print ("Hello, world!\\n")
|
||||||
|
implement main0 () = ()
|
||||||
|
`,
|
||||||
|
},
|
||||||
bash: {
|
bash: {
|
||||||
name: "Bash",
|
name: "Bash",
|
||||||
monacoLang: "shell",
|
monacoLang: "shell",
|
||||||
|
@ -30,6 +84,14 @@ export const langs: { [key: string]: LangConfig } = {
|
||||||
main: "main.bas",
|
main: "main.bas",
|
||||||
run: "bwbasic main.bas",
|
run: "bwbasic main.bas",
|
||||||
template: `PRINT "Hello, world!"
|
template: `PRINT "Hello, world!"
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
befunge: {
|
||||||
|
name: "Befunge",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "main.be",
|
||||||
|
run: "befunge-repl main.be",
|
||||||
|
template: `64+"!dlrow ,olleH">:#,_@
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
brainf: {
|
brainf: {
|
||||||
|
@ -80,6 +142,24 @@ int main() {
|
||||||
printf("Hello, world!\\n");
|
printf("Hello, world!\\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
cmd: {
|
||||||
|
name: "Cmd",
|
||||||
|
monacoLang: "bat",
|
||||||
|
repl: "wine cmd",
|
||||||
|
main: "main.bat",
|
||||||
|
run: `pkill wineserver64; while pgrep wineserver64 >/dev/null; do sleep 0.05; done; wine cmd /k main.bat`,
|
||||||
|
template: `echo "Hello, world!"
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
commonlisp: {
|
||||||
|
name: "Common Lisp",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
repl: "rlwrap sbcl",
|
||||||
|
main: "main.lisp",
|
||||||
|
run: "rlwrap sbcl --userinit main.lisp",
|
||||||
|
template: `(format t "Hello, world!")
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
cpp: {
|
cpp: {
|
||||||
|
@ -124,6 +204,28 @@ int main() {
|
||||||
main: "main.clj",
|
main: "main.clj",
|
||||||
run: "clojure -i main.clj -r",
|
run: "clojure -i main.clj -r",
|
||||||
template: `(println "Hello, world!")
|
template: `(println "Hello, world!")
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
clojurescript: {
|
||||||
|
name: "ClojureScript",
|
||||||
|
monacoLang: "clojure",
|
||||||
|
repl: "lumo -r",
|
||||||
|
main: "main.cljs",
|
||||||
|
run: "lumo -i main.cljs -r",
|
||||||
|
template: `(println "Hello, world!")
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
cobol: {
|
||||||
|
name: "COBOL",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "main.cbl",
|
||||||
|
compile: "cobc -free -x main.cbl -o main",
|
||||||
|
run: "./main",
|
||||||
|
template: `IDENTIFICATION DIVISION.
|
||||||
|
PROGRAM-ID. MAIN.
|
||||||
|
PROCEDURE DIVISION.
|
||||||
|
DISPLAY "Hello, world!".
|
||||||
|
STOP RUN.
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
coffeescript: {
|
coffeescript: {
|
||||||
|
@ -137,6 +239,19 @@ eval.apply(this, [require("fs").readFileSync("main.js", {encoding: "utf-8"})])
|
||||||
require("/usr/lib/node_modules/coffeescript/repl").start()
|
require("/usr/lib/node_modules/coffeescript/repl").start()
|
||||||
'`,
|
'`,
|
||||||
template: `console.log "Hello, world!"
|
template: `console.log "Hello, world!"
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
d: {
|
||||||
|
name: "D",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "main.d",
|
||||||
|
compile: "dmd main.d",
|
||||||
|
run: "./main",
|
||||||
|
template: `import std.stdio;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
writeln("Hello, world!");
|
||||||
|
}
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
dart: {
|
dart: {
|
||||||
|
@ -156,6 +271,18 @@ require("/usr/lib/node_modules/coffeescript/repl").start()
|
||||||
main: "main.exs",
|
main: "main.exs",
|
||||||
run: "iex main.exs",
|
run: "iex main.exs",
|
||||||
template: `IO.puts("Hello, world!")
|
template: `IO.puts("Hello, world!")
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
elm: {
|
||||||
|
name: "Elm",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
repl: "elm repl",
|
||||||
|
main: "Main.elm",
|
||||||
|
run: "cp /opt/elm/elm.json elm.json && run-elm Main.elm; elm repl",
|
||||||
|
template: `module Main exposing (..)
|
||||||
|
|
||||||
|
output : String
|
||||||
|
output = "Hello, world!"
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
elvish: {
|
elvish: {
|
||||||
|
@ -187,7 +314,7 @@ require("/usr/lib/node_modules/coffeescript/repl").start()
|
||||||
-export([main/0]).
|
-export([main/0]).
|
||||||
|
|
||||||
main() ->
|
main() ->
|
||||||
io:fwrite("Hello, world!\n").
|
io:fwrite("Hello, world!\\n").
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
fish: {
|
fish: {
|
||||||
|
@ -256,6 +383,31 @@ main = putStrLn "Hello, world!"
|
||||||
`,
|
`,
|
||||||
hacks: ["ghci-config"],
|
hacks: ["ghci-config"],
|
||||||
},
|
},
|
||||||
|
intercal: {
|
||||||
|
name: "INTERCAL",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "main.i",
|
||||||
|
compile: "ick main.i",
|
||||||
|
run: "./main",
|
||||||
|
template: `DO ,1 <- #14
|
||||||
|
PLEASE DO ,1 SUB #1 <- #238
|
||||||
|
DO ,1 SUB #2 <- #108
|
||||||
|
DO ,1 SUB #3 <- #112
|
||||||
|
DO ,1 SUB #4 <- #0
|
||||||
|
DO ,1 SUB #5 <- #64
|
||||||
|
DO ,1 SUB #6 <- #194
|
||||||
|
DO ,1 SUB #7 <- #48
|
||||||
|
PLEASE DO ,1 SUB #8 <- #22
|
||||||
|
DO ,1 SUB #9 <- #248
|
||||||
|
DO ,1 SUB #10 <- #168
|
||||||
|
DO ,1 SUB #11 <- #24
|
||||||
|
DO ,1 SUB #12 <- #16
|
||||||
|
PLEASE DO ,1 SUB #13 <- #162
|
||||||
|
DO ,1 SUB #14 <- #52
|
||||||
|
PLEASE READ OUT ,1
|
||||||
|
PLEASE GIVE UP
|
||||||
|
`,
|
||||||
|
},
|
||||||
java: {
|
java: {
|
||||||
name: "Java",
|
name: "Java",
|
||||||
monacoLang: "java",
|
monacoLang: "java",
|
||||||
|
@ -276,6 +428,18 @@ main = putStrLn "Hello, world!"
|
||||||
main: "main.jl",
|
main: "main.jl",
|
||||||
run: "julia -L main.jl",
|
run: "julia -L main.jl",
|
||||||
template: `println("Hello, world!")
|
template: `println("Hello, world!")
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
kalyn: {
|
||||||
|
name: "Kalyn",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "src-kalyn/Main.kalyn",
|
||||||
|
compile: "kalyn",
|
||||||
|
run: "out-kalyn/Main",
|
||||||
|
template: `(import "/opt/kalyn/Stdlib.kalyn")
|
||||||
|
|
||||||
|
(public def main (IO Empty)
|
||||||
|
(print "Hello, world!\\n"))
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
kotlin: {
|
kotlin: {
|
||||||
|
@ -313,6 +477,47 @@ KTHXBYE
|
||||||
main: "main.lua",
|
main: "main.lua",
|
||||||
run: "lua -i main.lua",
|
run: "lua -i main.lua",
|
||||||
template: `print("Hello, world!")
|
template: `print("Hello, world!")
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
malbolge: {
|
||||||
|
name: "Malbolge",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "main.mb",
|
||||||
|
run: "malbolge main.mb",
|
||||||
|
template:
|
||||||
|
" (=<`#9]~6ZY32Vx/4Rs+0No-&Jk)\"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc\n",
|
||||||
|
},
|
||||||
|
mips: {
|
||||||
|
name: "MIPS",
|
||||||
|
monacoLang: "mips",
|
||||||
|
main: "main.S",
|
||||||
|
compile: "mips64-linux-gnuabi64-gcc main.S -o main -static",
|
||||||
|
run: "qemu-mips64-static main",
|
||||||
|
template: ` .text
|
||||||
|
.global main
|
||||||
|
main:
|
||||||
|
li $v0, 5001
|
||||||
|
li $a0, 1
|
||||||
|
dla $a1, message
|
||||||
|
li $a2, 14
|
||||||
|
syscall
|
||||||
|
li $v0, 5058
|
||||||
|
li $a0, 0
|
||||||
|
syscall
|
||||||
|
.data
|
||||||
|
message:
|
||||||
|
.string "Hello, world!\\n"
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
mumps: {
|
||||||
|
name: "MUMPS",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "main.m",
|
||||||
|
run:
|
||||||
|
"gtm_dist=/usr/lib/x86_64-linux-gnu/fis-gtm/V6.3-007_x86_64 /usr/lib/x86_64-linux-gnu/fis-gtm/V6.3-007_x86_64/utf8/mumps -r main main.m",
|
||||||
|
template: `main()
|
||||||
|
write "Hello, world!",!
|
||||||
|
quit
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
nim: {
|
nim: {
|
||||||
|
@ -351,6 +556,27 @@ int main() {
|
||||||
[pool drain];
|
[pool drain];
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
octave: {
|
||||||
|
name: "Octave",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
repl: "octave",
|
||||||
|
main: "main.m",
|
||||||
|
run: "octave --persist main.m",
|
||||||
|
template: `disp("Hello, world!")
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
pascal: {
|
||||||
|
name: "Pascal",
|
||||||
|
monacoLang: "pascal",
|
||||||
|
main: "main.pas",
|
||||||
|
compile: "fpc main.pas",
|
||||||
|
run: "./main",
|
||||||
|
template: `program Main;
|
||||||
|
begin
|
||||||
|
writeln('Hello, world!');
|
||||||
|
end.
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
perl: {
|
perl: {
|
||||||
|
@ -380,6 +606,18 @@ echo "Hello, world!\\n";
|
||||||
main: "main.ps1",
|
main: "main.ps1",
|
||||||
run: "SHELL=/usr/bin/pwsh pwsh -NoExit main.ps1",
|
run: "SHELL=/usr/bin/pwsh pwsh -NoExit main.ps1",
|
||||||
template: `Write-Host "Hello, world!"
|
template: `Write-Host "Hello, world!"
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
prolog: {
|
||||||
|
name: "Prolog",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
repl: "prolog",
|
||||||
|
main: "main.pl",
|
||||||
|
run: "prolog main.pl",
|
||||||
|
template: `:- initialization main.
|
||||||
|
|
||||||
|
main :-
|
||||||
|
write("Hello, world!"), nl.
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
python: {
|
python: {
|
||||||
|
@ -398,6 +636,16 @@ echo "Hello, world!\\n";
|
||||||
main: ".Rprofile",
|
main: ".Rprofile",
|
||||||
run: "R --no-save",
|
run: "R --no-save",
|
||||||
template: `print("Hello, world!")
|
template: `print("Hello, world!")
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
racket: {
|
||||||
|
name: "Racket",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
repl: "racket",
|
||||||
|
main: "main.rkt",
|
||||||
|
run: `racket -i -e '(enter! "main.rkt") (display "[ type (enter! \\"main.rkt\\") to access local variables ]\\n")'`,
|
||||||
|
template: `#lang racket/base
|
||||||
|
(display "Hello, world!\\n")
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
reasonml: {
|
reasonml: {
|
||||||
|
@ -407,6 +655,28 @@ echo "Hello, world!\\n";
|
||||||
compile: "bsc main.re > main.js",
|
compile: "bsc main.re > main.js",
|
||||||
run: "NODE_PATH=/usr/lib/node_modules node main.js",
|
run: "NODE_PATH=/usr/lib/node_modules node main.js",
|
||||||
template: `print_string("Hello, world!\\n")
|
template: `print_string("Hello, world!\\n")
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
riscv: {
|
||||||
|
name: "RISC-V",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "main.S",
|
||||||
|
compile: "riscv64-linux-gnu-gcc main.S -o main -static",
|
||||||
|
run: "qemu-riscv64-static main",
|
||||||
|
template: ` .text
|
||||||
|
.global main
|
||||||
|
main:
|
||||||
|
addi a7, x0, 64
|
||||||
|
addi a0, x0, 1
|
||||||
|
la a1, message
|
||||||
|
addi a2, x0, 14
|
||||||
|
ecall
|
||||||
|
addi a7, x0, 93
|
||||||
|
addi a0, x0, 0
|
||||||
|
ecall
|
||||||
|
.data
|
||||||
|
message:
|
||||||
|
.string "Hello, world!\\n"
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
ruby: {
|
ruby: {
|
||||||
|
@ -463,6 +733,123 @@ binding_irb.run(IRB.conf)
|
||||||
main: ".profile",
|
main: ".profile",
|
||||||
run: "SHELL=/usr/bin/sh HOME=. posh -l",
|
run: "SHELL=/usr/bin/sh HOME=. posh -l",
|
||||||
template: `echo "Hello, world!"
|
template: `echo "Hello, world!"
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
shakespeare: {
|
||||||
|
name: "Shakespeare",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
repl: "shakespeare console",
|
||||||
|
main: "main.spl",
|
||||||
|
suffix: "\n[A pause]",
|
||||||
|
run: "shakespeare debug main.spl",
|
||||||
|
template: `The Infamous Hello World Program.
|
||||||
|
|
||||||
|
Romeo, a young man with a remarkable patience.
|
||||||
|
Juliet, a likewise young woman of remarkable grace.
|
||||||
|
Ophelia, a remarkable woman much in dispute with Hamlet.
|
||||||
|
Hamlet, the flatterer of Andersen Insulting A/S.
|
||||||
|
|
||||||
|
|
||||||
|
Act I: Hamlet's insults and flattery.
|
||||||
|
|
||||||
|
Scene I: The insulting of Romeo.
|
||||||
|
|
||||||
|
[Enter Hamlet and Romeo]
|
||||||
|
|
||||||
|
Hamlet:
|
||||||
|
You lying stupid fatherless big smelly half-witted coward!
|
||||||
|
You are as stupid as the difference between a handsome rich brave
|
||||||
|
hero and thyself! Speak your mind!
|
||||||
|
|
||||||
|
You are as brave as the sum of your fat little stuffed misused dusty
|
||||||
|
old rotten codpiece and a beautiful fair warm peaceful sunny summer's
|
||||||
|
day. You are as healthy as the difference between the sum of the
|
||||||
|
sweetest reddest rose and my father and yourself! Speak your mind!
|
||||||
|
|
||||||
|
You are as cowardly as the sum of yourself and the difference
|
||||||
|
between a big mighty proud kingdom and a horse. Speak your mind.
|
||||||
|
|
||||||
|
Speak your mind!
|
||||||
|
|
||||||
|
[Exit Romeo]
|
||||||
|
|
||||||
|
Scene II: The praising of Juliet.
|
||||||
|
|
||||||
|
[Enter Juliet]
|
||||||
|
|
||||||
|
Hamlet:
|
||||||
|
Thou art as sweet as the sum of the sum of Romeo and his horse and his
|
||||||
|
black cat! Speak thy mind!
|
||||||
|
|
||||||
|
[Exit Juliet]
|
||||||
|
|
||||||
|
Scene III: The praising of Ophelia.
|
||||||
|
|
||||||
|
[Enter Ophelia]
|
||||||
|
|
||||||
|
Hamlet:
|
||||||
|
Thou art as lovely as the product of a large rural town and my amazing
|
||||||
|
bottomless embroidered purse. Speak thy mind!
|
||||||
|
|
||||||
|
Thou art as loving as the product of the bluest clearest sweetest sky
|
||||||
|
and the sum of a squirrel and a white horse. Thou art as beautiful as
|
||||||
|
the difference between Juliet and thyself. Speak thy mind!
|
||||||
|
|
||||||
|
[Exeunt Ophelia and Hamlet]
|
||||||
|
|
||||||
|
|
||||||
|
Act II: Behind Hamlet's back.
|
||||||
|
|
||||||
|
Scene I: Romeo and Juliet's conversation.
|
||||||
|
|
||||||
|
[Enter Romeo and Juliet]
|
||||||
|
|
||||||
|
Romeo:
|
||||||
|
Speak your mind. You are as worried as the sum of yourself and the
|
||||||
|
difference between my small smooth hamster and my nose. Speak your
|
||||||
|
mind!
|
||||||
|
|
||||||
|
Juliet:
|
||||||
|
Speak YOUR mind! You are as bad as Hamlet! You are as small as the
|
||||||
|
difference between the square of the difference between my little pony
|
||||||
|
and your big hairy hound and the cube of your sorry little
|
||||||
|
codpiece. Speak your mind!
|
||||||
|
|
||||||
|
[Exit Romeo]
|
||||||
|
|
||||||
|
Scene II: Juliet and Ophelia's conversation.
|
||||||
|
|
||||||
|
[Enter Ophelia]
|
||||||
|
|
||||||
|
Juliet:
|
||||||
|
Thou art as good as the quotient between Romeo and the sum of a small
|
||||||
|
furry animal and a leech. Speak your mind!
|
||||||
|
|
||||||
|
Ophelia:
|
||||||
|
Thou art as disgusting as the quotient between Romeo and twice the
|
||||||
|
difference between a mistletoe and an oozing infected blister! Speak
|
||||||
|
your mind!
|
||||||
|
|
||||||
|
[Exeunt]
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
smalltalk: {
|
||||||
|
name: "Smalltalk",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
repl: "gst",
|
||||||
|
main: "main.st",
|
||||||
|
run: "gst main.st; gst",
|
||||||
|
template: `'Hello, world!' displayNl !
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
snobol: {
|
||||||
|
name: "SNOBOL",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
repl: "snobol4",
|
||||||
|
main: "main.sno",
|
||||||
|
run: "snobol4 main.sno; snobol4",
|
||||||
|
template: ` OUTPUT = "Hello, world!"
|
||||||
|
END
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
sqlite: {
|
sqlite: {
|
||||||
|
@ -472,6 +859,15 @@ binding_irb.run(IRB.conf)
|
||||||
main: "main.sql",
|
main: "main.sql",
|
||||||
run: `sqlite3 -cmd "$(< main.sql)"`,
|
run: `sqlite3 -cmd "$(< main.sql)"`,
|
||||||
template: `SELECT "Hello, world!"
|
template: `SELECT "Hello, world!"
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
standardml: {
|
||||||
|
name: "Standard ML",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
repl: "rlwrap sml",
|
||||||
|
main: "main.sml",
|
||||||
|
run: "rlwrap sml main.sml",
|
||||||
|
template: `print "Hello, world!\\n";
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
swift: {
|
swift: {
|
||||||
|
@ -525,6 +921,57 @@ binding_irb.run(IRB.conf)
|
||||||
main: "main.vim",
|
main: "main.vim",
|
||||||
run: `vim -c "$(< main.vim)"`,
|
run: `vim -c "$(< main.vim)"`,
|
||||||
template: `:echo "Hello, world!"
|
template: `:echo "Hello, world!"
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
visualbasic: {
|
||||||
|
name: "Visual Basic",
|
||||||
|
monacoLang: "vb",
|
||||||
|
main: "main.vb",
|
||||||
|
compile: "vbnc main.vb",
|
||||||
|
run: "mono main.exe",
|
||||||
|
template: `Module Main
|
||||||
|
Sub Main(args As String())
|
||||||
|
Console.WriteLine("Hello, world!")
|
||||||
|
End Sub
|
||||||
|
End Module
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
whitespace: {
|
||||||
|
name: "Whitespace",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "main.ws",
|
||||||
|
run: "whitespace main.ws",
|
||||||
|
template: `Hello, world! \t \t \n\t\n \t\t \t \t\n\t\n \t\t \t\t \n\t\n \t\t \t\t \n\t\n \t\t \t\t\t\t\n\t\n \t \t\t \n\t\n \t \n\t\n \t\t\t \t\t\t\n\t\n \t\t \t\t\t\t\n\t\n \t\t\t \t \n\t\n \t\t \t\t \n\t\n \t\t \t \n\t\n \n\n\n`,
|
||||||
|
},
|
||||||
|
wolframlanguage: {
|
||||||
|
name: "Wolfram Language",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
repl: "mathics",
|
||||||
|
main: "main.wls",
|
||||||
|
run: "mathics --persist main.wls",
|
||||||
|
template: `Print["Hello, world!"]
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
x86: {
|
||||||
|
name: "x86",
|
||||||
|
monacoLang: "plaintext",
|
||||||
|
main: "main.S",
|
||||||
|
compile: "clang main.S -o main",
|
||||||
|
run: "./main",
|
||||||
|
template: ` .text
|
||||||
|
.globl main
|
||||||
|
main:
|
||||||
|
movq $1, %rax
|
||||||
|
movq $1, %rdi
|
||||||
|
leaq message(%rip), %rsi
|
||||||
|
movq $14, %rdx
|
||||||
|
syscall
|
||||||
|
movq $60, %rax
|
||||||
|
movq $0, %rdi
|
||||||
|
syscall
|
||||||
|
.data
|
||||||
|
message:
|
||||||
|
.string "Hello, world!\\n"
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
zsh: {
|
zsh: {
|
||||||
|
|
|
@ -10,9 +10,11 @@ fi
|
||||||
|
|
||||||
uid="$1"
|
uid="$1"
|
||||||
|
|
||||||
|
dpkg --add-architecture i386
|
||||||
|
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
apt-get update
|
apt-get update
|
||||||
apt-get install -y apt-transport-https curl gnupg lsb-release wget
|
apt-get install -y apt-transport-https curl gnupg lsb-release software-properties-common wget
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
curl -sSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -
|
curl -sSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -
|
||||||
|
@ -35,6 +37,8 @@ deb https://dl.yarnpkg.com/debian/ stable main
|
||||||
deb-src https://deb.nodesource.com/node_14.x focal main
|
deb-src https://deb.nodesource.com/node_14.x focal main
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
add-apt-repository -y -n ppa:deadsnakes/ppa
|
||||||
|
|
||||||
packages="
|
packages="
|
||||||
|
|
||||||
# Needed for project infrastructure
|
# Needed for project infrastructure
|
||||||
|
@ -42,6 +46,7 @@ bash
|
||||||
git
|
git
|
||||||
make
|
make
|
||||||
nodejs
|
nodejs
|
||||||
|
python3-pip
|
||||||
yarn
|
yarn
|
||||||
|
|
||||||
# Handy utilities
|
# Handy utilities
|
||||||
|
@ -49,6 +54,7 @@ bsdmainutils
|
||||||
curl
|
curl
|
||||||
emacs-nox
|
emacs-nox
|
||||||
git
|
git
|
||||||
|
htop
|
||||||
jq
|
jq
|
||||||
lsof
|
lsof
|
||||||
make
|
make
|
||||||
|
@ -59,6 +65,19 @@ tmux
|
||||||
vim
|
vim
|
||||||
wget
|
wget
|
||||||
|
|
||||||
|
# Ada
|
||||||
|
gnat
|
||||||
|
|
||||||
|
# Algol
|
||||||
|
algol68g
|
||||||
|
|
||||||
|
# ARM
|
||||||
|
gcc-arm-linux-gnueabihf
|
||||||
|
qemu-system-static
|
||||||
|
|
||||||
|
# ATS
|
||||||
|
ats2-lang
|
||||||
|
|
||||||
# BASIC
|
# BASIC
|
||||||
bwbasic
|
bwbasic
|
||||||
|
|
||||||
|
@ -77,6 +96,17 @@ mono-mcs
|
||||||
# Clojure
|
# Clojure
|
||||||
clojure
|
clojure
|
||||||
|
|
||||||
|
# Cmd
|
||||||
|
wine
|
||||||
|
wine32
|
||||||
|
|
||||||
|
# COBOL
|
||||||
|
gnucobol
|
||||||
|
|
||||||
|
# Common Lisp
|
||||||
|
rlwrap
|
||||||
|
sbcl
|
||||||
|
|
||||||
# Crystal
|
# Crystal
|
||||||
crystal
|
crystal
|
||||||
|
|
||||||
|
@ -114,12 +144,18 @@ golang
|
||||||
cabal-install
|
cabal-install
|
||||||
ghc
|
ghc
|
||||||
|
|
||||||
|
# INTERCAL
|
||||||
|
intercal
|
||||||
|
|
||||||
# Java
|
# Java
|
||||||
default-jdk
|
default-jdk
|
||||||
|
|
||||||
# Julia
|
# Julia
|
||||||
julia
|
julia
|
||||||
|
|
||||||
|
# Kalyn
|
||||||
|
haskell-stack
|
||||||
|
|
||||||
# Ksh
|
# Ksh
|
||||||
ksh
|
ksh
|
||||||
|
|
||||||
|
@ -129,6 +165,13 @@ cmake
|
||||||
# Lua
|
# Lua
|
||||||
lua5.3
|
lua5.3
|
||||||
|
|
||||||
|
# MIPS
|
||||||
|
gcc-mips64-linux-gnuabi64
|
||||||
|
qemu-system-static
|
||||||
|
|
||||||
|
# MUMPS
|
||||||
|
fis-gtm
|
||||||
|
|
||||||
# Nim
|
# Nim
|
||||||
nim
|
nim
|
||||||
|
|
||||||
|
@ -140,6 +183,12 @@ yarn
|
||||||
gcc
|
gcc
|
||||||
gnustep-devel
|
gnustep-devel
|
||||||
|
|
||||||
|
# Octave
|
||||||
|
octave
|
||||||
|
|
||||||
|
# Pascal
|
||||||
|
fpc
|
||||||
|
|
||||||
# Perl
|
# Perl
|
||||||
perl
|
perl
|
||||||
perlconsole
|
perlconsole
|
||||||
|
@ -147,6 +196,9 @@ perlconsole
|
||||||
# PHP
|
# PHP
|
||||||
php
|
php
|
||||||
|
|
||||||
|
# Prolog
|
||||||
|
swi-prolog
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
python3
|
python3
|
||||||
python3-pip
|
python3-pip
|
||||||
|
@ -155,6 +207,13 @@ python3-venv
|
||||||
# R
|
# R
|
||||||
r-base
|
r-base
|
||||||
|
|
||||||
|
# Racket
|
||||||
|
racket
|
||||||
|
|
||||||
|
# RISC-V
|
||||||
|
gcc-riscv64-linux-gnu
|
||||||
|
qemu-system-static
|
||||||
|
|
||||||
# Ruby
|
# Ruby
|
||||||
ruby
|
ruby
|
||||||
|
|
||||||
|
@ -170,9 +229,19 @@ mit-scheme
|
||||||
# Sh
|
# Sh
|
||||||
posh
|
posh
|
||||||
|
|
||||||
|
# Smalltalk
|
||||||
|
gnu-smalltalk
|
||||||
|
|
||||||
|
# SNOBOL
|
||||||
|
m4
|
||||||
|
|
||||||
# SQLite
|
# SQLite
|
||||||
sqlite
|
sqlite
|
||||||
|
|
||||||
|
# Standard ML
|
||||||
|
rlwrap
|
||||||
|
smlnj
|
||||||
|
|
||||||
# Swift
|
# Swift
|
||||||
libpython2.7
|
libpython2.7
|
||||||
|
|
||||||
|
@ -188,6 +257,15 @@ unlambda
|
||||||
# Vimscript
|
# Vimscript
|
||||||
vim
|
vim
|
||||||
|
|
||||||
|
# Visual Basic
|
||||||
|
mono-vbnc
|
||||||
|
|
||||||
|
# Wolfram Language
|
||||||
|
python3.7
|
||||||
|
|
||||||
|
# x86
|
||||||
|
clang
|
||||||
|
|
||||||
# Zsh
|
# Zsh
|
||||||
zsh
|
zsh
|
||||||
|
|
||||||
|
@ -198,17 +276,37 @@ apt-get update
|
||||||
apt-get install -y $(grep -v "^#" <<< "$packages")
|
apt-get install -y $(grep -v "^#" <<< "$packages")
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
npm config set unsafe-perm true
|
||||||
|
|
||||||
|
# Befunge
|
||||||
|
npm install -g befunge93 prompt-sync
|
||||||
|
|
||||||
|
# ClojureScript
|
||||||
|
npm install -g lumo-cljs
|
||||||
|
|
||||||
# CoffeeScript
|
# CoffeeScript
|
||||||
npm install -g coffeescript
|
npm install -g coffeescript
|
||||||
|
|
||||||
# TypeScript
|
# Elm
|
||||||
npm install -g ts-node typescript
|
npm install -g run-elm
|
||||||
|
|
||||||
|
# Perl
|
||||||
|
cpan Devel::REPL
|
||||||
|
|
||||||
# ReasonML
|
# ReasonML
|
||||||
npm install -g bs-platform
|
npm install -g bs-platform
|
||||||
|
|
||||||
# Perl
|
# Shakespeare
|
||||||
cpan Devel::REPL
|
pip3 install shakespearelang
|
||||||
|
|
||||||
|
# TypeScript
|
||||||
|
npm install -g ts-node typescript
|
||||||
|
|
||||||
|
# Whitespace
|
||||||
|
pip3 install whitespace
|
||||||
|
|
||||||
|
# Wolfram Language
|
||||||
|
python3.7 -m pip install install mathics
|
||||||
|
|
||||||
# Needed for project infrastructure
|
# Needed for project infrastructure
|
||||||
cd /tmp
|
cd /tmp
|
||||||
|
@ -216,6 +314,18 @@ wget -nv https://github.com/watchexec/watchexec/releases/download/1.13.1/watchex
|
||||||
dpkg -i watchexec-*.deb
|
dpkg -i watchexec-*.deb
|
||||||
rm watchexec-*.deb
|
rm watchexec-*.deb
|
||||||
|
|
||||||
|
# D
|
||||||
|
cd /tmp
|
||||||
|
wget -nv http://downloads.dlang.org/releases/2.x/2.092.0/dmd_2.092.0-0_amd64.deb
|
||||||
|
|
||||||
|
# Elm
|
||||||
|
cd /tmp
|
||||||
|
wget -nv https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz
|
||||||
|
gunzip binary-for-linux-64-bit.gz
|
||||||
|
chmod +x binary-for-linux-64-bit
|
||||||
|
mv binary-for-linux-64-bit /usr/bin/elm
|
||||||
|
rm binary-for-linux-64-bit.gz
|
||||||
|
|
||||||
# Kotlin
|
# Kotlin
|
||||||
cd /tmp
|
cd /tmp
|
||||||
wget -nv https://github.com/JetBrains/kotlin/releases/download/v1.3.72/kotlin-compiler-1.3.72.zip
|
wget -nv https://github.com/JetBrains/kotlin/releases/download/v1.3.72/kotlin-compiler-1.3.72.zip
|
||||||
|
@ -231,6 +341,16 @@ mkdir /opt/powershell
|
||||||
tar -xf powershell-*.tar.gz -C /opt/powershell
|
tar -xf powershell-*.tar.gz -C /opt/powershell
|
||||||
ln -s /opt/powershell/pwsh /usr/bin/pwsh
|
ln -s /opt/powershell/pwsh /usr/bin/pwsh
|
||||||
|
|
||||||
|
# SNOBOL
|
||||||
|
wget -nv ftp://ftp.snobol4.org/snobol/snobol4-2.0.tar.gz
|
||||||
|
tar -xf snobol4-*.tar.gz
|
||||||
|
rm snobol4-*.tar.gz
|
||||||
|
pushd snobol4-*
|
||||||
|
make || true
|
||||||
|
mv snobol4 /usr/bin/snobol4
|
||||||
|
popd
|
||||||
|
rm -rf snobol4-*
|
||||||
|
|
||||||
# Swift
|
# Swift
|
||||||
cd /tmp
|
cd /tmp
|
||||||
wget -nv https://swift.org/builds/swift-5.2.4-release/ubuntu2004/swift-5.2.4-RELEASE/swift-5.2.4-RELEASE-ubuntu20.04.tar.gz
|
wget -nv https://swift.org/builds/swift-5.2.4-release/ubuntu2004/swift-5.2.4-RELEASE/swift-5.2.4-RELEASE-ubuntu20.04.tar.gz
|
||||||
|
@ -239,6 +359,17 @@ tar -xf swift-*.tar.gz -C /opt/swift --strip-components=2
|
||||||
ln -s /opt/swift/bin/swiftc /usr/bin/swiftc
|
ln -s /opt/swift/bin/swiftc /usr/bin/swiftc
|
||||||
rm swift-*.tar.gz
|
rm swift-*.tar.gz
|
||||||
|
|
||||||
|
# Kalyn
|
||||||
|
cd /tmp
|
||||||
|
git clone https://github.com/raxod502/kalyn
|
||||||
|
pushd kalyn >/dev/null
|
||||||
|
stack build kalyn
|
||||||
|
mv "$(stack exec which kalyn)" /usr/bin/kalyn
|
||||||
|
mkdir /opt/kalyn
|
||||||
|
cp -R src-kalyn/Stdlib src-kalyn/Stdlib.kalyn /opt/kalyn/
|
||||||
|
popd
|
||||||
|
rm -rf kalyn
|
||||||
|
|
||||||
# LOLCODE
|
# LOLCODE
|
||||||
cd /tmp
|
cd /tmp
|
||||||
git clone https://github.com/justinmeza/lci.git
|
git clone https://github.com/justinmeza/lci.git
|
||||||
|
@ -247,6 +378,50 @@ python3 install.py --prefix=/usr
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
rm -rf lci
|
rm -rf lci
|
||||||
|
|
||||||
|
# Malbolge
|
||||||
|
cd /tmp
|
||||||
|
git clone https://github.com/bipinu/malbolge.git
|
||||||
|
clang malbolge/malbolge.c -o /usr/bin/malbolge
|
||||||
|
rm -rf malbolge
|
||||||
|
|
||||||
|
# ActionScript
|
||||||
|
tee /usr/bin/amxmlc >/dev/null <<"EOF"
|
||||||
|
#!/bin/sh
|
||||||
|
exec /opt/actionscript/bin/amxmlc "$@"
|
||||||
|
EOF
|
||||||
|
chmod +x /usr/bin/amxmlc
|
||||||
|
|
||||||
|
# Befunge
|
||||||
|
tee /usr/bin/befunge-repl >/dev/null <<"EOF"
|
||||||
|
#!/usr/bin/env -S NODE_PATH=/usr/lib/node_modules node
|
||||||
|
const fs = require("fs");
|
||||||
|
|
||||||
|
const Befunge = require("befunge93");
|
||||||
|
const prompt = require("prompt-sync")();
|
||||||
|
|
||||||
|
const befunge = new Befunge();
|
||||||
|
befunge.onInput = prompt;
|
||||||
|
befunge.onOutput = (output) => {
|
||||||
|
if (typeof output === "string") {
|
||||||
|
process.stdout.write(output);
|
||||||
|
} else {
|
||||||
|
process.stdout.write(output + " ");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const args = process.argv.slice(2);
|
||||||
|
if (args.length !== 1) {
|
||||||
|
console.error("usage: befunge-repl FILE");
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
befunge.run(fs.readFileSync(args[0], { encoding: "utf-8" })).catch((err) => {
|
||||||
|
console.error(err);
|
||||||
|
process.exit(1);
|
||||||
|
});
|
||||||
|
EOF
|
||||||
|
chmod +x /usr/bin/befunge-repl
|
||||||
|
|
||||||
# BrainF
|
# BrainF
|
||||||
tee /usr/bin/brainf-repl >/dev/null <<"EOF"
|
tee /usr/bin/brainf-repl >/dev/null <<"EOF"
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
@ -279,6 +454,35 @@ while True:
|
||||||
EOF
|
EOF
|
||||||
chmod +x /usr/bin/brainf-repl
|
chmod +x /usr/bin/brainf-repl
|
||||||
|
|
||||||
|
# Elm
|
||||||
|
mkdir /opt/elm
|
||||||
|
tee /opt/elm/elm.json >/dev/null <<"EOF"
|
||||||
|
{
|
||||||
|
"type": "application",
|
||||||
|
"source-directories": [
|
||||||
|
"."
|
||||||
|
],
|
||||||
|
"elm-version": "0.19.1",
|
||||||
|
"dependencies": {
|
||||||
|
"direct": {
|
||||||
|
"elm/browser": "1.0.2",
|
||||||
|
"elm/core": "1.0.5",
|
||||||
|
"elm/html": "1.0.0"
|
||||||
|
},
|
||||||
|
"indirect": {
|
||||||
|
"elm/json": "1.1.3",
|
||||||
|
"elm/time": "1.0.0",
|
||||||
|
"elm/url": "1.0.0",
|
||||||
|
"elm/virtual-dom": "1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"test-dependencies": {
|
||||||
|
"direct": {},
|
||||||
|
"indirect": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
# Unlambda
|
# Unlambda
|
||||||
tee /usr/bin/unlambda-repl >/dev/null <<"EOF"
|
tee /usr/bin/unlambda-repl >/dev/null <<"EOF"
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
Loading…
Reference in New Issue