C API to create BigDecimal objects

オープン
#506 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
45/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
静か
技術スタック
c, ruby
領域
api

調査の方向性

リンク先のTrilogy contrib/ruby/ext/trilogy-ruby/cast.c の236-241行目にある変換コードから始め、現在どのように BigDecimal 値を作成しているかを追跡してください。要求されているAPIはバイト文字列と長さを受け取るものとし、Cクライアントが中間の Ruby String を割り当てたり、rb_funcall を介して BigDecimal を呼び出したりせずに BigDecimal オブジェクトを作成できれば完了です。

索引モデルが issue の本文から書いたものです。

説明

BigDecimal is used by various database clients, as well as various serialization libraries. Many of those are implemented in C, and for them creating BigDecimal objects is an important bottleneck.

For example, here's the relevant code in the Trilogy MySQL client gem: https://github.com/trilogy-libraries/trilogy/blob/7fcfe8c1c79208c6c56439d1d29c7dc591442c53/contrib/ruby/ext/trilogy-ruby/cast.c#L236-L241

It needs to:

  • Allocate a Ruby String and cpy the bytes into it.
  • Use rb_funcall to invoke BigDecimal().

The string allocation isn't too bad, but having to use method dispatch is quite costly.

It would be very useful if there was a set of C APIs to efficiently allocate BigDecimal objects:

VALUE BigDecimal_from_str(const char *, size_t len)`
主要言語
C
スター
152
フォーク
99
平均マージ
12時間 41分
マージ済み PR(30日)
1

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

ruby/bigdecimal のほかの issue

ruby/bigdecimal の issue をすべて見る

似ている issue

C の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。