Integración de la IA
Indexación vectorial nativa y consultas vectoriales más rápidas
4D 21 R5 introduce la indexación vectorial nativa para campos 4D.Vector, lo que supone, por primera vez en 4D, una indexación específica para datos basados en embeddings.
Esto mejora el rendimiento de las búsquedas por similitud a medida que crecen los conjuntos de datos, lo que resulta especialmente útil para la búsqueda semántica, los sistemas de recomendación, RAG y otros flujos de trabajo impulsados por IA. Las consultas en campos vectoriales indexados devuelven los mismos resultados que las consultas no indexadas, pero de forma más rápida.
Se pueden configurar los índices coseno, producto escalar (dot) y euclidiano directamente en el editor de estructuras, mientras que el índice automático existente sigue estando disponible para vectores nulos. Cada índice se puede habilitar de forma independiente, por lo que solo se mantienen aquellos que la aplicación utiliza realmente.
Los campos vectoriales indexados también se pueden utilizar con operaciones de ordenación, lo que permite ordenar los resultados de las consultas según la similitud vectorial, al tiempo que se aprovecha el nuevo índice.
Los índices vectoriales están integrados en el ciclo de vida estándar de la base de datos, lo que incluye la reindexación, la copia de seguridad, la verificación MSC y la reparación.
Para las aplicaciones que ya almacenan representaciones en campos 4D.Vector, esto le ofrece una vía directa hacia una búsqueda vectorial más rápida sin cambiar la forma en que se modelan sus datos ni los resultados que devuelven sus consultas.
Gestión programática de índices vectoriales
4D 21 R5 también incorpora la gestión programática de la indexación vectorial, de modo que puede crear, inspeccionar y gestionar índices vectoriales directamente desde el código, en lugar de depender únicamente del Editor de estructuras.
CREATE INDEX y SET INDEX admiten índices de tipo coseno, producto escalar (dot) y euclidiano, mientras que DataClass.getIndexes() le permite comprobar los índices disponibles en una clase de datos en tiempo de ejecución. Esto resulta especialmente útil a la hora de validar despliegues o crear herramientas de diagnóstico, ya que puede confirmar que los índices esperados están presentes sin necesidad de abrir manualmente la estructura de la base de datos.
El almacenamiento vectorial también es más flexible. 4D.Vector.new() utiliza ahora una precisión de 32 bits de forma predeterminada, lo que ayuda a reducir los requisitos de almacenamiento, mientras que la precisión de 64 bits sigue estando disponible cuando su caso de uso lo requiera.
En conjunto, estos cambios facilitan el uso de la búsqueda vectorial más allá del desarrollo: puede configurar los índices de forma visual mientras diseña la base de datos y, a continuación, validarlos y gestionarlos por programación una vez que la aplicación esté desplegada.
Invalidación automática de embeddings en 4D Embedding Studio
Mantener las representaciones vectoriales sincronizadas con los datos de negocio es más fácil con 4D Embedding Studio. Cuando los datos de origen cambian, 4D ahora puede identificar los vectores que ya no representan a la entidad actual, en lugar de dejar embeddings obsoletos.
Si se modifica un atributo utilizado para construir una frase de embedding, el vector relacionado se invalida automáticamente. Al utilizar un campo booleano de modificación (dirty) correspondiente, 4D puede marcar el vector para su regeneración, al tiempo que mantiene disponible el valor actual. De lo contrario, el vector se borra.
La misma protección se aplica cuando cambia la configuración del embedding. La actualización de la frase puede desencadenar un flujo de trabajo de recálculo más amplio, mientras que el cambio del modelo de embedding impide que los vectores creados con el modelo anterior sigan reutilizándose.
Esto elimina gran parte del seguimiento manual y reduce el riesgo de que las funciones de búsqueda semántica, RAG o de recomendación trabajen con embeddings obsoletos a medida que evolucionan sus datos y la configuración de IA.
Seguridad
Firma S/MIME para SMTP Transporter
Ahora los correos electrónicos salientes pueden firmarse digitalmente con S/MIME directamente a través de SMTP Transporter, lo que permite a los destinatarios verificar tanto quién envió el mensaje como si su contenido se modificó tras la firma.
Esto resulta especialmente útil para facturas, autorizaciones, informes, notificaciones y otras comunicaciones empresariales en las que la autenticidad es fundamental.
La firma se integra en el flujo de trabajo SMTP existente. Debe proporcionar un certificado que contenga la clave privada, ya sea directamente como archivo o como Blob a través de certificate, o bien haciendo referencia al almacén de certificados del sistema con certificateName. También se admiten certificados protegidos con contraseña.
Dado que la firma se mantiene dentro de la API estándar de SMTP Transporter, puede reforzar los flujos de trabajo de correo electrónico de confianza sin necesidad de introducir una herramienta de firma independiente ni una capa de integración personalizada.
OpenSSL 4 para NGTCP2 y QUIC
La pila de red utilizada por las funciones relacionadas con QUIC, WebSocket y TLS ahora se basa en OpenSSL 4 en lugar de BoringSSL, lo que moderniza la base de seguridad al tiempo que mantiene prácticamente inalterado el comportamiento de las aplicaciones existentes.
Para la mayoría de las aplicaciones, la actualización es transparente. Lo principal que hay que comprobar es la configuración de TLS: SET DATABASE PARAMETER ahora solo admite TLS 1.2 y TLS 1.3 como versiones mínimas de TLS, y la versión predeterminada del servidor es TLS 1.3.
El cambio también afecta a las operaciones basadas en OpenSSL, como el cifrado, la generación de certificados, la generación de claves, el proveedor OpenSSL y el controlador ODBC.
No es necesario realizar ningún paso de activación ni migración, pero las aplicaciones que aún dependan de versiones anteriores de TLS deben revisar su configuración antes del despliegue.
SERVIDOR HTTP
Limitación de tasa integrada para el servidor web 4D
El servidor web de 4D ahora puede limitar la carga de trabajo excesiva antes de que afecte al resto de la aplicación, lo que le ofrece un mayor control sobre cómo se comparten los recursos del servidor.
Puede definir límites para el volumen de solicitudes, los datos entrantes y salientes, las sesiones activas, las sesiones de invitado y los conjuntos de entidades. Estos límites pueden aplicarse a todo el servidor o a sesiones individuales, lo que ayuda a evitar que un cliente o una carga de trabajo consuma una cantidad desproporcionada de capacidad.
Cuando se alcanza un límite, la solicitud se rechaza de forma anticipada con el código HTTP 429 Too Many Requests (Demasiadas solicitudes), antes de que se cree un proceso web. Los clientes también pueden recibir un valor Retry-After cuando sea apropiado, lo que les da una señal clara sobre cuándo volver a intentarlo.
Las cuotas se pueden configurar al inicio, cargarse desde HTTPQuotas.json o actualizarse en tiempo de ejecución mediante WEB Server().quotas. Por defecto no cambia nada, por lo que las aplicaciones existentes mantienen su comportamiento actual hasta que se configuren explícitamente las cuotas.
Esto no sustituye a un proxy inverso, un cortafuegos ni un WAF. En cambio, añade una protección específica para las aplicaciones dentro del propio 4D, lo que ayuda a que las aplicaciones de producción mantengan una mayor capacidad de respuesta durante los picos de tráfico o ante un uso inadecuado.
BASE DE DATOS
Instalador de Windows modernizado y despliegue preparado para CI
La instalación de 4D en Windows es ahora más sencilla para los usuarios individuales y mucho más fácil de automatizar para los equipos que gestionan entornos de compilación o despliegue.
Todos los idiomas compatibles se instalan de forma predeterminada, lo que elimina la necesidad de seleccionar paquetes de idioma durante la configuración y evita problemas posteriores relacionados con la falta de idiomas.
El mismo instalador puede gestionar 4D, 4D Server, 4D Volume Desktop y 4D Components, con todo seleccionado de forma predeterminada, aunque le permite instalar solo lo que necesite.
Para la integración continua (CI) y el despliegue automatizado, el instalador puede ejecutarse de forma silenciosa desde la línea de comandos mediante las opciones de Inno Setup. Esto facilita la preparación de agentes de compilación, máquinas de prueba o entornos de despliegue sin necesidad de intervención manual.
El instalador ahora es solo para x64, lo que simplifica la matriz de despliegue y se ajusta a los entornos de Windows compatibles. Al final del proceso de instalación también hay disponible un enlace al instalador del SDK de aplicaciones de Windows, en caso de que se necesite ese entorno de ejecución.
El resultado es un proceso de instalación en Windows más predecible, tanto si se configura una sola estación de trabajo como si se automatizan docenas de entornos.
Componente 4D
Compilar componentes directamente desde el proyecto anfitrión
Ahora los componentes se pueden compilar directamente desde el proyecto anfitrión, lo que facilita mucho mantener sincronizadas las versiones de la aplicación y de los componentes utilizados en una compilación.
La ventana Compilador muestra el proyecto anfitrión (host project) junto con los componentes compatibles, por lo que puede compilar, comprobar la sintaxis o borrar el código compilado sin tener que abrir cada componente por separado. También puede ir directamente al Compilador desde el Explorador para un componente seleccionado.
Un componente es apto cuando su código fuente está disponible localmente, no está empaquetado como .4dz ni procede de la caché del Gestor de dependencias, y utiliza tipado directo.
Cada componente sigue utilizando su propia configuración de compilación, mientras que los registros de compilación se centralizan en el proyecto principal. Los errores y las advertencias también identifican el componente del que proceden, lo que agiliza considerablemente la resolución de problemas en proyectos que dependen de varios módulos reutilizables.
La ventaja práctica es un proceso de compilación más fiable. Se dedica menos tiempo a gestionar por separado los componentes compilados y se reduce la probabilidad de lanzar una aplicación con una versión obsoleta de un componente.
Descubra componentes más rápido con 4D Corner
La búsqueda de componentes reutilizables forma ahora parte del propio flujo de trabajo de gestión de dependencias. Se puede acceder a 4D Corner directamente desde la interfaz Dependencias del proyecto o desde la ventana Añadir dependencia.
Desde allí, puede explorar los componentes compartidos por 4D y la comunidad, copiar la dependencia que necesite e incorporarla a su proyecto sin tener que buscarla por separado en los repositorios.
Esto facilita el descubrimiento de soluciones existentes antes de desarrollar la funcionalidad por su cuenta y crea un camino mucho más claro entre la búsqueda de un componente y su incorporación efectiva a una aplicación.
Interfaz de usuario
Compatibilidad con Fluent UI para formularios de lista
Los formularios de lista ahora pueden utilizar el mismo renderizado de Fluent UI que el resto de la interfaz de Windows, lo que elimina una de las inconsistencias más evidentes en las aplicaciones que ya utilizaban la apariencia moderna de WinUI.
Cuando Fluent UI está habilitado, los formularios de lista abiertos mediante comandos como DISPLAY SELECTION y MODIFY SELECTION, así como los subformularios de lista, conservan su diseño y comportamiento actuales al tiempo que adoptan la representación moderna.
Esto también significa que los formularios de lista ahora siguen el mismo tema de Windows (claro u oscuro) que los formularios de detalle y los cuadros de diálogo. Los usuarios ya no pasan de una interfaz moderna oscura a un formulario de lista clásico que parece formar parte de otra aplicación.
No es necesario ningún rediseño. Los formularios de lista existentes pueden beneficiarse automáticamente de la nueva representación, mientras que la propiedad Apariencia del widget sigue permitiéndole controlar el comportamiento de cada formulario.
Para aplicaciones con una gran cantidad de interfaces de usuario de formularios de lista ya existentes, esto hace que la transición completa a Fluent UI resulte mucho más práctica.
Estilo más flexible para botones, botones de opción y casillas de verificación
La personalización sencilla de la interfaz ya no requiere crear recursos de imagen para cada botón o control.
Los botones, botones de opción y casillas de verificación con estilo personalizado ahora pueden utilizar un color de fondo, un color de borde, un ancho de borde y un radio de esquina directamente desde el Editor de formularios, CSS o código 4D.
En el caso de los botones, las nuevas propiedades están disponibles a través del estilo de borde personalizado, por lo que los formularios existentes conservan su aspecto actual a menos que se opte por utilizar el nuevo estilo. Los botones de opción y las casillas de verificación muestran directamente las mismas propiedades visuales.
Las imágenes de fondo se pueden seguir combinando con un color de fondo, y las esquinas redondeadas recortan automáticamente el fondo de forma correcta.
Esto le ofrece más libertad para crear una identidad visual coherente tanto en temas claros como oscuros, al tiempo que reduce el número de gráficos que debe crear, versionar y mantener.
Las nuevas opciones de estilo se aplican al modo de proyecto y no son compatibles con las bases de datos binarias.
Alineación vertical y relleno para objetos texto
Ahora es más fácil controlar la colocación del texto dentro de los formularios sin tener que cambiar el tamaño de los objetos ni recurrir a soluciones visuales provisionales.
Los objetos Área de texto y Campo de entrada pueden utilizar la alineación vertical superior, central, inferior o predeterminada, junto con un relleno independiente en cada lado. Esto facilita mucho mantener el equilibrio visual entre las etiquetas, los campos y las áreas de entrada más grandes.
Puede configurar los valores desde el Editor de formularios, el JSON del formulario, CSS o mediante código. Los nuevos comandos OBJECT SET PADDING y OBJECT GET PADDING proporcionan control en tiempo de ejecución, mientras que los comandos de alineación vertical existentes ahora también funcionan con los objetos Área de texto y Entrada.
La compatibilidad con el relleno también se extiende a los List Boxes, con espaciado simétrico tanto horizontal como vertical.
Los formularios existentes conservan su presentación actual hasta que empiece a utilizar las nuevas propiedades, por lo que puede mejorar los diseños de forma gradual en lugar de tener que rediseñar las pantallas existentes.
Extensión para Visual Studio Code
Flujo de trabajo fluido entre 4D IDE y VS Code
Pasar de 4D IDE a VS Code ya no implica tener que buscar en las carpetas del proyecto para encontrar el método o la clase adecuados.
Una nueva preferencia del Editor de código le permite decidir si 4D o VS Code deben abrir el código por defecto, mientras que la tecla Alt le ofrece acceso rápido al otro editor cuando lo necesite. También puede mantener el comportamiento actual y utilizar siempre el Editor de código de 4D.
Esta preferencia se aplica en todo el IDE de 4D, incluyendo el Explorador, el Editor de formularios, el Depurador, los cuadros de diálogo de errores en tiempo de ejecución y las acciones Ir a la definición. Cuando se selecciona VS Code, 4D abre el archivo de método o clase exacto y proporciona a VS Code la carpeta del proyecto como espacio de trabajo.
Esto resulta especialmente útil para los métodos de formularios y objetos, en los que encontrar manualmente el archivo correspondiente puede implicar números de tabla y carpetas profundamente anidadas. Ahora, 4D resuelve esa ruta por usted y crea primero el método cuando es necesario.
El resultado es un flujo de trabajo mixto entre ambos IDE mucho más fluido. Puede seguir utilizando el IDE de 4D para formularios, depuración y navegación por el proyecto, al tiempo que pasa directamente a VS Code cuando necesite herramientas de Git, extensiones o desarrollo asistido por IA.
La integración se aplica al modo de proyecto. Las bases de datos binarias siguen utilizando el Editor de código de 4D.