
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 最新,版权归原站所有,已转换为易读排版。
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.
- 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++.
- 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.
- 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 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。