Skip to content

An experimental repo for Node.js native addons that written in Swift.

License

Notifications You must be signed in to change notification settings

noppoMan/node-native-extension-in-swift

Repository files navigation

node-native-extension-in-swift

   

An experimental repo for Node.js native addons that written in Swift.
The first motivation of implementeing this was reduceing overhead of execution between Node.js and Swift on the Serverless environment.

Writing native extensions with Swift

  1. Define function(s) in a format that can be exported to C/C++ in Swift side.
@_cdecl("swift_fibonacci") // Name the function symbol.
public func fibonacci(_ n: CInt) -> CInt {
    if n == 0 {
        return 0
    } else if n == 1{
        return 1
    }
    return fibonacci(n - 1) + fibonacci(n - 2)
}
  1. Register fibonacci as callable function in Node.js (V8 side)

  2. The exported functions can be imported and executed in Node.js side.

const swift = require('bindings')('swift');

const result = swift.fibonacci(10);
console.log(result);

Running Example

Linux

$ docker build -t node-native-extension-in-swift .
$ docker run -t node-native-extension-in-swift

Mac

$ git clone https://github.com/noppoMan/node-native-extension-in-swift.git
$ cd node-native-extension-in-swift
$ swift build --package-path NativeExtensionInSwift
$ npm i
$ node index.js

License

node-native-extension-in-swift is released under the MIT license. See LICENSE for details.