I am looking at Edge.js. It has a disadvantage compared to Jint. It requires installing node.exe for Windows on the Rust server host. But it's far more powerful than Jint. C# code called from Javascript is compiled on the spot. Javascript doesn't have to deal with types or anything like that. You just pass a block of C# code as a commented block of text, and Edge unwraps it and compiles it on the spot.
An edge connects two nodes. This edge connects Node.js and .NET. V8 and CLR/Mono - in process. On Windows, MacOS, and Linux.
You can script C# from a Node.js process:
JavaScript:
var edge = require('edge');
var helloWorld = edge.func(function () {/*
async (input) => {
return ".NET Welcomes " + input.ToString();
}
*/});
helloWorld('JavaScript', function (error, result) {
if (error) throw error;
console.log(result);
});
You can also script Node.js from C#:
C#:
using System;
using System.Threading.Tasks;
using EdgeJs;
class Program
{
public static async void Start()
{
var func = Edge.Func(@"
return function (data, callback) {
callback(null, 'Node.js welcomes ' + data);
}
");
Console.WriteLine(await func(".NET"));
}
static void Main(string[] args)
{
Task.Run((Action)Start).Wait();
}
}
Edge.js enables you to run Python and Node.js in-process.
Install edge and edge-py modules:
JavaScript:
npm install edge
npm install edge-py
In your server.js:
JavaScript:
var edge = require('edge');
var hello = edge.func('py', function () {/*
def hello(input):
return "Python welcomes " + input
lambda x: hello(x)
*/});
hello('Node.js', function (error, result) {
if (error) throw error;
console.log(result);
});
Run and enjoy:
Python:
$>node py.js
Python welcomes Node.js