Start Debugging

Polars.NET: un motor de DataFrame en Rust para .NET 10 que se apoya en LibraryImport

Un nuevo proyecto Polars.NET es tendencia después de un post de la comunidad del 6 de febrero de 2026. El titular es simple: una API DataFrame amigable con .NET respaldada por Rust Polars, con un ABI C estable e interop basada en LibraryImport para mantener el overhead bajo.

Un post de la comunidad del 6 de febrero de 2026 puso Polars.NET en mi radar: un motor de DataFrame para .NET respaldado por el core de Polars en Rust, exponiendo APIs en C# y F#. La propuesta no es “tenemos un DataFrame”. Es “tenemos un DataFrame que es honesto sobre de dónde viene el rendimiento”.

Si estás construyendo sobre .NET 10 y C# 14, los detalles son la historia completa: ABI C estable, binarios nativos pre-construidos a través de plataformas, e interop moderna vía LibraryImport.

Por qué LibraryImport importa para interop de alto volumen

DllImport funciona, pero es fácil pagar accidentalmente por marshaling y asignaciones en rutas calientes. LibraryImport (interop generada por fuente) es la dirección hacia donde va .NET: puede generar código pegamento que evita la sobrecarga de marshaling en runtime cuando te apegas a firmas blittable y spans explícitos.

Este es el patrón que Polars.NET afirma usar. Un ejemplo mínimo se ve así:

using System;
using System.Runtime.InteropServices;

internal static partial class NativePolars
{
    // Name depends on platform: polars.dll, libpolars.so, libpolars.dylib.
    [LibraryImport("polars", EntryPoint = "pl_version")]
    internal static partial IntPtr Version();
}

static string GetNativeVersion()
{
    var ptr = NativePolars.Version();
    return Marshal.PtrToStringUTF8(ptr) ?? "<unknown>";
}

La parte importante no es pl_version. Es la forma: mantén la frontera delgada, mantenla explícita, y no pretendas que la interop es gratis.

Los binarios nativos pre-construidos son el acelerador de adopción

Las bibliotecas basadas en interop mueren cuando le pides a cada usuario compilar dependencias nativas. Polars.NET menciona explícitamente binarios nativos pre-construidos para Windows, Linux, y macOS.

Cuando lo evalúes, busca un layout de NuGet como:

Esa es la diferencia entre “repo cool” y “dependencia usable en CI y en máquinas de dev”.

La pregunta real: ¿puedes mantener el modelo de memoria predecible?

Los DataFrames son una historia de memoria. Para un core Rust + superficie .NET, busco:

Si esos son sólidos, Polars.NET se vuelve una forma práctica de traer ejecución vectorizada de grado Rust a cargas de trabajo .NET sin reescribir todo.

Fuentes:

< Volver