タグ

FFIに関するigrepのブックマーク (11)

  • Hyperimport - Import c, rust, zig etc. files in TypeScript

    igrep
    igrep 2023/10/19
    C, Rust, Zigで書いた関数のTypeScript向けの .d.ts などを自動生成。この辺Wasm Component Modelで当たり前になってほしいねぇ
  • HaskellからCのライブラリを使う

    はじめにの前に これはHaskell Advent Calendar 2021の23日目の記事です。長くなってしまったのと、時間がなくて説明が雑になっているところが多々あるかと。C言語で書かれたライブラリをHaskellから使うときに「ここどうやったらいいかな」というのを自力で解決してきた、いくつかの手法を、ひとつのライブラリをHaskellから使っていくというストーリーのなかで解説してみました。今後また手を入れて洗練させていきたいと思っています。 はじめに ふだんHaskellで楽していたとしても、もっと楽しいことをやろうとしたら、多くの場合にC言語のライブラリを使うことになる。Cの関数を使うことは楽しくスリリングな作業になる。柵のない屋上でローラースケートを楽しむようなものだ。使い捨てのコードであれば、FFIで取り込んだ関数をそのまま使えばいい。そうではなく、すこし腰をすえて取り組むコ

    HaskellからCのライブラリを使う
  • [Rust] FFIでよく使う型変換

    自分は最近RustROS2クライアントを書いていて、間に合えばこれについて記事を書こうと思ったのですが、案の定間に合わなかったので代わりに書いています. ROS2はROS (Robot Operating System)というPロボット用フームワークの後継で、ROSが抱えるいくつかの問題点を解消するため、互換性を完全に切って新たに作られたものです.問題点の一つに、言語毎のクライアントライブラリの実装の仕様が統一されていないというものがあり、ROS2ではrclcやrmw等のC言語ライブラリを用意し、各言語のクライアントライブラリはそれらをラップして実装することが求められています. こういった事情でRustROS2クライアントを作るためには、FFIが必須です. と御託はさておき、FFIでよく使う文字列と配列の変換について書いていきます. 前提知識 FFIについては知っているものとします.知

    [Rust] FFIでよく使う型変換
    igrep
    igrep 2020/12/19
    結構ハマりどころが多そうねー
  • GitHub - dtolnay/cxx: Safe interop between Rust and C++

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - dtolnay/cxx: Safe interop between Rust and C++
  • Rustの(FFIまわりの安全性を考慮した)プラグインシステム - Qiita

    let plugin: Box<dyn Plugin> = unsafe { let load_plugin: Symbol<unsafe extern "C" fn() -> Box<dyn Plugin>> = lib.get(b"load_plugin")?; load_plugin() }; let name: String = plugin.name(); println!("1 {} 2 = {}", plugin.operator(), plugin.calc(1, 2)); // drop(plugin); // (2) 上の方法でトレイトオブジェクトを扱うことは(コンパイルエラーを生じないため)一見問題ないように見えます。しかし、load_plugin の戻り値型を Box にしてしまっているせいで所有権がプラグインとローダ間で移動し、(1) においてプラグイン側のアロケ

    Rustの(FFIまわりの安全性を考慮した)プラグインシステム - Qiita
    igrep
    igrep 2019/12/27
  • HaskellからC言語の「値」や「関数形式マクロ」をお手軽に使うための言語拡張CApiFFI - Qiita

    はじめに HaskellのFFIはよくできている。FFIとhsc2hsを組み合わせれば、Cで書かれた処理をHaskellで組み合わせることができる。FFIとhsc2hsがあれば「たいていのこと」はできる。ただ、C側の関数ではない単純な「値」や「関数形式マクロ」を使うためには、.cファイルを書かざるをえない場合がある。 できるなら、CとHaskellをつなぐ部分を、ひとつのファイルで完結させたい。そこで「言語拡張CApiFFIですよ」という話。 言語拡張CApiFFIを使わない場合 Cの関数をHaskellから使う例 Stackを使う。つぎのようにして、ひながたを作成する。

    HaskellからC言語の「値」や「関数形式マクロ」をお手軽に使うための言語拡張CApiFFI - Qiita
    igrep
    igrep 2019/09/09
    inline-c以外にもこんなのがあるのか。知らなかった
  • Haskellを使ってRubyのクラスメソッドを書く(その2) FFI+JSON - Qiita

    module Fib (fib) where -- フィボナッチ数の計算 fibs = 0:1:zipWith (+) fibs (tail fibs) fib i = fibs !! i {-# LANGUAGE OverloadedStrings #-} module Lib where import Foreign.C.String import Data.ByteString.Char8 (unpack, packCString, pack) import qualified Data.ByteString.Lazy.Char8 as BL8 import Data.Aeson -- CStringをAesonが解釈できるData.ByteString.Lazy.Char8に変換し、funcに渡しその結果を、CStringに戻す convertCStringViaJSON :: (

    Haskellを使ってRubyのクラスメソッドを書く(その2) FFI+JSON - Qiita
  • Haskellを使ってRubyのクラスメソッドを書く(その1) FFI - Qiita

    (2018.5.13) (その4)まとめを公開しました。ベンチマーク結果もありますのでご参考に。 はじめに 以前C++を使ってRubyのクラスメソッドを書くを投稿しましたが、大きな配列を扱うことが多いので、C++でデバッグするのはしんどいところがあります。 比較的デバッグがやり易く、速度も出やすいHaskellで書いた整数、浮動小数点、文字列、配列を使う関数をRubyから呼び出す方法を紹介いたします。 GHCのインストールなどでstackを利用している方が多いと思いので、それを使います。 buildなどはPythonからHaskell関数を呼ぶを参考にさせていただきました。 以下 $ stack new testFFI で作成したプロジェクトを前提としてます。 ファイルの変更 app/Main.hsとsrc/Lib.hsにプログラムを書き込みます。 module Main where im

    Haskellを使ってRubyのクラスメソッドを書く(その1) FFI - Qiita
  • HaskellのCインターフェースと選定基準 - Qiita

    あるライブラリのバインディングを作成するにあたって、 FFI、hsc2hs、inline-cの基的な使い方をまとめ、その選定基準を調べてみました。 FFI、hsc2hsの使い方については、RWHにもっと網羅的に書かれていましたので、学習用途ではそちらを参照されたほうがよろしいかと思います。この記事は、使う時にさっと確認するという意図で書かれています。 ちなみに、筆者の環境ですが、OSはWindowsです。MinGWを使いました。 間違いの指摘などあれば、コメント頂けると嬉しいです。 1 FFIでCの関数を利用 まず、C言語で単純な関数を用意します。

    HaskellのCインターフェースと選定基準 - Qiita
  • Haskellにインラインアセンブリを書く - Qiita

    先日 inline-c という、Haskellのソースの中にインラインでCのコードを書けるようにするパッケージがリリースされました。これまでの類似のパッケージよりも使いやすい感じで、愚直にFFIを書いたり、ブリッジライブラリを書いたり使ったりするよりやっぱり楽なもんだなあと感心していたんですが、これってもしかしたらインラインのCのインラインにアセンブリ書けば、Haskellに直接インラインでアセンブリを書くこともできるんじゃないか?と、ふと思ったので、やってみたら普通にできましたという話です。 inline-c inline-c に関しては、GitHubレポジトリに丁寧な README.md があるので、詳しくはこちらを見てくださいというところなんですが、せっかくなので少し試してみましょうか。 {-# LANGUAGE QuasiQuotes #-} import qualified La

    Haskellにインラインアセンブリを書く - Qiita
  • GitHub - nh2/call-haskell-from-anything: Call Haskell functions from any programming language via serialization and dynamic libraries

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - nh2/call-haskell-from-anything: Call Haskell functions from any programming language via serialization and dynamic libraries
    igrep
    igrep 2016/01/31
    "Call Haskell functions from any programming language via serialization and dynamic libraries"
  • 1