Skip to content(if available)orjump to list(if available)

Polycompiler: Merge Python and JavaScript code into one file that runs in both

mmastrac

I'll raise you a polyglot script that doesn't require eval: :)

  1 // len("""
  console.log('javascript');
  /* """)
  print('python');
  # */
Example:

  # python3 /tmp/test.py
  python
  # node /tmp/test.js
  javascript
I _believe_ the only source limitations are the the JS cannot contain `"""` and Python cannot contain `*/`.

taraparo

You could also write your app in Haxe instead and cross compile to Javascript, Python, C++, Java, Lua,...

jorl17

It's so good to see Haxe mentioned!

I ported an entire AS3/Flash game to Haxe that my friends had written during our college years, as a kind of "thank you" present for ten years of friendship (adding mobile, cross-platform, gamepad controller, netplay and other things).

While the tooling was spotty, I found the experience wonderful! Haxe felt like a decent language with laudable goals and a nice community.

I hope one day I find another reason to work with Haxe.

Does anyone have any project that is using Haxe in production? Would love to hear about such stories!!

outofpaper

Not my project but there's always Dead Cells and the stories behind its developed.

betterThanTexas

To what extent does Haxe still align with modern Javascript? Is modern javascript even considered to be the basis of actionscript anymore?

rafram

This seems to be intended as an interesting experiment (in the same genre as things like quines). There are obviously more production-ready ways to compile code for multiple runtimes.

omneity

Haxe is not just an experiment. It is a mature language and ecosystem used in production. You will find it powering many games for example.

I used it a long long time ago on one of my first freelance gigs (with a PHP target). It was already quite solid and saved me the need to use a PHP framework.

I also remember using it as a typed javascript pre-compiler, at a time where FB Flow and MS Typescript were still fighting over developer mindshare. I would probably still use it if TS didn't take over the ecosystem entirely.

https://haxe.org/use-cases/who-uses-haxe.html

rafram

"This" = Polycompiler (the OP project), not Haxe. Polycompiler appears to be intended as a toy/experiment, so it doesn't really make sense to compare it to Haxe.

gobblik

The tricks it uses are explained well in the video. Would love to see this expand to include more languages.

GeekFortyTwo

Ok, now write your code in a metalanguage(i believe fut might work), and now we can write once and run on two different engines.

bitwize

Maybe we can convince Marc Feeley to write a backend for Gambit that targets this.

belmarca

Hey, I'm writing this from Pr Feeley's lab :)

I understand your comment was tongue-in-cheek, but we certainly have an interest in cross-language interoperability! You can check out our work here:

- https://try.gambitscheme.org is Gambit compiled to JavaScript with the universal backend. Evaluate \alert("hello!") at the REPL to see the JS<->Scheme Syntactic FFI in action.

- https://codeboot.org is our own Python interpreter running in the browser. It has a Python<->JS FFI. Evaluate \alert("hello!") at the REPL to test it out. You can even import JS libraries using the standard Python syntax by replacing the identifier with a string: import "https://mycdn.com/mylibrary.js".

- https://github.com/gambit/python is a Gambit module that integrates Gambit with CPython, using the same syntactic FFI. You can import PyPI modules from Gambit.

References to conferences/papers describing these features can be found on my GH profile (https://github.com/belmarca). AMA if you wish!

bitwize

It was more "ha ha only serious" than purely tongue-in-cheek. I'm familiar with Gambit's multi-backend targeting and have experimented with its JS backend. I consider it one of the quickest, and most comprehensive, ways to get "Scheme in the browser".