Easy and standardized docker images for 200+ esoteric (and non-esoteric) languages.
esolang-box 2.6.0 [![Test][actions-image]][actions-url]
[actions-image]: https://github.com/hakatashi/esolang-box/actions/workflows/test.yml/badge.svg [actions-url]: https://github.com/hakatashi/esolang-box/actions/workflows/test.yml
Easy and standardized docker images for 200+ esoteric (and non-esoteric) languages.
Usage
Distributed docker images are separated for each esolangs.
For example docker image for Evil language is named as esolang/evil, which is hosted on Docker Hub.
How to run your own esolang program
Suppose you have program in the current directory,
$ echo aeeeaeeewueuueweeueeuewwaaaweaaewaeaawueweeeaeeewaaawueeueweeaweeeueuw > program.evil
then you can run the program like the following.
$ docker run -v pwd:/code:ro esolang/evil evil /code/program.evil
Hello, World!
Observing usage of exec syscalls
esolang-box 2.2.0 supports tracing of execve and execveat syscalls by strace command. Setting STRACEOUTPUTPATH environment variables and enabling ptrace will produce strace log to the specified path.
$ docker run --cap-add=SYSPTRACE --rm -v pwd:/code --env STRACEOUTPUT_PATH=/code/strace.txt esolang/evil evil /code/program.evil
Hello, World!
Some considerations:
- Enabling ptrace breaks seccomp filter before kernel 4.8. You should be very careful to use
--cap-add=SYSPTRACE(especially you must not use it with Xenial). - Using strace costs a huge performance overhead and syscalls may be 10x slower.
~ # cat benchmark.rb
sum = 0
1000.times do |i|
seq = seq #{i}.split.map(&:to_i)
sum = seq.sum
end
p sum
~ # echo -n "" | time ruby benchmark.rb
499500
real 0m 3.57s
user 0m 0.78s
sys 0m 0.70s
~ # echo -n "" | time strace -f -q -o strace.txt -e trace=execve,execveat ruby benchmark.rb
499500
real 0m 28.90s
user 0m 1.19s
sys 0m 13.73s
List of boxes
*esolang/awk: awk (GNU awk) esolang/ballerina: Ballerina esolang/bc: bc esolang/dc: dc esolang/build-base esolang/3var: 3var esolang/a-language: A esolang/adjust: ADJUST esolang/aheui: Aheui esolang/alphabeta: AlphaBeta esolang/apl: APL esolang/axo: Axo esolang/bash-pure: Bash (pure) esolang/bash-busybox: Bash (busybox) esolang/basic-freebasic: BASIC (FreeBASIC) esolang/beatnik: Beatnik esolang/befunge93: Befunge-93 esolang/befunge98: Befunge-98 esolang/seed: Seed esolang/blc: Binary lambda calculus esolang/braille: Braille esolang/c-gcc: C (GCC) esolang/clisp-sbcl: Common LISP (SBCL) esolang/cobol: COBOL esolang/codemania: CodeMania esolang/cubically: Cubically esolang/cyclicbrainfuck: Cyclic Brainfuck esolang/dis: Dis esolang/dotnet-base esolang/csharp-dotnet: C# (.NET Core) esolang/fsharp-dotnet: F# (.NET Core) esolang/function2d: Funciton esolang/visualbasic-dotnet: Visual Basic (.NET Core) esolang/doubleplusungood: Doubleplusungood esolang/fetlang: Fetlang esolang/fish-shell-pure: Fish (pure) esolang/fortran: Fortran 2018 esolang/glass: Glass esolang/goruby: goruby esolang/hanoistack: HanoiStack esolang/intercal: INTERCAL esolang/lazyk: Lazy-K esolang/llvm-ir: LLVM 10 IR esolang/lolcode: LOLCODE esolang/make: Make esolang/malbolge: Malbolge esolang/minus: Minus esolang/multi-reader: multi-reader esolang/olang: O esolang/osecpu: osecpu esolang/osecpu-aska: osecpu-aska esolang/piet: Piet esolang/python1: Python 1 esolang/python2: Python 2 esolang/aubergine: Aubergine esolang/fernando: FerNANDo esolang/gs2: gs2 esolang/haystack: Haystack esolang/i4004asm: Intel 4004 Assembly esolang/logicode: Logicode esolang/minimal2d: Minimal-2D esolang/path: PATH esolang/recurse: Recurse esolang/snusp: SNUSP esolang/stuck: Stuck esolang/suzy: Suzy esolang/unicat: Unicat esolang/unreadable: Unreadable esolang/zombie: ZOMBIE esolang/qi: 气 esolang/r-language: R esolang/rail: Rail esolang/rapira: РАПИРА) esolang/rescript: ReScript esolang/ring: Ring esolang/ruby: Ruby 4.0.2 esolang/alice: Alice esolang/arithmetic: Arithmetic esolang/brainfuck-esomer: Brainfuck (esomer) esolang/copos-rb: copos (Ruby) esolang/cy: Cy esolang/golfish: golfish esolang/golfscript: GolfScript esolang/hexagony: Hexagony esolang/labyrinth: Labyrinth esolang/pxem: Pxem esolang/pyramid-scheme: Pyramid Scheme esolang/reversed-c: reversed-c esolang/stackcats: Stack Cats esolang/standback: (?i:standback) esolang/starry: Starry esolang/typhon: Typhon esolang/vim: Vim esolang/autovim: Autovim esolang/v-vim: V (Vim) esolang/wake: wake esolang/ruby1: Ruby 1.8 esolang/grass: Grass esolang/modanshogi: ModanShogi esolang/ppap: PPAP esolang/rust: Rust esolang/brainfuck-esotope: Brainfuck (esotope) esolang/sceql: Sceql esolang/simula: Simula esolang/snobol: SNOBOL4 esolang/snowman: Snowman esolang/spl: Shakespeare esolang/streem: Streem esolang/taxi: Taxi esolang/tcl: Tcl esolang/uiua: Uiua esolang/unlambda: Unlambda esolang/vala: Vala esolang/verilog: Verilog (Icarus Verilog) esolang/vlang: V esolang/wat: WebAssembly Text Format esolang/wierd: Wierd esolang/wordcpu: Word!CPU esolang/wren: Wren esolang/zsh-pure: Zsh (pure) esolang/cmd: cmd.exe esolang/csharp: C# (Mono) esolang/bubble-sort: BubbleSortLanguage esolang/classic-music-theory: ClassicMusicTheoryForProgrammer esolang/produire: プロデル esolang/z80: Z80 esolang/erlang: Erlang esolang/elixir: Elixir esolang/05ab1e: 05AB1E esolang/gnuplot: gnuplot esolang/golang: Go esolang/braintwist: braintwist esolang/tsp: TSP esolang/haskell: Haskell esolang/nibbles: Nibbles esolang/whitespace: Whitespace esolang/java: Java esolang/arnoidc: ArnoidC esolang/cjam: CJam esolang/convex: Convex esolang/evil: Evil esolang/floater: Floater esolang/js-rhino: JavaScript (Rhino) esolang/kotlin: Kotlin esolang/pikt: Pikt esolang/vyxal: Vyxal 3 esolang/whenever: Whenever esolang/xslt: XSLT esolang/jq: jq esolang/lua: Lua esolang/rprogn: Reverse Programmer Notation esolang/m4: m4 esolang/node: Node.js esolang/beam: Beam esolang/calc: LibreOffice Calc esolang/canvas: Canvas esolang/compile-time-typescript: Compile-time TypeScript esolang/cubix: Cubix esolang/emojifunge: emojifunge esolang/floating: Floating esolang/hakerh-base esolang/encapsulation: Encapsulation esolang/functional: Functional()) esolang/seclusion: Seclusion esolang/serenity: Serenity esolang/transceternal: Transceternal esolang/htms: htms esolang/japt: Japt esolang/maybelater: Maybe Later esolang/nadesiko: なでしこ3 esolang/nuts: Nuts esolang/qlb: قلب esolang/stop: STOP esolang/tetris: Tetris esolang/unicue: Unicue esolang/wenyan: 文言 esolang/wysiscript: WysiScript esolang/ocaml: OCaml esolang/coq: Rocq esolang/octave: Octave esolang/matl: MATL esolang/perl: Perl esolang/element: Element esolang/slashes: /// esolang/perl6: Perl 6 esolang/php: PHP 7.0 esolang/irc: IRC esolang/python3: Python 3 esolang/2sable: 2sable esolang/arcyou: Arcyóu esolang/asciidots: AsciiDots esolang/backhand: Backhand esolang/bespoke: Bespoke esolang/bots: Bots esolang/cardinal: Cardinal esolang/chelang: CheLang esolang/emoji: Emoji esolang/exchangeif: ExchangeIF esolang/ezhil: எழில் esolang/ffb: Foobar and Foobaz and Barbaz, oh my! esolang/fish: ><> esolang/foldy: Foldy esolang/gaia: Gaia esolang/hbcht: Half-Broken Car in Heavy Traffic esolang/hypertorus