libffi VS Duktape

Compare libffi vs Duktape and see what are their differences.

libffi

A portable foreign-function interface library. (by libffi)

Duktape

Duktape - embeddable Javascript engine with a focus on portability and compact footprint (by svaarala)
Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
libffi Duktape
11 10
3,053 5,830
1.5% -
7.9 6.4
about 1 month ago about 1 month ago
C JavaScript
GNU General Public License v3.0 or later MIT License
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

libffi

Posts with mentions or reviews of libffi. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-02-25.
  • Error when installing .deb
    2 projects | /r/pop_os | 25 Feb 2023
    Ok, there is a missing dependency, libffi6, which cannot be installed, because it isn't at repos. You can either install it via downloading from other repos (there is a chance in the debian repo), or via compiling on your own (you can start with paying a visit to official site: https://sourceware.org/libffi/). Either way, move carefully and never forget when a dependency is missing, it may be a start of a "missing dependencies hell". And please, be caution, because you can break your system quite easily.
  • Your favorite binding?
    4 projects | /r/raylib | 16 Jan 2023
    I've been working in implementing libffi into Euphoria so we can call Raylib functions directly. Previously, Euphoria did not support passing structures by value and only occasionally could we get away with "faking" it by passing int type values directly (but not float types). Raylib is the first library I've run into that makes heavy use of passing structures by value, so it's been an interesting challenge. My original proof of concept worked well with libffi built as a shared library, so now I'm working on building libffi directly into the backend of Euphoria. Then we'll be off and running with full support for Raylib!
  • Compiler...from scratch
    1 project | /r/SoftwareEngineering | 21 Dec 2022
    I did some more looking around, and I think you should take a look into libffi. It has most of the dirty work done for you, and you can hook it up with your language.
  • kivy-ios / initial build with toolchain keeps getting stuck here (checking for suffix of executables...) after updating macOS and xcode... any thoughts? Thanks!
    2 projects | /r/kivy | 1 Aug 2022
    The last line of output is from configure and appears to be during building of libffi recipe - apparently executing the generate-darwin-source-and-headers.py from libffi repository
  • Libffi - A portable foreign-function interface library.
    1 project | /r/github_trends | 7 May 2022
  • Raspberry Pi 3 Model B+ Guide from Scratch for Home Assistant Core
    1 project | /r/smarthome | 29 Dec 2021
    ok... I did my python 3.9 upgrade on my Rpi3b+ ... here's what I learned: 1) If you're running Debian Buster, you really probably want to upgrade to Bullseye first https://www.tomshardware.com/how-to/upgrade-raspberry-pi-os-to-bullseye-from-buster If you stay on buster, then homeassistant won't start until you build libffi-3.3 as below: 2021-12-29 16:51:14 ERROR (MainThread) [homeassistant.auth.providers] Unable to load auth provider homeassistant: libffi.so.7: cannot open shared object file: No such file or directory https://community.home-assistant.io/t/python-install-on-raspberry-pi-os/241558/12 wget "https://github.com/libffi/libffi/releases/download/v3.3/libffi-3.3.tar.gz" tar zxf libffi-3.3.tar.gz cd libffi-3.3 ./configure sudo make install sudo ldconfig Other than that, it was pretty straightforward. Do be aware that after you redeploy home assistant, a LOT of stuff is happening in the background and it will take a while before everything comes up. Don't freak out. Don't reboot or power cycle. Instead, do this: tail -f /var/log/homeassistant/home-assistant.log and watch the updates
  • Installing Python in Ubuntu 20.04
    2 projects | dev.to | 1 Dec 2021
    build-essential installs everything required for compiling basic software written in C and C++ in this case Python. Read more... zlib1g-devis the development package of the compression library that implements the deflate compression methods and essential in Python's installation and other installations as well. Read more... libncurses5-dev is the development package for the curses library that provides a terminal-independent screen-painting and keyboard-handling tool. Read more... libgdbm-dev is a development library for GDBM whose functionality is to store key/data pairs in a data file. Read more... libnss3-dev Read more... libssl-dev Read more... libreadline-dev Read more... libffi-dev Read more... libsqlite3-dev Read more... wget Read more... libbz2-dev Read more... In the next step we can either manually download the latest release of Python from the Python Official Release page or use wget which we have installed in previous command. To download using wget, paste the following command in the terminal to download Python in the computer.
  • buildozer -v android debug error
    4 projects | /r/kivy | 2 Nov 2021
    [INFO]: -> running basename https://github.com/libffi/libffi/archive/v3.3.tar.gz
  • Part 1. Small Intro to SWIG
    1 project | /r/perl | 22 Oct 2021
    libffi C library
  • Julia ❤ Python
    5 projects | dev.to | 24 Jul 2021
    If you have read my earlier posts you know I love multilingual programming. One important part of multilingual programming is how to interface one language with other. Typically this is called FFI or foreign function interface. At the lowest level often there are libraries (aka bindings) to talk across languages or across implementations of same language e.g. libffi. In my undergrad we did a group project where we created language bindings to separate algorithmic part written in python and opencv and X11 logic in c.

Duktape

Posts with mentions or reviews of Duktape. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-05-04.
  • Roll your own JavaScript runtime, pt. 3
    3 projects | news.ycombinator.com | 4 May 2023
  • How to Create a Modern C Project with CMake and Conan
    2 projects | /r/C_Programming | 26 Apr 2023
    Im my projects I search for single file libs.(like https://github.com/svaarala/duktape etc...)
  • Is there anyway to bypass the limit of rand()?
    1 project | /r/C_Programming | 20 Nov 2022
    Use lrand48(), or better, implement a high-quality RNG like PCG or splitmix64.
  • Libgrapheme: A simple freestanding C99 library for Unicode
    6 projects | news.ycombinator.com | 15 Nov 2022
    You can also refer to the Unicode routines of other small JS engines[1,2], those don’t use ICU either, although the implementations are mercilessly size-optimized (to put it politely) and restricted to what the target JS version requires (e.g. casemapping but no normalization).

    [1] https://github.com/bellard/quickjs/blob/master/libunicode.c

    [2] https://github.com/svaarala/duktape/blob/master/src-input/du...

  • Duktape
    1 project | news.ycombinator.com | 8 Oct 2022
  • Nan Boxing
    3 projects | news.ycombinator.com | 16 Sep 2022
    > memcpy from bytes to a NaN should work fine

    Signaling NaNs are explicitly undefined in C11 F.2.1.: "This specification does not define the behavior of signaling NaNs." - and in practice may be "quieted" by conversion to Quiet NaNs, changing their bit patterns. Fast math optimization flags will also break the hell out of your code by assuming NaNs are impossible. I want to say there are more circumstances where optimizers and compiler generated code can butcher your NaN payloads, but I'd be working off recollected hearsay and I can't find a source, so don't quote me on that.

    NaN boxing is common enough that, if you take the right precautions, a modern compiler should probably support it, maybe. NaN boxing is uncommon enough that, if your codebase needs to be sufficiently portable, you need an opt out for when it breaks. Let's review duktape's scars:

    https://github.com/svaarala/duktape/blob/123d9426d5e5b36d5da...

    https://github.com/svaarala/duktape/blob/5252b7a50611a3cb8bf...

    https://github.com/svaarala/duktape/blob/224a0b89ca08a36e37e...

    Note that "the right precautions" involve unions and proper integer types to avoid optimizer-invoked rewrites of the value and debugging when things go wrong, not simply YOLOing bytes into a double via memcpy. Note that debugging when it all goes terribly wrong can be quite painful. I've personally had the misfortune of being forced to debug duktape being built with fast math optimizatoins enabled on one "rare" platform + build configuration that wasn't caught by duktape's #if defined(__FAST_MATH__) checks linked above (wasn't Clang nor GCC, so go figure it didn't make the same #define)

  • YouTube-dl has a JavaScript interpreter written in 870 lines of Python
    19 projects | news.ycombinator.com | 10 Sep 2022
    I was expecting this to be about Duktape <https://github.com/svaarala/duktape>, but heh, for sure no. I'd bet $1 there's no way youtube-dl would switch, but I wonder if yt-dlp would?
  • Optimizations Enabled by -ffast-Math
    1 project | news.ycombinator.com | 20 Oct 2021
    Fast math optimizations can break code like this by breaking isNaN.

    I was porting a C++ project to a certain platform - and that platform enabled a -ffast-math equivalent by default in Release (but not Debug) builds! This broke duktape, a JS engine said project embedded, in some nasty and subtle ways. Instead of storing a number/pointer/??? (8 bytes) + type tag (4? bytes) for each dynamically typed JS value, duktape can bit-pack values into a single 8 byte "double" value by storing object/string handles as NaN values - this isn't an uncommon trick for dynamically typed scripting stuff:

    https://github.com/svaarala/duktape/blob/c3722054ea4a4e50f48...

    Naturally, the -ffast-math equivalent broke isNaN checks, which caused random object/string handles to be mistakenly reinterpreted as "numbers" - but only in Release builds, for this one particular platform, in one rarely taken branch, so neither QA nor CI caught it, leading to hours of manufacturing a repro case, stepping through an absurd amount of code, and then finally looking at the default build rules and facepalming.

    Cursing the platform vendor under my breath, I overrode the defaults to align with the defaults of every other config x platform combination we already had: no fast math. If you want those optimizations, use SSE-friendly NaN-avoiding intrinsics - or, if you must use the compiler flags, ensure you do so consistently across build configs and platforms, perhaps limited to a few TUs or modules if possible. This allows you to have a chance at using your Debug builds to debug the resulting "optimizations".

  • Can C++ and JS be used together?
    1 project | /r/learnprogramming | 27 Apr 2021
    Sure. For example, DukTape is an implementation of Javascript designed to be embedded in other projects. Google's V8 Javascript engine (used in Chrome), can also be embedded, see Node.Js for example.
  • [AskJS] Do you use JavaScript on Microcontrollers? Which engine / interpreter?
    5 projects | /r/javascript | 30 Mar 2021
    - Duktape (4.8k stars)

What are some alternatives?

When comparing libffi and Duktape you can also consider the following projects:

SWIG - SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages.

V8 - The official mirror of the V8 Git repository

djinni

quickjs - Public repository of the QuickJS Javascript Engine.

Lua - Lua is a powerful, efficient, lightweight, embeddable scripting language. It supports procedural programming, object-oriented programming, functional programming, data-driven programming, and data description.

CppSharp - Tools and libraries to glue C/C++ APIs to high-level languages

jerryscript - Ultra-lightweight JavaScript engine for the Internet of Things.

ChaiScript - Embedded Scripting Language Designed for C++

nelson - The Nelson Programming Language