Free Pascal Compiler ( FPC ) es un compilador para los dialectos de lenguajes de programación estrechamente relacionados Pascal y Object Pascal . Es software libre distribuido bajo la Licencia Pública General de GNU , con cláusulas de excepción que permiten el enlace estático con sus bibliotecas y paquetes de tiempo de ejecución para cualquier propósito en combinación con cualquier otra licencia de software.
Admite su propio dialecto de Object Pascal, así como, en cierta medida, los dialectos de otros compiladores de la familia Pascal, incluidos los de Borland Pascal (conocido como "Turbo Pascal" hasta la versión 6 de 1990), Borland (posteriormente Embarcadero) Delphi y algunos compiladores históricos de Macintosh . El dialecto se selecciona para cada unidad (módulo) y se puede usar más de un dialecto por programa.
Sigue una filosofía de escritura única y compilación universal, y está disponible para numerosas arquitecturas de CPU y sistemas operativos (véase Objetivos ). Admite lenguaje ensamblador en línea e incluye un ensamblador interno capaz de analizar varios dialectos, como los de estilo AT&T e Intel.
Existen proyectos independientes para facilitar el desarrollo de aplicaciones con interfaz gráfica de usuario (GUI) multiplataforma , siendo el más destacado el entorno de desarrollo integrado (IDE) Lazarus .
Dialectos compatibles
Inicialmente, Free Pascal adoptó el dialecto estándar de facto de los programadores de Pascal, Borland Pascal, pero posteriormente adoptó Object Pascal de Delphi. A partir de la versión 2.0, la compatibilidad con Delphi se ha implementado o mejorado continuamente.
El compilador puede funcionar en diferentes modos ; por ejemplo, los desarrolladores dejaron claro que incorporarían parches funcionales para los dialectos estandarizados del Instituto Nacional Estadounidense de Estándares (ANSI) y la Organización Internacional de Normalización (ISO) para crear un modo que cumpla con los estándares.
Se ha realizado un pequeño esfuerzo para dar soporte a parte de la sintaxis de Apple Pascal y facilitar la interfaz con el Mac OS clásico y macOS . El dialecto de Apple implementa algunas características estándar de Pascal que Turbo Pascal y Delphi omiten.
La serie de versiones 2.2.x no modificó significativamente los objetivos del dialecto, más allá de una sintaxis similar a la de Delphi 7, sino que buscó una mayor compatibilidad. Una excepción notable fue la incorporación de soporte para genéricos en Free Pascal en la versión 2.2.0, varios años antes de que Delphi los admitiera.
UnicodeStringEn 2011 se añadieron varias características específicas de Delphi 2006 a la rama de desarrollo, y se completó parte del trabajo inicial para las nuevas características de Delphi 2009 (en particular, la adición del tipo). La rama de desarrollo también cuenta con una extensión Objective-Pascal para la interfaz con Objective-C ( Cocoa ).
A partir de la versión 2.7.1, Free Pascal añadió compatibilidad con ISO Pascal. Desde la versión 3.0.0, puede compilar el compilador P5 ISO Pascal de standardpascal.org sin necesidad de realizar cambios.
Historia
Primeros años
Free Pascal se creó cuando Borland aclaró que el desarrollo de Borland Pascal para MS-DOS se detendría con la versión 7. El estudiante Florian Paul Klämpfl comenzó a desarrollar su propio compilador escrito en el dialecto Turbo Pascal, que producía código de 32 bits para el extensor GO32v1 de DOS (desarrollado y utilizado por el proyecto GNU Programming Platform de DJ ).
Originalmente, el compilador era un ejecutable de 16 bits compilado con Turbo Pascal . Dos años después, el compilador logró compilarse a sí mismo en un ejecutable de 32 bits.
Expansión
El compilador inicial de 32 bits se publicó en Internet y los primeros colaboradores se unieron al proyecto. Posteriormente, Michael van Canneyt creó una versión para Linux , cinco años antes de que estuviera disponible el compilador Borland Kylix Pascal para Linux.
La versión para DOS se adaptó para su uso en OS/2 mediante el extensor Eberhard Mattes (EMX), lo que convirtió a OS/2 en el segundo sistema operativo compatible. Además de Florian Klämpfl, el autor original, Daniël Mantione también contribuyó significativamente a este desarrollo, proporcionando la adaptación original de la biblioteca de tiempo de ejecución a OS/2 y EMX. El compilador mejoró gradualmente y la versión para DOS migró al extensor GO32v2. Esto culminó en la versión 0.99.5, que tuvo una mayor difusión que las versiones anteriores y fue la última que solo buscaba la compatibilidad con Borland Pascal; versiones posteriores añadieron un modo de compatibilidad con Delphi. Esta versión también se adaptó a sistemas que utilizaban procesadores de la familia Motorola 68000 (m68k).
Con la versión 0.99.8 se añadió la compatibilidad con Win32 y se empezó a incorporar algunas características de Delphi. Se inició la estabilización para una versión final , y la versión 1.0 se lanzó en julio de 2000. La serie 1.0.x tuvo una gran acogida tanto en el ámbito empresarial como en el educativo. Para las versiones 1.0.x , se rehizo la adaptación a la CPU 68k y el compilador generó código estable para varios sistemas operativos tipo Unix y AmigaOS de 68k.
Versión 2
Durante la estabilización de lo que se convertiría en la versión 1.0.x , y también durante la adaptación a los sistemas Motorola 68k, quedó claro que el diseño del generador de código era demasiado limitado en muchos aspectos. Los principales problemas radicaban en que añadir procesadores implicaba reescribir el generador de código, y en que la asignación de registros se basaba en el principio de mantener siempre tres registros libres entre bloques de construcción, lo cual resultaba inflexible y difícil de mantener.
Por estos motivos, la serie 1.1.x se separó de la rama principal 1.0.x en diciembre de 1999. Al principio, los cambios consistieron principalmente en mejoras y rediseños de todas las partes del compilador. El generador de código y el asignador de registros también se reescribieron. Se añadió la compatibilidad con Delphi que aún faltaba.
El trabajo en la versión 1.1.x continuó de forma lenta pero constante. A finales de 2003, se lanzó una versión funcional para PowerPC , seguida de una versión para ARM en el verano de 2004, una versión para SPARC en el otoño de 2004 y una versión para x86-64 -AMD64 a principios de 2004, lo que hizo que el compilador estuviera disponible para una plataforma de 64 bits.
En noviembre de 2003, se lanzó la primera versión beta de la rama 1.1.x , numerada como 1.9.0. A estas les siguieron rápidamente las versiones 1.9.2 y 1.9.4; esta última introdujo la compatibilidad con OS X. El trabajo continuó con las versiones 1.9.6 (enero de 2005), 1.9.8 (finales de febrero de 2005), 2.0.0 (mayo de 2005), 2.0.2 (diciembre de 2005) y 2.0.4 (agosto de 2006).
Versión 2.2.x
En 2006, algunas de las principales modificaciones previstas para la versión 2.2, como la reescritura del sistema de unidades, aún no habían comenzado, por lo que se decidió empezar a estabilizar las funcionalidades ya implementadas.
Algunos de los motivos para este cambio de hoja de ruta fueron las necesidades del proyecto del entorno de desarrollo integrado Lazarus, en particular el enlazador interno, la compatibilidad con Win64 , Windows CE y OS X en x86 , y características relacionadas como DWARF . Tras las versiones beta 2.1.2 y 2.1.4, se lanzó la versión 2.2.0 en septiembre de 2007, seguida de la versión 2.2.2 en agosto de 2008 y la versión 2.2.4 en marzo de 2009.
La serie 2.2x mejoró enormemente la compatibilidad con ActiveX y la interfaz del Modelo de Objetos Componentes (COM) , así como con la Vinculación e Incrustaciones de Objetos ( OLE), aunque aún se detectaban errores. La delegación a la interfaz mediante la palabra clave se implementó parcialmente, pero no estaba completa en marzo de 2011.implements . [ 1 ] También se mejoró el soporte de la biblioteca para ActiveX.
Otra característica importante fue el enlazador interno para Win32, Win64 y Windows CE, que mejoró notablemente el tiempo de enlace y el uso de memoria, y aceleró considerablemente el ciclo de compilación, enlace y ejecución en Lazarus. También se mejoró la eficiencia del enlace inteligente, o eliminación de código muerto .
Entre las nuevas características menores se incluyeron una mejor compatibilidad con el formato de depuración DWARF (2/3) y optimizaciones como la recursión de cola , la omisión de marcos de pila innecesarios y la optimización de eliminación de subexpresiones comunes (CSE) basada en registros . También se puso a disposición una primera implementación de compatibilidad con programación genérica (genéricos), aunque solo de forma experimental.
Versión 2.4.x
La serie de versiones 2.4.x tenía objetivos menos definidos que las versiones anteriores. La reescritura del sistema de unidades se pospuso nuevamente, y la rama que se convirtió en la versión 2.4 se creó para conservar las confirmaciones de riesgo de la versión 2.2 y estabilizarla. En su mayoría, estas confirmaciones de riesgo consistían en mejoras más complejas para las nuevas plataformas: Mac PowerPC 64, Mac x86-64, iPhone, y numerosas correcciones para las arquitecturas ARM y x86-64 en general, así como para DWARF.
Otras mejoras del compilador incluyeron la optimización de programas completos (WPO), la desvirtualización y la compatibilidad con la interfaz binaria de aplicaciones integradas ARM (EABI).
Posteriormente, durante el ciclo 2.2, se añadió un soporte de recursos más similar al de Delphi (basado en secciones especiales del binario en lugar de constantes de Pascal). Esta característica, muy necesaria para Lazarus, se convirtió en el principal atractivo de la rama.
Otras adiciones menores fueron un administrador de memoria que mejoró el rendimiento del administrador de montón en entornos multihilo , pequeñas mejoras en la compatibilidad con Delphi, como OleVarianty mejoras en la delegación de interfaz .
El 1 de enero de 2010 se lanzó Free Pascal 2.4.0, seguido el 13 de noviembre de 2010 por la versión 2.4.2 de corrección de errores, con soporte para for..inbucles, sealedclases abstracty otros cambios. [ 2 ]
Versión 2.6.x
En enero de 2012 se lanzó Free Pascal 2.6. Esta primera versión de la serie 2.6 también era compatible con Objective Pascal en OS X e iOS e implementaba numerosas mejoras y correcciones de errores. En febrero de 2013 se lanzó FPC 2.6.2, que incluía versiones para NetBSD y OpenBSD por primera vez desde la 1.0.10, basadas en nuevas adaptaciones. En marzo de 2014 se lanzó la última versión menor de la serie 2.6, la 2.6.4, que incluía principalmente actualizaciones de la base de datos (fcl-db).
Versión 3.0.x
La versión 3.0.0 se publicó el 25 de noviembre de 2015 y fue la primera versión importante desde el 1 de enero de 2012. Introdujo muchas características nuevas del lenguaje. [ 3 ]
La versión 3.0.2 se publicó el 15 de febrero de 2017 e incluye correcciones de errores y actualizaciones menores del compilador. La versión 3.0.4 se publicó el 28 de noviembre de 2017. Incluye numerosas mejoras del lenguaje con respecto a las versiones anteriores, como un enlazador interno para el formato ejecutable y enlazable (ELF), compatibilidad con Arm AARCH64 para iOS y Linux, una plataforma i8086 renovada, bibliotecas extendidas y mucho más.
Versión 3.2.x
La siguiente versión principal, la 3.2.0, se publicó el 19 de junio de 2020. Introdujo muchas características nuevas del lenguaje, incluyendo rutinas genéricas, espacios de nombres estándar, registros administrados y funcionalidad ampliada para matrices dinámicas, además de la aparición de nuevas unidades estándar y la compatibilidad con plataformas adicionales. [ 4 ]
La versión 3.2.2 se publicó el 20 de mayo de 2021 y es compatible con macOS en AArch64 y con la asignación de nombres a los subprocesos. Además, incluye correcciones de errores y actualizaciones menores del compilador. [ 5 ]
Una versión candidata, FPC 3.2.4-rc1, estuvo disponible para pruebas en junio de 2025. [ 6 ]
Versión 3.3.x
A partir de julio de 2025 La versión de desarrollo 3.3.1 estaba disponible para su descarga como archivo fpc.zip. [ 7 ] El miembro más reciente del archivo (excepto un archivo que indica la fecha en que ftp.zipse extrajeron los miembros) tenía fecha del 15 de septiembre de 2023.
Objetivos
Free Pascal también admite la generación de código de bytes para la máquina virtual Java desde la versión 3.0.0 y apunta tanto a Java de Oracle como a Android JVM de Google, [ 8 ] aunque la sintaxis de Object Pascal no es totalmente compatible. Free Pascal 3.0.0 también admite plataformas ARMHF como Raspberry Pi , incluyendo ARMV6-EABIHF ejecutándose en Raspbian. El trabajo en ARM de 64 bits ha dado como resultado soporte para iOS también en 3.0.0. Se ha añadido un destino nativo ARM Android, dejando de lado el destino ARM Linux previamente modificado para generar bibliotecas ARM nativas para Android. Esto hace que portar aplicaciones Lazarus a Android (usando Custom Drawn Interface [ 9 ] ) sea más fácil. Desde FPC 2.6.2, OpenBSD y NetBSD son compatibles con las arquitecturas IA32 y X86_64. Se ha añadido un nuevo destino integrado para uso sin sistema operativo (principalmente ARM Cortex M y MIPS). Con InstantFPC es posible ejecutar programas Pascal, que se traducen justo a tiempo, como scripts Unix o como back-end CGI .
Ultibo core es un entorno de desarrollo embebido o bare metal para Raspberry Pi. [ 10 ] Ultibo se basa en Free Pascal y se desarrolló bajo una versión modificada de Lazarus. El IDE está basado en PC, pero también se ha portado a Linux y Mac. Ultibo es un entorno de ejecución sin sistema operativo y admite la mayoría de las funciones, permitiendo al programador un control total sobre el hardware a través de las unidades RTL. El entorno de ejecución implementa multitarea preventiva con múltiples hilos. El programador puede asignar hilos a una CPU específica, dejar que el entorno de ejecución divida la carga automáticamente o una combinación de ambos. Se admiten la mayoría de los modelos de Raspberry Pi, incluidos A, B, A+ y B+, así como Raspberry Pi 2B, 3B, 4B/400/CM4 y Zero. [ 11 ]
entornos de desarrollo integrados
Al igual que la mayoría de los compiladores modernos, Free Pascal se puede usar con un entorno de desarrollo integrado (IDE). Además de los IDE independientes, también existen complementos para varios IDE existentes.

- Lazarus es el IDE más popular entre los programadores de Free Pascal. Su apariencia y funcionamiento son similares a los del IDE de Delphi, y permite crear aplicaciones de consola y gráficas , servicios de Windows , demonios y aplicaciones web . Lazarus proporciona un marco de interfaz de usuario multiplataforma llamado Lazarus Component Library (LCL). Las aplicaciones gráficas creadas con LCL pueden portarse a otras plataformas mediante recompilación o compilación cruzada .

- MSEide+MSEgui es un entorno de programación visual que utiliza el compilador Free Pascal. Consta de la biblioteca de componentes visuales MSEgui y el editor de formularios y código fuente MSEide. A diferencia del proyecto Lazarus, por ejemplo, MSE no se centra en la compatibilidad con la VCL de Delphi, lo que en algunos casos simplifica el desarrollo y reduce la complejidad. Incluye un depurador integrado, resaltado de sintaxis, autocompletado de campos de clase, navegación de código, un generador de informes y mucho más.

- Free Pascal cuenta con su propio IDE en modo texto, similar al de Turbo Pascal. Está desarrollado con el framework Free Vision (también incluido en Free Pascal), un clon de Turbo Vision. Además de muchas características del IDE de Turbo Pascal, ofrece autocompletado de código y compatibilidad con múltiples formatos de archivos de ayuda (HTML, Microsoft Compiled HTML Help (CHM) e Information Presentation Facility (IPF)). En lugar de utilizar herramientas de línea de comandos, el IDE emplea su propio compilador integrado, basado en el mismo código fuente que el compilador y depurador de línea de comandos (que utiliza libgdb o GDBMI), para proporcionar su funcionalidad.
- Dev-Pascal es un IDE gratuito exclusivo para Windows para Free Pascal y GNU Pascal , sin desarrollo posterior a la versión FPC de 2004 y la versión GPC de 2005.
Bibliotecas agrupadas
Además de un compilador y un IDE, Free Pascal proporciona las siguientes bibliotecas:
- Biblioteca de tiempo de ejecución de Free Pascal (RTL): Biblioteca básica de tiempo de ejecución de bajo nivel para tareas de programación generales.
- Biblioteca de componentes libres (FCL): Biblioteca de componentes de software de alto nivel para tareas de programación generales.
Ejemplos de software producido con Free Pascal
- Beyond Compare es una utilidad de comparación de datos para Windows, OS X y Linux. Las versiones para Linux y OS X están compiladas con Lazarus/FPC.
- Cartes du Ciel es un programa de planetario gratuito para Linux, OS X y Windows. Mapea y etiqueta la mayoría de las constelaciones, planetas y objetos visibles con telescopio. Fue escrito íntegramente en Lazarus/FPC y se distribuye bajo la licencia GPL.
- Cheat Engine es un escáner de memoria, editor hexadecimal y depurador de código abierto, de propiedad exclusiva y gratuito. Puede utilizarse para hacer trampas en videojuegos. Desde la versión 6.0, se compila con Lazarus/FPC.
- Double Commander es un gestor de archivos ortodoxo de dos paneles, multiplataforma y de código abierto, inspirado en Total Commander, exclusivo de Microsoft Windows.
- Free Pascal está escrito en Object Pascal y lenguaje ensamblador, y es autocompilable.
- HNSKY , Hallo Northern Sky, es un programa de planetario gratuito para Windows y Linux. Desde la versión 3.4.0, se ha desarrollado y compilado con Lazarus/FPC.
- Lazarus : Paquete de software similar a Delphi, afiliado a Free Pascal, para el desarrollo rápido de aplicaciones gráficas.
- Morfik : Morfik WebOS AppBuilder utiliza Free Pascal para generar binarios CGI.
- MyNotex es un software gratuito para tomar notas y gestionarlas en Linux.
- Las primeras versiones del compilador Nim se desarrollaron en Free Pascal, antes de que se autoalojara en Nim. [ 12 ]
- PeaZip es un compresor de código abierto, creado con Lazarus/FPC.
- TorChat , que anteriormente estaba escrito en Python, ahora se está reescribiendo en Free Pascal y Lazarus.
Véase también
- fpGUI Free Pascal GUI toolkit – un conjunto de herramientas multiplataforma y de diseño personalizado implementado en Object Pascal
Referencias
- ↑ bugs.freepascal.org
- ↑ Cambios del usuario 2.4.2
- ↑ "Nuevas características de FPC 3.0.0" . Wiki de Free Pascal . Consultado el 28 de febrero de 2021 .
- ↑ "Nuevas características de FPC 3.2.0 - Wiki de Free Pascal" . wiki.freepascal.org . Consultado el 20 de junio de 2020 .
- ↑ "Nuevas características de FPC 3.2.2 - Wiki de Free Pascal" . wiki.freepascal.org . Consultado el 30 de diciembre de 2021 .
- ↑ "FPC 3.2.4-rc1 disponible" . Lazarus. 23 de junio de 2025.
- ↑ "Desarrollo" . Free Pascal . Consultado el 23 de julio de 2025 .
- ↑ Wiki de Free Pascal: JVM FPC
- ↑ Interfaz dibujada a medida
- ↑ "Biblioteca de tiempo de ejecución integrada de Ultibo" . Ultibo.org . Ultibo.
- ↑ "Placas Pi compatibles con Ultibo" . Ultibo.org.
- ↑ "Código fuente de Nim Pascal" . GitHub .
Enlaces externos
Sitios web oficiales
Introducción general
- Documentación oficial
- Introducción a Modern Object Pascal para programadores - por Michalis Kamburelis
Sitios especializados en desarrollo de videojuegos
- Desarrollo de juegos de Pascal
- Revista Pascal Gamer
- Tutorial de programación de FPC 4 para GBA : un tutorial completo sobre programación de juegos para Game Boy Advance con Free Pascal.
- Pascal libre
- Software clásico de Mac OS
- Compiladores
- Software libre multiplataforma
- Software multiplataforma
- Compiladores libres y de código abierto
- Software libre programado en Pascal
- Herramientas de programación Linux
- Herramientas de programación de macOS
- Software MorphOS
- Lenguajes de programación orientados a objetos
- Pascal (lenguaje de programación)
- Compiladores de Pascal (lenguaje de programación)
- Familia de lenguajes de programación Pascal
- Software programado en Pascal
- Desarrollo sensible a la plataforma
- Herramientas de programación para Windows
- Software de autoalojamiento
- Software que utiliza la Licencia Pública General de GNU.
- Software Solaris
- lenguajes de programación de sistemas