3 ms·
Polycompiler: Merge Python and JavaScript code into one file that runs in both
- GeekFortyTwo 1y agoOk, 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 1y agoMaybe we can convince Marc Feeley to write a backend for Gambit that targets this.
- belmarca 1y agoHey, 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 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 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://mycdn.com/mylibrary.js". - https://github.com/gambit/python 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 https://github.com/belmarca). AMA if you wish!
- bitwize 1y agoIt 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".
- belmarca 1y agoBTW I'd love to hear your feedback if you have tried the above examples!
- gobblik 1y agoThe tricks it uses are explained well in the video. Would love to see this expand to include more languages.
- taraparo 1y agoYou could also write your app in Haxe instead and cross compile to Javascript, Python, C++, Java, Lua,...
- rafram 1y agoThis 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.
- eesmith 1y agoSee even https://en.wikipedia.org/wiki/Polyglot_(computing) https://en.wikipedia.org/wiki/Polyglot_(computing) .
- omneity 1y agoHaxe 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 https://haxe.org/use-cases/who-uses-haxe.html
- rafram 1y ago"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.
- jorl17 1y agoIt'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!!
- mmastrac 1y agoI'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 `*/`.
- d0mine 1y agouse r"" (raw-string literals), to avoid breaking on invalid Python escape sequences in the javascript part.