quickjs_dart 0.0.5
quickjs_dart: ^0.0.5 copied to clipboard

A dart binding and JSEngine for QuickJS, using Dart:FFI. DartVM can run JSEngine now, supporting Android currently, will support more platform sool

QuickJS Dart #

A dart binding for QuickJS, a modern Javascript interpreter written in C by Fabrice Bellard

We can run javascript VM embedded to DartVM, using Dart:FFI

ENV requirement #

  1. dart lang 2.8+
  2. clang
  3. llvm(optional)
  4. ios 9+
  5. android api 21+

Quick Start #


// dart code

import 'package:quickjs_dart/quickjs_dart.dart';

void main(){

   JSEngine(); // initialize engine

   String jsString = r"""
      function testAdd(x,y){
         return x+y;
      }
      testAdd
   """
   var engine= JSEngine.instance; // singleton

   var testAdd = engine.evalScript(jsString);

   print(testAdd.isFunction()); // true
   
   var result= testAdd.callJS([engine.newInt32(12),engine.newInt32(34)]); // 2 params, 12 and 34;
   
   result.jsPrint(); // use `console.log` in javascript, 46 is the result;
}

Table of Content #

  1. QuickJS Dart
    1. ENV requirement
    2. Quick Start
    3. Table of Content
    4. Build and Run (local machine only)
    5. Why not V8/jscore, and why QuickJS
    6. Why not PlatformChannel/MethodChannel and why Dart:FFI
    7. Docs and APIs

Build and Run (local machine only) #

  1. build quickjs lib for ios/android/dartVM

    sh ~/.build_all.sh
    

    or build android only

    sh ~/.build_android.sh
    

    or bulid ios only

    sh ~/.build_ios.sh
    
  2. run dart on dart vm

     dart main.dart
    
  3. if you come up with file system relative paths not allowed in hardened programs with macos, run this

    codesign --remove-signature /usr/local/bin/dart
    
  4. run flutter example, android or ios

    note: run flutter doctor -v to examine the flutter env is correctly

    Then you can run example app

    cd example && flutter run
    

Why not V8/jscore, and why QuickJS #

V8 is too big for small app and IOT devices. jscore is a bit old and slow for modern app.

Quickjs follows latest Javascript standard (ES2020) now. And it is fast enough, see benchmark

Why not PlatformChannel/MethodChannel and why Dart:FFI #

PlatformChannel/MethodChannel(s) are designed for communication, post and receive data, and use features that had been made by exisiting Android/iOS/Native modules. It's not managed by Dart/Flutter itself.

Using Dart:FFI, we get possibilities to expand the dart/flutter. We can call native function, back and forward, adding Callbacks, manage memory of functions and values.

Docs and APIs #

Do it later

3
likes
80
pub points
0%
popularity

Publisher

Unknown

A dart binding and JSEngine for QuickJS, using Dart:FFI. DartVM can run JSEngine now, supporting Android currently, will support more platform sool

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

ffi, flutter, logger, meta

More

Packages that depend on quickjs_dart