C API to create BigDecimal objects

Abierto
#506 4 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
45/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
c, ruby
Área
api

Línea de trabajo

Comienza con el código de conversión enlazado de Trilogy contrib/ruby/ext/trilogy-ruby/cast.c en las líneas 236-241 y sigue cómo crea actualmente valores BigDecimal. La API solicitada debe aceptar una cadena de bytes y una longitud; se considera terminado cuando los clientes de C puedan crear objetos BigDecimal sin asignar un Ruby String intermedio ni llamar a BigDecimal mediante rb_funcall.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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)`
Lenguaje dominante
C
Estrellas
152
Forks
99
Merge medio
12 h 41 min
PR fusionados (30 d)
1

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de ruby/bigdecimal

Todos los issues de ruby/bigdecimal

Issues similares

Más issues de C

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.