diff --git a/backend/src/langs.ts b/backend/src/langs.ts index fcd16f7..d5d366a 100644 --- a/backend/src/langs.ts +++ b/backend/src/langs.ts @@ -1,6 +1,37 @@ +type Category = "assembly" | "config" | "data" | "database" | "editor" | "esoteric" | "general" | "markup" | "pure" | "shell" | "tool" +type Mode = "compiled" | "interpreted" +type Platform = "bf" | "clr" | "js" | "jvm" | "python" | "windows" +type Syntax = "assembly" | "basic" | "c" | "golf" | "haskell" | "lisp" | "pascal" | "python" | "text" | "tokens" | "2d" | "column" | "extensible" | "foreign" | "symbol" | "whitespace" +type Typing = "static" | "dynamic" | "theorem" | "float" | "integer" | "lambda" | "string" | "weak" +type Paradigm = "array" | "declarative" | "functional" | "imperative" | "oo" | "stack" | "turing" +type Usage = "abandoned" | "personal" | "popular" + +type Some = T | T[]; + export interface LangConfig { aliases?: string[]; name: string; + info?: { + impl?: string; + version?: string; + year: number; + desc: string; + ext: Some; + web: { + wiki?: string; + esolang?: string; + home?: string; + impl?: string; + source: string | null; + }; + category: Some; + mode: Some; + platform: Some; + syntax: Some; + typing: Some; + paradigm: Some; + usage: Some; + } monacoLang?: string; daemon?: string; setup?: string; @@ -52,10 +83,30 @@ export interface LangConfig { skip?: string[]; } +// Popular languages: https://pypl.github.io/PYPL.html +// +// (All 28 languages listed are on Riju, except Object Pascal and VBA.) + export const langs: { [key: string]: LangConfig } = { "><>": { aliases: ["esofish"], name: "><>", + info: { + year: 2009, + desc: "Stack-based, reflective, two-dimensional esoteric programming language", + ext: "fish", + web: { + esolang: "https://esolangs.org/wiki/Fish", + source: "https://gist.github.com/anonymous/6392418", + }, + category: "esoteric", + mode: "interpreted", + platform: [], + syntax: ["golf", "2d"], + typing: "float", + paradigm: "stack", + usage: [], + }, main: "main.fish", run: "esofish main.fish", template: `"Hello, world!"r\\ @@ -63,8 +114,27 @@ export const langs: { [key: string]: LangConfig } = { `, }, ada: { - aliases: ["adb"], + aliases: ["adb", "gnat"], name: "Ada", + info: { + impl: "GNAT", + year: 1980, + desc: "Structured, statically typed, imperative, and object-oriented high-level programming language, extended from Pascal and other languages", + ext: ["adb", "ads"], + web: { + wiki: "https://en.wikipedia.org/wiki/Ada_(programming_language)", + home: "https://www.adaic.org/", + impl: "https://www.gnu.org/software/gnat/", + source: "https://gcc.gnu.org/git.html", + }, + category: "general", + mode: "compiled", + platform: [], + syntax: "pascal", + typing: "static", + paradigm: ["imperative", "oo"], + usage: "popular", + }, main: "main.adb", compile: "x86_64-linux-gnu-gnatmake-9 main.adb", run: "./main", @@ -84,8 +154,27 @@ end Main; `, }, algol: { - aliases: ["alg"], + aliases: ["alg", "a68g", "genie", "a68genie"], name: "ALGOL 68", + info: { + impl: "ALGOL 68 Genie", + version: "ALGOL 68", + year: 1958, + desc: "Seminal imperative programming language which introduced lexical scope and formal grammar specification", + ext: "alg", + web: { + wiki: "https://en.wikipedia.org/wiki/ALGOL", + home: "http://algol68.sourceforge.net/", + source: "https://jmvdveer.home.xs4all.nl/en.algol-68-genie.html", + }, + category: "general", + mode: ["interpreted", "compiled"], + platform: [], + syntax: "pascal", + typing: "static", + paradigm: "imperative", + usage: [], + }, main: "main.alg", run: "a68g main.alg", template: `print(("Hello, world!",new line)) @@ -93,6 +182,24 @@ end Main; }, apl: { name: "APL", + info: { + impl: "GNU APL", + year: 1966, + desc: "Array-based programming language using large range of special symbols for concision", + ext: "apl", + web: { + wiki: "https://en.wikipedia.org/wiki/APL_(programming_language)", + impl: "https://www.gnu.org/software/apl/", + source: "https://savannah.gnu.org/svn/?group=apl", + }, + category: ["general"], + mode: "interpreted", + platform: [], + syntax: ["golf", "symbol"], + typing: "dynamic", + paradigm: ["array", "functional", "imperative"], + usage: [], + }, repl: "apl", input: "123 × 234", main: "main.apl", @@ -105,6 +212,25 @@ end Main; }, arm: { name: "ARM", + info: { + impl: "GCC", + year: 1985, + desc: "Popular RISC architecture used in mobile devices", + ext: "S", + web: { + wiki: "https://en.wikipedia.org/wiki/ARM_architecture", + home: "https://developer.arm.com/architectures/cpu-architecture", + impl: "https://gcc.gnu.org/", + source: "https://gcc.gnu.org/git.html", + }, + category: "assembly", + mode: "compiled", + platform: [], + syntax: "assembly", + typing: "weak", + paradigm: "imperative", + usage: [], + }, main: "main.S", compile: "arm-linux-gnueabihf-gcc main.S -o main -static", run: "qemu-arm-static main", @@ -127,6 +253,23 @@ message: asciidoc: { aliases: ["adoc", "asc"], name: "AsciiDoc", + info: { + year: 2002, + desc: "Human-readable document format, semantically equivalent to DocBook XML, but using plain-text mark-up conventions", + ext: "adoc", + web: { + wiki: "https://en.wikipedia.org/wiki/AsciiDoc", + home: "https://asciidoc.org/", + source: "https://github.com/asciidoc/asciidoc", + }, + category: "markup", + mode: [], + platform: [], + syntax: "text", + typing: [], + paradigm: [], + usage: [], + }, main: "main.adoc", compile: "asciidoc -s main.adoc", run: "prettier --no-config main.html", @@ -134,8 +277,26 @@ message: `, }, ats: { - aliases: ["dats"], + aliases: ["dats", "sats", "cats", "hats"], name: "ATS", + info: { + impl: "ATS2/Postiats", + year: 2007, + desc: "Programming language designed to unify programming with formal specification", + ext: ["sats", "dats", "cats", "hats"], + web: { + wiki: "https://en.wikipedia.org/wiki/ATS_(programming_language)", + home: "http://www.ats-lang.org/", + source: "https://github.com/githwxi/ATS-Postiats", + }, + category: "general", + mode: "compiled", + platform: [], + syntax: ["c", "haskell"], + typing: ["static", "theorem"], + paradigm: ["imperative", "declarative"], + usage: [], + }, monacoLang: "postiats", main: "main.dats", compile: "patscc main.dats -o main", @@ -145,8 +306,26 @@ implement main0 () = () `, }, awk: { - aliases: ["gawk", "mawk"], + aliases: ["gawk", "mawk", "nawk"], name: "Awk", + info: { + impl: "GNU Awk", + year: 1977, + desc: "Domain-specific language designed for text processing and typically used as a data extraction and reporting tool", + ext: "awk", + web: { + wiki: "https://en.wikipedia.org/wiki/AWK", + impl: "https://www.gnu.org/software/gawk/manual/gawk.html", + source: "https://savannah.gnu.org/git/?group=gawk", + }, + category: "tool", + mode: "interpreted", + platform: [], + syntax: "c", + typing: "weak", + paradigm: "imperative", + usage: [], + }, main: "main.awk", run: `awk -f main.awk`, template: `BEGIN { print "Hello, world!" } @@ -155,6 +334,24 @@ implement main0 () = () bash: { aliases: ["bashrc", "bourneshell"], name: "Bash", + info: { + impl: "GNU Bash", + year: 1989, + desc: "Unix shell and command language written by Brian Fox for the GNU Project as a free software replacement for the Bourne shell", + ext: ["bash", "sh"], + web: { + wiki: "https://en.wikipedia.org/wiki/Bash_(Unix_shell)", + impl: "https://www.gnu.org/software/bash/", + source: "https://savannah.gnu.org/projects/bash/", + }, + category: "shell", + mode: "interpreted", + platform: [], + syntax: "pascal", + typing: "weak", + paradigm: "imperative", + usage: [], + }, monacoLang: "shell", repl: "bash --rcfile /dev/null", input: `expr 123 \\* 234`, @@ -172,6 +369,24 @@ implement main0 () = () basic: { aliases: ["bas", "qbasic"], name: "BASIC", + info: { + impl: "Bywater BASIC", + year: 1964, + desc: "General-purpose, high-level programming language whose design philosophy emphasizes ease of use", + ext: "bas", + web: { + wiki: "https://en.wikipedia.org/wiki/BASIC", + impl: "https://sourceforge.net/projects/bwbasic/", + source: "https://sourceforge.net/projects/bwbasic/files/bwbasic/", + }, + category: "general", + mode: "interpreted", + platform: [], + syntax: ["basic", "column", "whitespace"], + typing: "static", + paradigm: "imperative", + usage: [], + }, repl: "bwbasic", input: "PRINT 123 * 234", main: "main.bas", @@ -186,6 +401,21 @@ implement main0 () = () battlestar: { aliases: ["battlestarc", "bts"], name: "Battlestar", + info: { + year: 2014, + desc: "A different take on assembly, with the goal of creating tiny executables", + ext: "bts", + web: { + source: "https://github.com/xyproto/battlestar", + }, + category: "assembly", + mode: "compiled", + platform: [], + syntax: "assembly", + typing: "weak", + paradigm: "imperative", + usage: "personal", + }, main: "main.bts", run: "bts main.bts", template: `const message = "Hello, world!\n" @@ -197,6 +427,25 @@ end }, beatnik: { name: "Beatnik", + info: { + impl: "Cat's Eye Beatnik", + year: 2001, + desc: "Stack-based esoteric programming language created by Cliff L. Biffle", + ext: "beatnik", + web: { + wiki: "https://en.wikipedia.org/wiki/Beatnik_(programming_language)", + esolang: "https://esolangs.org/wiki/Beatnik", + home: "https://cliffle.com/esoterica/beatnik/", + source: "https://github.com/catseye/Beatnik", + }, + category: "esoteric", + mode: "interpreted", + platform: [], + syntax: [], + typing: "integer", + paradigm: "stack", + usage: [], + }, main: "main.beatnik", run: "beatnik main.beatnik", template: `Soars, larkspurs, rains. @@ -293,6 +542,26 @@ Nude pagoda careens. befunge: { aliases: ["be"], name: "Befunge", + info: { + impl: "amicloud Befunge-93", + version: "Befunge-93", + year: 1993, + desc: "Two-dimensional esoteric programming language invented in 1993 by Chris Pressey with the goal of being as difficult to compile as possible", + ext: ["be", "bf", "b93", "b98", "befunge"], + web: { + wiki: "https://en.wikipedia.org/wiki/Befunge", + esolang: "https://esolangs.org/wiki/Befunge", + home: "https://catseye.tc/article/Languages.md#befunge-93", + source: "https://github.com/amicloud/befunge93", + }, + category: "esoteric", + mode: "interpreted", + platform: [], + syntax: ["golf", "2d"], + typing: "integer", + paradigm: "stack", + usage: [], + }, main: "main.be", run: "befunge-repl main.be", template: `64+"!dlrow ,olleH">:#,_@ @@ -307,6 +576,25 @@ Nude pagoda careens. "lambda", ], name: "Binary Lambda Calculus", + info: { + year: 2004, + desc: "Minimal, pure functional programming language invented by John Tromp in 2004, based on a binary encoding of the untyped lambda calculus in De Bruijn index notation", + ext: "blc", + web: { + wiki: "https://en.wikipedia.org/wiki/Binary_combinatory_logic", + esolang: "https://esolangs.org/wiki/Binary_lambda_calculus", + home: "https://tromp.github.io/cl/Binary_lambda_calculus.html", + impl: "https://www.ioccc.org/2012/tromp/hint.html", + source: "https://www.ioccc.org/2012/tromp/tromp.c", + }, + category: "esoteric", + mode: "interpreted", + platform: [], + syntax: [], + typing: "lambda", + paradigm: "functional", + usage: [], + }, main: "main.blc", run: "cat main.blc | binary-to-text | tromp", template: `001010100100100001100101011011000110110001101111001011000010 @@ -316,6 +604,23 @@ Nude pagoda careens. boo: { aliases: ["booc"], name: "Boo", + info: { + year: 2003, + desc: "Object-oriented, statically typed, general-purpose programming language on Microsoft's Common Language Infrastructure", + ext: "boo", + web: { + wiki: "https://en.wikipedia.org/wiki/Boo_(programming_language)", + home: "https://boo-language.github.io/", + source: "https://github.com/boo-lang/boo", + }, + category: "general", + mode: "compiled", + platform: "clr", + syntax: ["python", "extensible", "whitespace"], + typing: ["static", "dynamic"], + paradigm: ["imperative", "oo"], + usage: [], + }, setup: `mkdir -p "$HOME/.local/share" && touch "$HOME/.local/share/booish_history"`, main: "main.boo", repl: "booish", @@ -327,6 +632,25 @@ Nude pagoda careens. brainf: { aliases: ["brainfuck", "bf"], name: "Brainf***", + info: { + impl: "Beef", + year: 1993, + desc: "Famous esoteric programming language created in 1993 by Urban Müller", + ext: ["b", "bf"], + web: { + wiki: "https://en.wikipedia.org/wiki/Brainfuck", + esolang: "https://esolangs.org/wiki/Brainfuck", + impl: "https://kiyuko.org/software/beef", + source: "https://github.com/andreabolognani/beef", + }, + category: "esoteric", + mode: "interpreted", + platform: "bf", + syntax: "golf", + typing: "integer", + paradigm: "turing", + usage: [], + }, repl: "brainf-repl", input: ">++>+[>++++[-<++++>]<<]> [>>+>+<<<-]>>>[<<<+>>>-]<<+>[<->[>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++++[<++++++>-]>[<<+>>-]>[<<+>>-]<<]>]<[->>++++++++[<++++++>-]]<[.[-]<]<", @@ -367,9 +691,28 @@ Nude pagoda careens. c: { aliases: ["gcc", "clang", "h", "cc", "c99", "c11", "c18"], name: "C", + info: { + impl: "LLVM", + version: "C18", + year: 1972, + desc: "General-purpose, procedural computer programming language supporting structured programming, lexical variable scope, and recursion, with a static type system", + ext: ["c", "h"], + web: { + wiki: "https://en.wikipedia.org/wiki/C_(programming_language)", + impl: "https://llvm.org/", + source: "https://github.com/llvm/llvm-project", + }, + category: "general", + mode: "compiled", + platform: [], + syntax: "c", + typing: "static", + paradigm: "imperative", + usage: "popular", + }, monacoLang: "c", main: "main.c", - compile: "clang -Wall -Wextra main.c -o main", + compile: "clang -std=c17 -pedantic -Wall -Wextra main.c -o main", run: "./main", format: { run: "clang-format --assume-filename=format.c", @@ -417,9 +760,28 @@ int main() { "hxx", ], name: "C++", + info: { + impl: "LLVM", + version: "C++20", + year: 1985, + desc: "General-purpose programming language created by Bjarne Stroustrup as an extension of the C programming language", + ext: ["C", "cc", "cpp", "cxx", "c++", "h", "hh", "hpp", "hxx", "h++"], + web: { + wiki: "https://en.wikipedia.org/wiki/C%2B%2B", + impl: "https://llvm.org/", + source: "https://github.com/llvm/llvm-project", + }, + category: "general", + mode: "compiled", + platform: [], + syntax: "c", + typing: "static", + paradigm: ["functional", "imperative", "oo"], + usage: "popular", + }, monacoLang: "cpp", main: "main.cpp", - compile: "clang++ -Wall -Wextra main.cpp -o main", + compile: "clang++ -std=c++17 -pedantic -Wall -Wextra main.cpp -o main", run: "./main", format: { run: "clang-format --assume-filename=format.cpp", @@ -448,6 +810,21 @@ int main() { cat: { aliases: ["cat-language"], name: "Cat", + info: { + year: 2006, + desc: "Statically typed stack-based programming language in C#", + ext: "cat", + web: { + source: "https://github.com/cdiggins/cat-language", + }, + category: "pure", + mode: "interpreted", + platform: [], + syntax: "tokens", + typing: "static", + paradigm: "stack", + usage: [], + }, repl: "NODE_PATH=/opt/cat node /opt/cat/repl.js", input: "123 234 mul", main: "main.cat", @@ -458,6 +835,23 @@ int main() { }, ceylon: { name: "Ceylon", + info: { + year: 2011, + desc: "Object-oriented, strongly statically typed programming language with an emphasis on immutability, created by Red Hat", + ext: "ceylon", + web: { + wiki: "https://en.wikipedia.org/wiki/Ceylon_(programming_language)", + home: "https://ceylon-lang.org/", + source: "https://ceylon-lang.org/code/source/", + }, + category: "general", + mode: "compiled", + platform: "jvm", + syntax: "c", + typing: "static", + paradigm: ["imperative", "oo"], + usage: [], + }, main: "source/main.ceylon", run: `PATH="/usr/lib/jvm/java-8-openjdk-amd64/bin:$PATH" ceylon run --compile=force default`, template: `shared void run() { @@ -468,6 +862,24 @@ int main() { }, chef: { name: "Chef", + info: { + impl: "Acme::Chef", + year: 2002, + desc: "Stack-based language where programs look like cooking recipes", + ext: "chef", + web: { + esolang: "https://esolangs.org/wiki/Chef", + home: "https://www.dangermouse.net/esoteric/chef.html", + source: "http://search.cpan.org/author/SMUELLER/Acme-Chef/", + }, + category: "esoteric", + mode: ["compiled", "interpreted"], + platform: [], + syntax: "text", + typing: "integer", + paradigm: "imperative", + usage: [], + }, main: "main.chef", run: "chef main.chef", hello: "Hello world!", @@ -531,8 +943,25 @@ Refrigerate for 1 hour. `, }, clean: { - aliases: ["icl", "clm"], + aliases: ["icl", "clm", "dcl"], name: "Clean", + info: { + year: 1987, + desc: "General-purpose purely functional computer programming language", + ext: ["icl", "dcl", "abc"], + web: { + wiki: "https://en.wikipedia.org/wiki/Clean_(programming_language)", + home: "https://clean.cs.ru.nl/Clean", + source: "https://gitlab.science.ru.nl/clean-compiler-and-rts/compiler", + }, + category: "general", + mode: "compiled", + platform: [], + syntax: "haskell", + typing: "static", + paradigm: ["declarative", "functional"], + usage: [], + }, main: "main.icl", compile: "clm main -o main", run: "./main", @@ -550,6 +979,24 @@ Start world clojure: { aliases: ["clj"], name: "Clojure", + info: { + impl: "Java Clojure", + year: 2007, + desc: "Modern, dynamic, and functional dialect of the Lisp programming language on the Java platform", + ext: ["clj", "cljc", "edn"], + web: { + wiki: "https://en.wikipedia.org/wiki/Clojure", + home: "https://clojure.org/", + source: "https://github.com/clojure/clojure", + }, + category: "general", + mode: "interpreted", + platform: "jvm", + syntax: ["lisp", "extensible"], + typing: "dynamic", + paradigm: ["declarative", "functional", "imperative", "oo"], + usage: [], + }, monacoLang: "clojure", repl: "clojure", input: "(* 123 234)", @@ -566,6 +1013,23 @@ Start world clojurescript: { aliases: ["cljs", "lumo"], name: "ClojureScript", + info: { + year: 2011, + desc: "Compiler for Clojure that targets JavaScript", + ext: "cljs", + web: { + wiki: "https://en.wikipedia.org/wiki/Clojure#Platforms", + home: "https://clojurescript.org/", + source: "https://github.com/clojure/clojurescript", + }, + category: "general", + mode: ["compiled", "interpreted"], + platform: "js", + syntax: ["lisp", "extensible"], + typing: ["dynamic", "weak"], + paradigm: ["declarative", "functional", "imperative", "oo"], + usage: [], + }, monacoLang: "clojure", repl: "lumo -r", input: "(* 123 234)", @@ -580,6 +1044,23 @@ Start world cmd: { aliases: ["bat", "batch", "wine"], name: "Cmd", + info: { + year: 1987, + desc: "Obsolete (but still default) command-line interpreter for Microsoft Windows", + ext: "bat", + web: { + wiki: "https://en.wikipedia.org/wiki/Cmd.exe", + home: "https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands", + source: null, + }, + category: "shell", + mode: "interpreted", + platform: "windows", + syntax: "basic", + typing: "weak", + paradigm: "imperative", + usage: [], + }, monacoLang: "bat", setup: "shopt -s dotglob; cp -R /opt/cmd/home-template/* ./", repl: "wine cmd", @@ -595,8 +1076,27 @@ Start world timeout: 15, }, cobol: { - aliases: ["cbl", "cobc"], + aliases: ["cbl", "cob", "cobc", "cpy"], name: "COBOL", + info: { + impl: "GnuCOBOL", + version: "COBOL 2014", + year: 1959, + desc: "Compiled English-like computer programming language designed for business use", + ext: ["cbl", "cob", "cpy"], + web: { + wiki: "https://en.wikipedia.org/wiki/COBOL", + impl: "https://sourceforge.net/projects/gnucobol/", + source: "https://sourceforge.net/p/gnucobol/_list/svn", + }, + category: "general", + mode: "compiled", + platform: [], + syntax: "basic", + typing: "weak", + paradigm: ["imperative", "oo"], + usage: "popular", + }, main: "main.cbl", compile: "cobc -free -x main.cbl -o main", run: "./main", @@ -608,8 +1108,25 @@ PROCEDURE DIVISION. `, }, coffeescript: { - aliases: ["coffee"], + aliases: ["coffee", "litcoffee"], name: "CoffeeScript", + info: { + year: 2009, + desc: "Compile-to-JavaScript programming language adding syntactic sugar inspired by Ruby, Python and Haskell in an effort to enhance JavaScript's brevity and readability", + ext: ["coffee", "litcoffee"], + web: { + wiki: "https://en.wikipedia.org/wiki/CoffeeScript", + home: "https://coffeescript.org/", + source: "https://github.com/jashkenas/coffeescript", + }, + category: "general", + mode: ["interpreted", "compiled"], + platform: "js", + syntax: ["c", "haskell"], + typing: "weak", + paradigm: ["declarative", "functional", "imperative"], + usage: [], + }, monacoLang: "coffee", repl: "coffee", main: "main.coffee", @@ -627,6 +1144,25 @@ require("/usr/lib/node_modules/coffeescript/repl").start() commonlisp: { aliases: ["lisp", "sbcl"], name: "Common Lisp", + info: { + impl: "SBCL", + year: 1984, + desc: "Modern, multi-paradigm, high-performance, compiled, ANSI-standardized, most prominent (along with Scheme) descendant of the Lisp family", + ext: ["lisp", "lsp", "l", "cl", "fasl"], + web: { + wiki: "https://en.wikipedia.org/wiki/Common_Lisp", + home: "https://common-lisp.net/", + impl: "http://www.sbcl.org/", + source: "https://sourceforge.net/p/sbcl/sbcl/ci/master/tree/", + }, + category: "general", + mode: ["compiled", "interpreted"], + platform: [], + syntax: ["lisp", "extensible"], + typing: ["static", "dynamic"], + paradigm: ["declarative", "functional", "imperative", "oo"], + usage: [], + }, repl: "rlwrap sbcl", input: "(* 123 234)", main: "main.lisp", @@ -640,6 +1176,25 @@ require("/usr/lib/node_modules/coffeescript/repl").start() confluence: { aliases: ["jira", "atlassian"], name: "Confluence", + info: { + impl: "Pandoc", + year: 2004, + desc: "Markup format for a popular web-based corporate wiki developed by Atlassian", + ext: [], + web: { + wiki: "https://en.wikipedia.org/wiki/Confluence_(software)", + home: "https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html", + impl: "https://pandoc.org/", + source: "https://github.com/jgm/pandoc", + }, + category: "markup", + mode: [], + platform: [], + syntax: "text", + typing: [], + paradigm: [], + usage: [], + }, main: "main.txt", compile: "pandoc main.txt -f jira -o main.html", run: "prettier --no-config main.html", @@ -649,6 +1204,23 @@ require("/usr/lib/node_modules/coffeescript/repl").start() crystal: { aliases: ["cr"], name: "Crystal", + info: { + year: 2014, + desc: "General-purpose, object-oriented programming language with syntax inspired by the language Ruby", + ext: "cr", + web: { + wiki: "https://en.wikipedia.org/wiki/Crystal_(programming_language)", + home: "https://crystal-lang.org/", + source: "https://github.com/crystal-lang/crystal", + }, + category: "general", + mode: "compiled", + platform: [], + syntax: "pascal", + typing: "static", + paradigm: "oo", + usage: [], + }, main: "main.cr", run: "crystal main.cr", template: `puts "Hello, world!" @@ -658,6 +1230,7 @@ require("/usr/lib/node_modules/coffeescript/repl").start() csharp: { aliases: ["cs", "mcs"], name: "C#", + // popular monacoLang: "csharp", main: "main.cs", compile: "mcs main.cs", @@ -705,6 +1278,7 @@ void main() }, dart: { name: "Dart", + // popular monacoLang: "dart", main: "main.dart", run: "dart main.dart", @@ -991,6 +1565,7 @@ USE: io go: { aliases: ["golang"], name: "Go", + // popular monacoLang: "go", main: "main.go", compile: "go build main.go", @@ -1027,6 +1602,7 @@ func main() { }, groovy: { name: "Groovy", + // popular repl: `JAVA_OPTS="-Djava.util.prefs.systemRoot=$PWD/.java -Djava.util.prefs.userRoot=$PWD/.java/.userPrefs" groovysh`, main: "main.groovy", run: `JAVA_OPTS="-Djava.util.prefs.systemRoot=$PWD/.java -Djava.util.prefs.userRoot=$PWD/.java/.userPrefs" groovysh main.groovy`, @@ -1061,6 +1637,7 @@ function main(): void { haskell: { aliases: ["ghc", "ghci", "hs"], name: "Haskell", + // popular repl: "rm -f .ghci && ghci", main: "Main.hs", run: "(echo ':load Main' && echo 'main') > .ghci && ghci", @@ -1198,6 +1775,7 @@ PLEASE GIVE UP java: { aliases: ["javac"], name: "Java", + // popular monacoLang: "java", main: "Main.java", compile: "javac Main.java", @@ -1362,6 +1940,7 @@ PLEASE GIVE UP javascript: { aliases: ["node", "js", "web", "jsx", "v8", "closure", "nodejs"], name: "Node.js", + // popular monacoLang: "javascript", repl: "node", main: "main.js", @@ -1386,6 +1965,7 @@ PLEASE GIVE UP julia: { aliases: ["jl"], name: "Julia", + // popular repl: "julia", main: "main.jl", run: "julia -L main.jl", @@ -1425,6 +2005,7 @@ PLEASE GIVE UP kotlin: { aliases: ["kts", "kotlinc"], name: "Kotlin", + // popular monacoLang: "kotlin", repl: `JAVA_OPTS="-Duser.home=$PWD" kotlinc`, main: "main.kts", @@ -1506,6 +2087,7 @@ KTHXBYE }, lua: { name: "Lua", + // popular monacoLang: "lua", repl: "lua", main: "main.lua", @@ -1645,6 +2227,7 @@ message: objectivec: { aliases: ["objc", "gnustep"], name: "Objective-C", + // popular monacoLang: "objective-c", main: "main.m", compile: @@ -1702,6 +2285,7 @@ print_string "Hello, world!\\n" octave: { aliases: ["matlab", "m", "mathworks"], name: "Octave", + // popular repl: "octave", main: "main.m", run: "octave --persist main.m", @@ -1768,6 +2352,7 @@ end. perl: { aliases: ["pl", "repl"], name: "Perl", + // popular monacoLang: "perl", repl: "re.pl", main: "main.pl", @@ -1787,6 +2372,7 @@ end. php: { aliases: ["phpcli"], name: "PHP", + // popular monacoLang: "php", repl: "php -a", input: "print 123 * 234;", @@ -1914,6 +2500,25 @@ main = do python: { aliases: ["python3", "python2", "py"], name: "Python", + info: { + impl: "CPython", + version: "Python 3", + year: 1990, + desc: "Interpreted, high-level, general-purpose programming language", + ext: ["py", "pyi", "pyc", "pyd", "pyo", "pyw", "pyz"], + web: { + wiki: "https://en.wikipedia.org/wiki/Python_(programming_language)", + source: "https://github.com/python/cpython", + home: "https://www.python.org/", + }, + category: "general", + mode: "interpreted", + platform: "python", + syntax: ["python", "whitespace"], + typing: "dynamic", + paradigm: ["functional", "imperative", "oo"], + usage: "popular", + }, monacoLang: "python", repl: "python3 -u", main: "main.py", @@ -1965,6 +2570,7 @@ main = do r: { aliases: ["rlang"], name: "R", + // popular monacoLang: "r", repl: "R", main: ".Rprofile", @@ -2091,6 +2697,7 @@ Hello, world! ruby: { aliases: ["irb", "rb"], name: "Ruby", + // popular monacoLang: "ruby", repl: "irb", main: "main.rb", @@ -2123,6 +2730,7 @@ binding_irb.run(IRB.conf) rust: { aliases: ["rs", "rustc"], name: "Rust", + // popular monacoLang: "rust", main: "main.rs", compile: "rustc main.rs", @@ -2144,6 +2752,7 @@ binding_irb.run(IRB.conf) }, scala: { name: "Scala", + // popular repl: "scala", main: "main.scala", run: "scala -i main.scala", @@ -2376,6 +2985,7 @@ END swift: { aliases: ["swiftc"], name: "Swift", + // popular monacoLang: "swift", main: "main.swift", compile: "swiftc main.swift", @@ -2484,6 +3094,7 @@ a typescript: { aliases: ["ts", "tsnode", "tsc"], name: "TypeScript", + // popular monacoLang: "typescript", repl: "ts-node", main: "main.ts", @@ -2561,8 +3172,9 @@ main = 'let `, }, visualbasic: { - aliases: ["vbasic", "vb", "vbnc"], + aliases: ["vbasic", "vb", "vbnc", "vba"], name: "Visual Basic", + // popular monacoLang: "vb", main: "main.vb", compile: "vbnc main.vb",