Рубрика «ffi»

Я работаю над bffi‑rs, экспериментальным фреймворком для нативных биндингов Bun, написанным на Rust.

Проект появился из довольно практичной задачи. Я хотел сделать небольшое desktop‑приложение с нативным WebView, но при этом оставить Bun основным рантаймом.

В экосистеме уже есть решения для подобных приложений. Например, некоторые интеграции WebView для Bun используют Rust и napi-rs. В варианте Electrobun, который я рассматривал, для WebView используется Wry, а связка между Rust и JavaScript строится через napi-rsЧитать полностью »

FFI, P/Invoke, EmbeddedResource, DllImportResolver и кроссплатформенная доставка без ручного копирования .dll, .so и .dylib.

В примерах ниже используется условная функция шифрования, но статья не про криптографию. Основная тема - FFI, владение памятью и доставка native-бинарей в .NET. Для production-криптографии лучше брать проверенные библиотеки и режимы, а не писать собственный алгоритм.

Зачем это понадобилось

Когда .NET-коду нужно вызвать Rust-библиотеку, первый прототип обычно заводится быстро:

Сегодня Rust активно используется не только как язык для написания приложений, в том числе системных, но и как язык для написания библиотек, которые подключают к существующим проектам на C и C++.
Это удобно: новую функциональность можно писать на Rust, но при этом не переписывать весь код на нём.

В этой статье я покажу, как:

  • написать библиотеку на Rust;

  • выставить для неё C API через FFI;

  • собрать всё одной командой через CMake;

  • использовать её из C++ кода;

  • реализовать обратные вызовы (callback), которые Rust будет вызывать в C++.

Весь код, части которого приведены в статье, доступен в репозитории:
Читать полностью »

Java — один из наиболее часто используемых языков программирования, который мы еще не обсуждали в нашем Rust Interop Guide. В этой статье мы рассмотрим три различных метода вызова кода Rust из Java: JNI, JNR-FFI и Project Panama. Мы покажем различия между этими методами и проведем базовый бенчмаркинг для сравнения их производительности. Эти методы работают не только для Java, но и для других языков JVM, таких как Kotlin. Здесь мы в основном сосредоточимся на Java, но примеры Kotlin доступны в ветке KotlinЧитать полностью »

Вышла общедоступная версия Java 21. В этот релиз попало около 2500 закрытых задач и 15 JEP'ов. Release Notes можно посмотреть здесь. Изменения API – здесь.

Java 21 является LTS-релизом, а значит у него будут выходить обновления как минимум 5 лет с момента выхода.
Читать полностью »

С каждым релизом PHP становится всё быстрее, а при включении JIT (Just-In-Time) компиляции, достигает почти отметок того же C.

image

У многих в своё время, наверное, было желание легкого написание консольных и оконных приложений. Ребята рунета иногда писали незаменимые приложения для решения мелких задач и делились на форумах, хотя некоторые из них и содержали костыли.

Однако времена меняются, и люди начали осознавать свои ошибки, переходя, скажем, на ООП.

Чтобы поностальгировать и продемонстрировать нового Франкенштейна, мы соберем полноценное консольное exe-приложение на PHP.Читать полностью »

Foreign Function Interface — это перспективная альтернатива для традиционных PHP-расширений.

Сегодня мы будем разбирать FFI-библиотеку для работы с liblua5 из PHP, которая позволит исполнять скрипты на Lua из нашего приложения.

Встраиваем Lua в PHP через FFI - 1

Читать полностью »

Обёртку можно написать вручную, когда API состоит из небольшого количества функций и сигнатура этих функций меняется нечасто. FMOD — звуковой движок с большим количеством функций, точно не тот случай:

Types: 19
Callbacks: 96
Structures: 57
Structure Fields: 352
Enumerations: 77
Enumeration Variants: 693
Functions: 573
Function Arguments: 1590

Стоимость ручной разработки обёртки для такого API будет высокой, поддержка при каждом обновлении мучительной, не говоря уже об ошибках и опечатках, которые появятся в процессе редактирования.

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js