#+TODO: TODO TESTED INPROGRESS WONTDO | DONE #+OPTIONS: todo:t * Candidates ** Sources for further languages - http://rosettacode.org/wiki/Category:Programming_Languages - https://github.com/mame/quine-relay and https://aur.archlinux.org/packages/quine-relay/ (implementations) - https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books.md ** Languages to implement MAL in [15/141] *** DONE Emacs Lisp That was pretty fun and educational. *** DONE ChucK A nice audio programming language, with a focus on time. Incidentally it appears to have everything needed for implementing MAL in it... This is harder than expected as it's neither C++ nor Java and not many people seem to have explored the (buggy) non-audio parts. *** DONE Common Lisp A serious omission, given the existence of two Scheme (Racket, Guile) and a Clojure/ClojureScript implementation. edit: Done by one of my blog readers... *** DONE Powershell Open-source and running on Linux now! Considering that the original author of MAL did implement it in Bash, Powershell should be a piece of cake. Done by said author. *** DONE Picolisp Alex Burger is a pretty cool guy, so let's see how usable his creation is... *** DONE Smalltalk The other alternative to Emacs... It inspired Ruby. https://github.com/dubek/mal/tree/smalltalk/smalltalk *** DONE TypeScript JavaScript with an actually useful type system. Makes for better tooling? Done by someone else. *** DONE Elm Purely functional frontend dev with its own take on MVC. Can be run from CLI and supports interop with JS, so it should be possible... Done by another curious person with higher pain tolerance than me. *** DONE REXX Looks like a Tcl/Smalltalk predecessor... Done by dubek. *** DONE Portable R7RS Scheme This should support all the required things (jiffies, command arguments, file IO, modules, etc.), for regex one can vendor irregex or just hand-roll a tokenizer. Done by me. *** DONE F# Microsoft has open-sourced tons of things, so that one becomes another possible Ocaml-like language. *** DONE Hy Clojure-like in Python Done by kanaka himself. *** DONE Skew http://skew-lang.org/ Done by Dubek. *** TODO Pony The new cool kid on the block. It appears to have a significantly advanced type system and compiler, as well as support for capability-based programming and actors. *** TESTED Rebol / Red A language proposing DSLs as solution to everything with a syntax reminiscent of Tcl/Forth. *** TODO Self Looks like Smalltalk, but goes for prototypical OO. It inspired Io (which already got an implementation). *** TODO eC / Ecere Like Tcl/Tk, it's mostly interesting due to its graphics support. The language itself is reminiscent of C, but has some higher-level constructs, such as proper module support. No exceptions or closures yet. http://ecere.org/tao.pdf *** TESTED FORTRAN ORLY? GC should be done via reference counting *** TODO COBOL YARLY https://supportline.microfocus.com/documentation/books/sx40/lrpubb.htm https://github.com/TypeCobolTeam/TypeCobol *** TODO BCPL C predecessor *** DONE x86 ASM Because you just hate yourself and deep down, machine code is untyped... WIP by https://github.com/bendudson/mal/tree/master/nasm *** TODO HLA Slightly better than x86 ASM, still untyped *** TODO PL/I RMS likes it! *** TODO SNOBOL / SPITBOL / snocone Made for string processing! *** TODO MUMPS Got its own series of The Daily WTF posts... *** WONTDO ALGOL-60 No real string and file support. *** WONTDO ALGOL-W The AWE compiler needs lots of patches to run and falls apart when compiled with optimizations. Worse, strings are fixed-size and trying to terminate them corrupts them... *** TESTED ALGOL-68 Revolutionary programming features, syntax or whatever http://www.nunan.myzen.co.uk/algol68/pame.pdf https://jmvdveer.home.xs4all.nl/algol.html https://www.archlinux.org/packages/community/x86_64/algol68g/ *** TODO MODULA-2 I've yet to find a working compiler for it... *** TESTED MODULA-3 The most practical Algol derivative https://github.com/modula3/cm3 *** TESTED Pike I only know that Emacs supports it... *** TODO Dylan The other way Lisp could have evolved... https://opendylan.org/ *** TESTED Newtonscript Language used on Apple's Newton hardware. https://github.com/gnue/NEWT0 *** TODO J/K/APL/IDL Yay, array processing. Somewhat Scheme-inspired. *** TODO Arc, Femtolisp Minimal Lisp dialects that may be different enough from the rest used already. *** TESTED Newlisp Scripting language designed for ease of learning *** TESTED TXR Lisp A Lisp designed for text processing and minimal amount of code *** TODO CHICKEN If Guile and Racket made it, why not CHICKEN, too? *** TODO Arrowlisp Purely symbolic Lisp, so no numbers... *** TODO Felix http://felix-lang.org/ http://felix-documentation-master.readthedocs.io/en/latest/ A powerful inliner compiling procedural/functional ML code to C++ *** TODO Pure Another functional language, uses term rewriting heavily. http://purelang.bitbucket.org/ *** TODO ATS Formal programming, yey. http://www.ats-lang.org/ *** TODO Oz / Mozart Looks like forcer got paid writing code in it... *** TODO Mercury Real-world Prolog? *** TODO Icon "Icon is a very high-level programming language featuring goal directed execution and many facilities for managing strings and textual patterns." In other words, it's the SNOBOL successor. Unicon is the implementation to go for. *** TESTED Myrddin C with ADTs? http://eigenstate.org/myrddin/ *** TODO Shadow ... http://shadow-language.org/ *** INPROGRESS SuperCollider The other alternative to ChucK. Has first-class functions, feels more like a scripting language and is mostly undocumented. Fun. *** TODO Luck C meets FP? https://luck.subarctic.org/ *** TODO L.B. Stanza Not quite Lisp http://lbstanza.org/index.html *** TODO Sidef Pretty https://github.com/trizen/sidef *** TODO potion So that's what _why has been doing... https://github.com/perl11/potion/ *** TODO m4 Because TeX isn't insane enough *** TODO spry smalltalk and rebol on nim, woo *** TODO Solidity https://solidity.readthedocs.io/en/latest/ Programming on the blockchain? Crazy shit... *** TODO jq It might do it, once obstacles like arbitrary IO are sorted out *** TODO XSLT Welcome to the Turing tarpit! Slax is an alternative syntax with extra features that might make this doable: https://github.com/Juniper/libslax *** TODO Eiffel Contracts? http://smarteiffel.loria.fr/ *** TODO Sather Like Eiffel, but with Closures and more *** TESTED Standard ML The language that inspired Ocaml. Not sure which implementation to pick, there's Mythril (which might be its own thing...), Moscow ML, Poly/ML, NJML, etc. *** TODO Yeti A ML on the JVM *** TODO Clay (2011) https://github.com/jckarter/clay System programming language with all the high-level constructs one wants? Want. *** TODO Zig http://ziglang.org/ Another too high-level looking system programming language. Made by Mr. libsoundio *** TESTED s-lang http://www.jedsoft.org/slang/doc/html/slang.html *** TODO Kernel vau, vau! *** TODO None https://bitbucket.org/duangle/nonelang/src Used in http://www.duangle.com/nowhere See also http://blog.duangle.com/2015/01/conspire-programming-environment-for.html and http://blog.duangle.com/2015/04/towards-realtime-deformable-worlds-why.html *** TODO Cobra http://cobra-language.com/ *** TODO Whiley http://whiley.org/ *** TODO Pliant http://www.fullpliant.org/ *** TODO Ceylon, Gosu Sort of like Groovy as they run on the JVM *** TODO Boo, Nemerle CLR languages *** TESTED Vala GNOME language compiling to C using GLib *** TODO Genie Another GNOME language compiling to C using GLib *** TODO Reason, Bucklescript, Purescript https://github.com/facebook/reason Not ready yet, once it documents interop with npm or C... *** TESTED wren, Lox http://wren.io/ http://www.craftinginterpreters.com/ Supports most you'd need, can be embedded (and extended?) *** TODO zygomys https://github.com/glycerine/zygomys *** TODO Pyret Most mature Racket language? *** TODO Zimbu The other creation of Vim's author http://www.zimbu.org/Home *** TODO Varnish/VCL, Asterisk (Dialplan) Embedded special purpose languages that are implemented and extensible in C. The tricky part is figuring out how to speak to their interpreters from outside as Varnish is part of a web server setup and Asterisk is a SIP solution. *** TODO Monkey X Not to be confused with [[https://interpreterbook.com/][Monkey]]. Looks like a mixture of Basic and Haxe. *** TODO Gravity https://marcobambini.github.io/gravity/ Yet another embedding language. *** DONE Fantom Better Java except it targets JVM/CLR/JS http://fantom.org/ *** TODO Beta Old OOP language with minimal syntax, derived from Simula-67 http://cs.au.dk/~beta/doc/faq/beta-language-faq.html *** TODO Processing I thought this to be impossible, but https://github.com/zick/ProcessingLisp manages doing it. *** TODO E A language clearly ahead of its time. The only implementation runs on Java, so interfacing with the outer world should be doable. http://www.erights.org/download/ *** TODO Ioke Something Io-inspired, but different. https://ioke.org/ *** TODO Squirrel This embedded language is nuts! Just kidding, it looks simple, has closures and is dynamic. http://www.squirrel-lang.org/ *** TESTED Oberon The Oxford Oberon compiler might work http://miasap.se/obnc/ *** TODO Euphoria Something sequences: http://www.rapideuphoria.com/ https://openeuphoria.org/ *** TODO Falcon Allows every programming paradigm!!! http://www.falconpl.org/ *** TESTED Chapel This shit is cray: http://chapel.cray.com/ *** TODO Joy A point-free, concatenative language *** TESTED SPL Scripting language by the STFL author. Seems to support everything you'd need, but careful, it's unmaintained! *** TESTED Coldfusion There's like three open-source implementations of it and it appears the language has been split into a PHP-like (templates) and JS-like (business logic) part. You'll most likely have to look up documentation on the Adobe website. - OpenBD - Railo (dead) - Lucee (Railo Fork) There's also https://www.ortussolutions.com/products/commandbox *** TESTED Actionscript The thing used in Flash. https://github.com/Corsaair/redtamarin *** TODO Nickle A not quite calculator language with C-style syntax. http://nickle.org/ *** TODO Wolfram Alpha / Mathematica It can be used for non-commercial purposes on a Raspberry Pi, so that would allow me to develop MAL on one. The CI thing would probably violate their license agreement though. https://github.com/kawabata/wolfram-mode *** TODO Moonscript Looks like CoffeeScript, compiles down to Lua *** TODO Golo JVM-based weakly typed language with many features from functional programming. http://golo-lang.org/ *** TODO Flix JVM-based language looking like Scala and Prolog. Doesn't look ready yet. *** TODO Clean Reminiscent of Haskell https://clean.cs.ru.nl/Clean *** TESTED Limbo Part of the Inferno distribution Looks like a proto-Go to me. It's strongly typed, with a GC, processes, somewhat C-like syntax, but with hints of Pascal. The greatest problem is interacting with it. You can run Inferno in hosted mode, however the emulator doesn't see the host's files by default. You can mount them interactively with =bind -ac '#U*/home' /usr= or hardcode it in the init files. If you exit the thing, it kills itself and its processes. *** TODO X10 High-performance, parallel, productive(?) http://x10-lang.org/ *** TODO Urbi/Urbiscript Like Javascript, but for robotics: http://urbi.jcbaillie.net/doc/ *** TODO Opa A better JS, powered by ML *** TODO Ooc https://ooc-lang.org/ *** TODO Odin https://github.com/odin-lang/Odin *** TODO Frege / Eta JVM Haskell *** TODO Nu A Lisp for Mac people. It may be possible to run on Linux thanks to GNUStep: https://github.com/nulang/nu/blob/master/ubuntu.sh *** TODO Lily Statically typed language with an interpreter https://github.com/FascinatedBox/lily *** TODO Terra For those who found Lua too high-level https://github.com/zdevito/terra *** TODO Neko Not quite low-level language for NekoVM. Seems to have most things you'd need, including FFI to measure time accurately and use GNU Readline. It's intended as a compilation target (as done by the Haxe implementation), but it should be possible to write it by hand. https://nekovm.org/ *** TESTED Simula-67 The first OOP language they say. *** TODO xBase / Clipper / Harbour https://harbour.github.io/ *** TODO Agena Algol-68 meets Lua and Maple http://agena.sourceforge.net/index.html *** TESTED C Yeah, I know that there is already an implementation. It has a huge flaw, depending on too many external dependencies. The most problematic of the bunch is glib in combination with libgc, the code marrying both has bitrotted and doesn't work anymore. This would pave the way forward towards a more idiomatic C implementation... *** TESTED Aikido JavaScript with actual Java in it, designed by Sun. *** TESTED ISLISP Standardized Lisp somewhere between CL and Scheme *** TESTED Lush Lisp designed for scientific processing. Unfortunately only the 32bit version works properly, so Docker-only development it is... *** TODO Lasso Proprietary server web scripting thing. Comes with a CLI and a free edition with limited scaling which supposedly works on Ubuntu 14.04 / CentOS 6. Docker-only development, here I come! http://www.lassoguide.com/ *** TODO SETL Ancient set manipulation language the first verified Ada compiler was implemented in. There's unfortunately no source downloads... http://setl.org/setl/bin/Linux-x86-64bit/ http://www.settheory.com/ http://www.hakank.org/setl/ http://setl.org/setl/doc/setl-lib.html https://cs.nyu.edu/~bacon/setl-doc.html There's also setlX as alternative: https://randoom.org/Software/SetlX *** TODO 8th Something forth-like. Unfortunately it's commercial, with evaluation copies requiring registration, so getting it running on the CI will be a pain. *** TODO Scopes Intended for game programming, a mixture of Lisp, ML and Python. Quite new, so better wait a month or so until trying it out. http://scopes.readthedocs.io/en/latest/index.html https://bitbucket.org/duangle/scopes/src/default/testing/ *** WONTDO Bennu A game programming language derived from Div Studio. Unfortunately it's not nearly as good for general purpose programming, it's unclear how to create anything more advanced than a fixed-size array, so this one's out. *** TODO Vera Another hardware description language https://semiengineering.com/knowledge_centers/languages/vera/ *** TODO Fortress Fortran as imagined by Sun. Unfortunately it got no funding (as opposed to Chapel and X10), so it's dead. Reference implementation and corresponding docs available at: https://github.com/sirinath/fortress *** TODO JX9 The UnQLite scripting language, available standalone: http://jx9.symisc.net/ *** TODO Ballerina A language designed for networked programs. Seems to be turing-complete though. https://github.com/ballerina-platform/ballerina-lang *** TODO Om A concatenative language designed to be embedded in C++ programs with prefix syntax. https://sparist.github.io/Om/ *** TODO AmbientTalk Somewhat like Smalltalk, Self and Java. Comes with interesting extensions. http://soft.vub.ac.be/amop/at/introduction *** TODO Lemon Yet another embedded scripting language. At least it got closures... http://www.lemon-lang.org/ *** TODO Dao The only reason I'm including this one is because its docs have funny design with too many colors and file sizes in kilobytes. http://daoscript.org/index.html *** TODO Logtalk A Prolog variant https://logtalk.org/ *** TODO Miranda One of the influences on Haskell http://miranda.org.uk/ *** TODO Nemerle The magic sauce for IntelliJ http://www.nemerle.org/About *** TODO Qore Claims to be enterprise-ready http://qore.org/ *** TODO Skip Functional with a powerful type system. Compiles to JS. http://skiplang.com/ *** TODO Picat Practical Prolog http://picat.retina.ufsc.br/picat_guide/ *** TODO Volt Higher-level systems language, implemented in D. https://github.com/VoltLang/Volta *** TODO Emojicode High-level, strongly typed, uses lots of emojis. https://www.emojicode.org/ *** TODO Crack I wonder what they were smoking. http://www.crack-lang.org/ * Other stuff A logical continuation to MAL would be building a byte-code interpreter or simplistic compiler. Resources: - Structure and Interpretation of Computer Programs - Lisp in Small Pieces - Compiler Design in C - http://peter.michaux.ca/articles/scheme-from-scratch-introduction - http://blog.felixangell.com/blog/virtual-machine-in-c - http://www.craftinginterpreters.com/ (incomplete) - https://justinmeiners.github.io/lc3-vm/ - https://bernsteinbear.com/blog/bytecode-interpreters/