Ask HN: What languages deploy and are also themselves standalone executables?

4 points by PinkMilkshake ↗ HN
Some examples:

  * Red (might be wrong about this one)
  * Deno
  * Godot

8 comments

[ 4.9 ms ] story [ 33.8 ms ] thread
Smalltalk
Which dialect? As far as I can see, neither Pharo nor Squeak are a standalone executable, and neither deploy standalone executables.
Can you define "standalone" executables and "deploy"? They can mean different things depending on context, for example if you mean a single statically linked executable (rare) or an application bundle that packages dependencies, etc
Sure. Of the three examples I gave, when you download them, you get a single executable file with no dependencies. After you've done some programming, you hit compile and they produce a single executable file with no dependencies. I'm not a professional programmer, but I assume this means everything is statically linked.

It looks like Red might not actually do this.

This isn't really true of any of the examples you've given. Deno has a single executable, sure, but it depends on several system libraries (it's not a statically linked/portable executable). Now those system libraries are almost guaranteed to be there, but they're dependencies nonetheless. Godot is the same, except it depends on a few more system libraries (at least on Linux) and some of those are not guaranteed to be there. Deno projects may be package-able but I do not believe that is the default (it's been awhile since I've tried using it).

It might seem like this is a desirable property to have, but most applications of significant complexity have support libraries that can't or shouldn't be packaged alongside the main executable, and some set of configuration libraries. And programming language implementations are quite complex, and can have big support libraries + their support code (usually for the standard library implementations) and some configuration for the compiler/runtime itself (which is desirable!).

However some implementations can create statically linked executables, and if those applications are simple enough they can live without support libraries and configuration. Some that come to mind are C, C++, Rust, Go, and Zig. Zig is the only one that is small enough not to have a ton of excess in the compiler itself, but C/C++ are quite big (luckily if you use a Unix platform, they're probably already installed) and Rust and Go both come with some source code alongside their compilers, which again, is desirable.

What you're looking for is the extreme exception and not the rule.

If your goal is just to produce a single file that is equivalent to a large number of files and a single executable, I would suggest you look at AppImage(https://appimage.org/) you can make almost anything into an AppImage from any language, although it is not always easy to setup(check out the packaging guide https://docs.appimage.org/packaging-guide/index.html).

> The key idea of the AppImage format is one app = one file

From the website

Factor fits what you're asking for, I think. It doesn't seem to be all that common for compiled languages to be designed "monolithically" with IDE and compiler as one package.