返回资讯中心
外部精选
软件工程
#开发者实时流

Rustext: A native GUI/TUI text editor in pure Rust with zero dependencies

Editor de código y texto nativo de ultra-baja latencia y alto rendimiento

Hacker News 最新boleklolek2026/10/28 · 7 天前30 分钟阅读

以下正文同步自 Hacker News 最新,版权归原站所有,已转换为易读排版。

Editor de código y texto nativo de ultra-baja latencia y alto rendimiento

100% Rust Estándar • Cero Dependencias de Terceros (std::*) • Arranque en ~2ms

🇪🇸 Leer en Español • 🇬🇧 Read in English

Rustext es un editor de código y texto nativo de ultra-baja latencia y alto rendimiento, escrito 100% en Rust puro utilizando exclusivamente la biblioteca estándar (std), con cero dependencias de terceros (Cargo.toml completamente vacío).

Inspirado en la velocidad e inmediatez de Sublime Text y la ergonomía moderna de VS Code / Zed, Rustext ofrece una experiencia de desarrollo nativa fluida en cualquier máquina, arrancando en ~2 milisegundos y utilizando apenas una fracción de la memoria de los editores convencionales.

Consulte el 📖 Manual de Usuario y Referencia Técnica Completa (MANUAL.md) para explicaciones en profundidad de la arquitectura, configuración y herramientas.

┌──────────────────────────────────────────────────────────────────────────────────────────────────┐ │ Archivo Editar Selección Ver Preferencias Extensiones Herramientas Ayuda │ ← Menú Nativo ├──────────────────┬───────────────────────────────────────────┬───────────────────────────────────┤ │ PROYECTO [+] ↺ × │ 1: main.rs [ACTIVO] │ 2: config.ini │ ← Split Editor (Ctrl+) ├──────────────────┼───────────────────────────────────────────┼───────────────────────────────────┤ │ ▼ src │ 1 │ pub fn main() { ▲ │ 1 │ [gui] ▲ │ │ • lib.rs │ 2 │ let config = EditorConfig(); █ │ 2 │ minimap = true █ │ ← Deslizador Viewport │ • main.rs │ 3 │ println!("Rustext listo"); │ │ 3 │ minimap_width = 100 │ │ │ ▶ editor │ 4 │ } ▼ │ 4 │ theme = "tokyo-night" ▼ │ │ ▶ gfx │ ~ │ ░ │ ~ │ ░ │ ← Minimapa Sintáctico ├──────────────────┴───────────────────────────────────────────┴───────────────────────────────────┤ │ [ EDIT ] src/main.rs | Línea 3, Col 5 | UTF-8 | Rust | Cursores: 1 | Panel: 1/2 │ ← Barra de Estado └──────────────────────────────────────────────────────────────────────────────────────────────────┘

⚡ Características Principales

Cero Dependencias Externas (Cargo.toml 100% limpio):

Arquitectura de Búfer Piece Table de Alto Rendimiento:

Integración Git en Vivo (Git Gutter, Inline Blame & Hunk Diff Popup):

División de Vistas y Paneles Independientes (Split Editor):

Protección contra Pérdida de Datos (Diálogo de Confirmación al Cerrar):

Sistema de Temas Dinámico y Declarativo (.theme / .ini) Sin Recompilación:

Rasterizador de Fuentes Tipográficas y Corrección Gamma (sRGB IEC 61966-2-1):

Soporte HiDPI Nativo y Escalado de Coordenadas del Monitor:

Font Shaping, Hinting, Antialiasing Analítico y Efectos Visuales:

Selector de Fuentes Interactivo y Sistema Tipográfico Avanzado (Ctrl + Shift + T):

Motor Tipográfico Vectorial TrueType (.ttf), Antialiasing Subpíxel LCD y Caché Tipográfica:

Sistemas de Cajas Flexibles (Flexbox Layout Engine) y Arquitectura Reactiva vs. Retained:

Árbol de Proyecto y Explorador Lateral (File Explorer):

Búsqueda Global en Todo el Proyecto (Ctrl + Shift + F):

Espacios de Trabajo y Gestión de Proyectos (Workspace Management):

Selector y Filtro de Archivos Recientes (Ctrl + R):

Terminal Integrado Nativo Acoplado (Ctrl + ` / Ctrl + ~):

Coloreado de Paréntesis por Pares (Bracket Pair Colorization):

Soporte Sintáctico Ampliado y Multi-Lenguaje Nativo:

Capacidades LSP de Élite (Suite Completa Zero-Dependency, std::*):

Ergonomía de Edición Élite y Pila de Navegación (Jump List):

Diagnósticos del Compilador y Linter en Vivo:

Motor de Snippets e Indentación Inteligente:

Rustext incluye un banco de pruebas y benchmarks integrados en src/bin/benchmark_comparison.rs y src/bin/memory_profile.rs que miden empíricamente tiempos de arranque, memoria física (VmRSS), throughput de edición y huella binaria frente a los editores más representativos de la industria:

1. Benchmark comparativo frente a otros editores (VS Code, Vim, Micro):

cargo run --release --bin benchmark_comparison

2. Profiling de memoria heap exacta y RAM física bajo cargas extremas (hasta 100 MB):

cargo run --release --bin memory_profile

🏆 Tabla Comparativa: Rustext vs Editores de la Industria (Mediciones Reales en Linux x86_64)

Métrica / Atributo Rustext VS Code (Code-OSS) Sublime Text 4 Vim 9.2 Micro Helix 24.07

Tecnología Base Rust puro (std::*) Electron / Node / Chromium C++ nativo / Python C nativo Go runtime Rust / tree-sitter

Dependencias Externas 0 (Cero crates)

1,000 dependencias npm Cerrado / Propietario libc, ncurses Go stdlib + deps ~140 crates

Tamaño Binario / Disco ~688 KB ~824 MB (~1,200x) ~45 MB ~6.4 MB ~13.0 MB ~24.5 MB

Inicio en Frío (Cold Start) 0.7 µs - 2.5 ms 1,500 - 2,500 ms (~1,000x) 80 - 150 ms 8 - 15 ms 20 - 45 ms 12 - 25 ms

Memoria RAM en Reposo 2.6 - 3.1 MB (36 MB GUI) ~350 - 450 MB ~65 - 85 MB ~9.4 MB ~22.3 MB ~18.5 MB

Memoria con Archivo 25 MB 29.0 MB

600 MB (latencia alta) ~60 MB ~38 MB ~95 MB ~85 MB

Throughput Carga (25 MB) 488.6 MB/s ~25 MB/s (alerta archivo grande) ~180 MB/s ~120 MB/s ~65 MB/s ~210 MB/s

Latencia de Inserción < 20 µs ~10 - 25 ms < 1 ms < 1 ms < 2 ms < 1 ms

Rendimiento Viewport ~95 a 1,400+ FPS 60 FPS (tope VSync) 60 - 120 FPS N/A (TUI) N/A (TUI) N/A (TUI)

Tiempo Compilación Limpia ~2.0 segundos Varios minutos N/A (cerrado) ~30 segundos ~15 segundos ~1 min 45 s

Resultados Detallados de Escalabilidad en Memoria (Heap vs RAM Física):

Escenario Tamaño Archivo Líneas Memoria Heap Neta Ratio Memoria VmRSS del SO (RAM Física) Throughput Carga Renderizado Viewport

Script Pequeño 1.00 KB 21 1.28 KB 1.28x 2.67 MB 136.9 MB/s 599.6 µs (~1,667 FPS)

Módulo Típico 10.00 KB 204 12.03 KB 1.20x 2.80 MB 422.9 MB/s 806.6 µs (~1,240 FPS)

Módulo Extenso 50.00 KB 1,013 58.03 KB 1.16x 4.64 MB 617.3 MB/s 928.0 µs (~1,077 FPS)

Archivo Mediano 500.00 KB 10,131 628.03 KB 1.26x 4.78 MB 603.0 MB/s 1.35 ms (~740 FPS)

Bundle / Dataset 2.00 MB 41,497 2.50 MB 1.25x 8.30 MB 240.4 MB/s 621.1 µs (~1,610 FPS)

Volcado de Código 10.00 MB 207,481 12.00 MB 1.20x 24.40 MB 410.2 MB/s 647.4 µs (~1,544 FPS)

Log Grande 25.00 MB 518,702 29.00 MB 1.16x 58.23 MB 452.9 MB/s 542.0 µs (~1,845 FPS)

Dump Servidor 50.00 MB 1,036,678 58.00 MB 1.16x 112.60 MB 481.3 MB/s 651.5 µs (~1,535 FPS)

Archivo Masivo 100.00 MB 2,053,953 116.00 MB 1.16x 220.55 MB 386.6 MB/s 638.0 µs (~1,567 FPS)

Sesión Multi-Pestaña Cotidiana (5 pestañas abiertas simultáneamente):

Archivos cargados: main.rs (15 KB), config.ini (2 KB), parser.rs (45 KB), large_module.rs (250 KB), data_dump.json (1 MB).

Memoria Heap neta usada por las 5 pestañas: 1.64 MB (~336 KB promedio por pestaña).

Memoria física total del proceso: 36.30 MB (incluyendo el Framebuffer gráfico 800×600 a 32-bit de 1.9 MB, glifos bitmap, barra de menús, árbol de proyecto e historial).

Renderizado del fotograma completo con Sidebar + Menú: 1,128 µs (~886 FPS sostenidos).

Tip

Renderizado en Tiempo Constante $\mathcal{O}(1)$:

Observe la columna de renderizado: abrir y dibujar un archivo de 1 KB toma ~600 µs, y un archivo de 100 MB con 2 millones de líneas toma exactamente lo mismo (~638 µs). El motor gráfico calcula el recorte de visibilidad en el viewport y solo consulta las líneas activas en pantalla.

Rustext ha sido auditado estructuralmente siguiendo estándares internacionales de seguridad de código (OWASP y taxonomía CWE).

Al no incluir ninguna dependencia externa en Cargo.toml, la superficie de ataque a la cadena de suministro es del 0.0%. No existen riesgos de typosquatting, paquetes comprometidos en registros de terceros ni vulnerabilidades transitivas ocultas en el árbol de dependencias.

  1. Seguridad de Memoria por Construcción

El núcleo del editor (Piece Table, buffers de texto, resaltador léxico, motor Flexbox y estado reactivo) está implementado en 100% Safe Rust. Erradica por diseño vulnerabilidades de desbordamiento de búfer (buffer overflow), uso después de liberación (use-after-free) y punteros colgantes característicos de editores en C/C++.

  1. Matriz de Auditoría y Hallazgos Técnicos

Identificador Severidad Debilidad / Vulnerabilidad CWE Asociado Estado / Mitigación Implementada

SEC-01 Media Carga de extensiones locales no confiables CWE-829 / CWE-94 Mitigado: Confinamiento estricto a ~/.rustext/extensions sin ejecución de código dinámico.

SEC-02 Media Guardado no atómico y truncamiento destructivo CWE-377 / CWE-459 Mitigado: Guardado atómico con archivo hermano temporal, sync_all() y fs::rename().

SEC-03 Baja Inyección de argumentos CLI en portapapeles Wayland CWE-88 Mitigado: Canalizado directo a wl-copy vía stdin, eliminando desbordamiento ARG_MAX e inyección.

SEC-04 Baja Recursión descontrolada por enlaces simbólicos cíclicos CWE-674 / CWE-59 Mitigado: GlobalSearchEngine ignora symlinks y limita la profundidad de recursión a 32 niveles.

SEC-05 Baja Deserialización de borradores sin confinamiento CWE-22 Mitigado: Confinamiento estricto a drafts/, validación is_safe_draft_path() y rechazo de ...

SEC-06 Info Consola en modo raw tras pánicos inesperados CWE-755 Mitigado: std::panic::set_hook instalado para restaurar cursor y ejecutar stty sane.

SEC-07 Baja Creación insegura de archivos shm temporales CWE-377 / CWE-59 Mitigado: Apertura exclusiva O_CREAT | O_EXCL con permisos UNIX 0600 en /dev/shm.

SEC-08 Media Travesía de directorios en temas externos CWE-22 Mitigado: Validación is_safe_theme_name() (lista blanca y límite 64 bytes) y verificación canónica starts_with(canonical_base).

SEC-09 Baja Agotamiento de recursos / DoS por lectura no acotada de temas CWE-400 / CWE-776 Mitigado: Límite de tamaño MAX_THEME_FILE_SIZE = 512 KB y cuota máxima de escaneo de 256 archivos por directorio.

SEC-10 Baja Fuga acumulativa de memoria en la Paleta de Comandos CWE-401 Mitigado: Migración de Box::leak a Cow<'static, str> en CommandItem, autoliberando memoria al cerrar el modal.

  1. Ejecución Segura de Procesos y Resistencia a ReDoS

Sin Shell Wrappers: La ejecución de formateadores (rustfmt, prettier, etc.) y linters se efectúa mediante invocaciones vectoriales directas Command::new(), sin pasar por intérpretes tipo sh -c ni permitir inyección de comandos mediante metacaracteres.

Inmunidad a ReDoS: El motor de búsqueda y el tokenizador sintáctico utilizan autómatas de tiempo lineal determinista $\mathcal{O}(N)$ sin expresiones regulares con retroceso catastrófico.

⌨️ Atajos de Teclado Principales

Atajo Acción

Ctrl + S Guardar el archivo actual

Ctrl + O Abrir archivo mediante diálogo interactivo

Ctrl + Shift + O Abrir Carpeta de Proyecto / Espacio de Trabajo

Ctrl + Shift + P / Ctrl + Alt + W Cambiar Espacio de Trabajo / Proyectos Recientes

Ctrl + R Abrir Archivo Reciente... (Selector con filtro difuso)

Ctrl + T Abrir nueva pestaña vacía

Ctrl + W Cerrar pestaña activa

Ctrl + Q Salir de Rustext

Ctrl + B Alternar Explorador Lateral (Árbol de Proyecto)

Ctrl + Shift + G Actualizar Estado Git (Git Refresh)

Alt + H Git: Abrir / cerrar inspección de Hunk Diff en el cursor

Alt + R Git: Revertir atómicamente el Hunk actual a Git HEAD

Ctrl + M Alternar Minimapa Gráfico de Código

Ctrl + ` / Ctrl + ~ Alternar Terminal Integrado Nativo (Consola)

Ctrl +
Alternar División Vertical de Pantalla (Split Editor)

Ctrl + Shift +
Alternar División Horizontal de Pantalla

Alt +
Cambiar Foco de Panel (Switch Split Pane)

Ctrl + D Seleccionar palabra / Añadir siguiente ocurrencia (Multicursor)

Ctrl + K / Ctrl + J Añadir cursor en la línea superior / inferior

Esc Colapsar multicursores a cursor único / Cancelar modal

Ctrl + Z / Ctrl + Y Deshacer / Rehacer atómico

Ctrl + F Buscar en el documento

Ctrl + H Buscar y Reemplazar

Ctrl + Shift + F Búsqueda Global en Todo el Proyecto

Ctrl + Espacio Autocompletado Contextual Inteligente

Ctrl + P Ir a Archivo / Abrir Paleta de Comandos (>)

Ctrl + Shift + T Selector de Fuentes y Tipografía (Modal con Vista Previa)

Ctrl + + / Ctrl + = Aumentar tamaño de fuente (Zoom In)

Ctrl + - Disminuir tamaño de fuente (Zoom Out)

Ctrl + 0 Restablecer tamaño de fuente (Reset Zoom a 12 pt)

PageUp /

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →