Object Pascal es una extensión del lenguaje de programación Pascal que proporciona características de programación orientada a objetos (OOP) como clases y métodos .
Paradigmas | Imperativo , estructurado , orientado a objetos , funcional (solo dialecto Delphi), basado en componentes , impulsado por eventos , genérico |
---|---|
Familia | Wirth Pascal |
Diseñada por | Larry Tesler (Apple) Niklaus Wirth (para Apple) Anders Hejlsberg (Borland) [1] |
Desarrolladores | Apple Computer (inicial) Borland International [1] |
Apareció por primera vez | 1986 |
Disciplina de mecanografía | Estático y dinámico (escritura dinámica a través de variantes, matriz de const y RTTI ), fuerte , seguro |
Alcance | Léxico (estático) |
Plataforma | ARM , x86 , PowerPC , ppc64 , SPARC , MIPS , CLI , Java , Cocoa |
Extensiones de nombre de archivo | .p , .pp ,.pas |
Implementaciones importantes | |
Delphi ( x86 , ARM ), Free Pascal ( x86 , PowerPC , ppc64 , SPARC , MIPS , ARM ), Oxygene ( CLI , Java , Native Cocoa ), Smart Mobile Studio ( JavaScript ) | |
Dialectos | |
Apple, Turbo Pascal , Free Pascal (usando el modo objfpc o delphi ), Delphi , Delphi.NET, Delphi Web Script, Oxygene | |
Influenciado por | |
Pascal , Simula , Smalltalk | |
Influenciado | |
C # , Genie , Java , Nim , C / AL |
El lenguaje fue desarrollado originalmente por Apple Computer como Clascal para el sistema de desarrollo Lisa Workshop. Cuando Lisa dio paso a Macintosh , Apple colaboró con Niklaus Wirth , el autor de Pascal, para desarrollar una versión oficialmente estandarizada de Clascal. Esto pasó a llamarse Object Pascal. A mediados de la década de 1980, Object Pascal fue el principal lenguaje de programación para las primeras versiones del marco de la aplicación MacApp . El lenguaje perdió su lugar como el principal lenguaje de desarrollo en Mac en 1991 con el lanzamiento de MacApp 3.0 basado en C ++ . El apoyo oficial finalizó en 1996.
Symantec también desarrolló un compilador para Object Pascal para su producto Think Pascal, que podía compilar programas mucho más rápido que el propio Macintosh Programmer's Workshop (MPW) de Apple . Symantec luego se desarrolló el Think biblioteca de clases (TCL), basado en conceptos MacApp, que podrían ser llamadas desde ambos Object Pascal y PIENSAN C . La suite Think desplazó en gran medida a MPW como la principal plataforma de desarrollo en Mac a fines de la década de 1980.
Symantec portó Object Pascal a la PC y desarrolló un marco de objeto similar en esa plataforma. A diferencia de TCL, que finalmente migró a C ++, las bibliotecas de PC se basaron principalmente en Pascal.
Borland agregó soporte para programación orientada a objetos a Turbo Pascal 5.5, que eventualmente se convertiría en la base del dialecto Object Pascal usado en Delphi . Delphi siguió siendo la corriente principal para las aplicaciones comerciales en la PC a principios de la década de 2000, y fue parcialmente desplazada en la década de 2000 con la introducción de .NET Framework .
Historia
Pascal de manzana
Pascal se convirtió en un lenguaje importante en el mundo de la programación en la década de 1970, con implementaciones de alta calidad en la mayoría de las plataformas de minicomputadoras y microcomputadoras . Entre los últimos se encontraba el sistema UCSD Pascal , que se compilaba en un formato de código p-System intermedio que luego podía ejecutarse en múltiples plataformas. Apple obtuvo la licencia de UCSD y la utilizó como base para su sistema Apple Pascal para Apple II y Apple III .
Pascal se convirtió en uno de los principales idiomas de la empresa en este período. Con el inicio del proyecto Apple Lisa , Pascal fue seleccionado como el principal lenguaje de programación de la plataforma, aunque esta vez como compilador a diferencia del intérprete p-System .
Clascal y el primer Object Pascal de Apple
Object Pascal es una extensión del lenguaje Pascal que fue desarrollado en Apple Computer por un equipo dirigido por Larry Tesler en consulta con Niklaus Wirth , el inventor de Pascal. [2] Es descendiente de una versión anterior orientada a objetos de Pascal llamada Clascal , que estaba disponible en la computadora Lisa .
Se necesitaba Object Pascal para admitir MacApp , un marco de aplicación de Macintosh expandible que ahora se denominaría biblioteca de clases . Las extensiones Object Pascal y MacApp fueron desarrolladas por Barry Haynes, Ken Doyle y Larry Rosenstein, y fueron probadas por Dan Allen. Larry Tesler supervisó el proyecto, que comenzó a principios de 1985 y se convirtió en un producto en 1986.
También se implementó una extensión Object Pascal en el entorno de desarrollo integrado (IDE) Think Pascal . El IDE incluye el compilador y un editor con resaltado y verificación de sintaxis , un depurador potente y una biblioteca de clases. Muchos desarrolladores prefirieron Think Pascal a la implementación de Object Pascal de Apple porque Think Pascal ofrecía un ciclo de compilación, enlace y depuración mucho más rápido y una estrecha integración de sus herramientas. El último lanzamiento oficial de Think Pascal fue 4.01, en 1992. Más tarde, Symantec lanzó una versión no oficial 4.5d4 sin cargo.
Apple abandonó el soporte para Object Pascal cuando pasó de los chips de la serie 68000 de Motorola a la arquitectura PowerPC de IBM en 1994. MacApp 3.0, para esta plataforma, se reescribió en C ++ .
Años de Borland, Inprise, CodeGear y Embarcadero
En 1986, Borland introdujo extensiones similares, también llamadas Object Pascal, al producto Turbo Pascal para Macintosh, y en 1989 para Turbo Pascal 5.5 para DOS. Cuando Borland se reorientó de DOS a Windows en 1994, crearon un sucesor de Turbo Pascal, llamado Delphi , e introdujeron un nuevo conjunto de extensiones para crear lo que ahora se conoce como el lenguaje Delphi.
El desarrollo de Delphi comenzó en 1993 y Delphi 1.0 se lanzó oficialmente en los Estados Unidos el 14 de febrero de 1995. Si bien el código que usa el modelo de objetos Turbo Pascal aún se puede compilar, Delphi presenta una nueva sintaxis que usa la palabra clave class
en lugar object
del constructor Create. y un destructor virtual de Destroy (y negando tener que llamar a los procedimientos New
y Dispose
), propiedades, punteros de método y algunas otras cosas. Estos se inspiraron en el borrador de trabajo de ISO para extensiones orientadas a objetos, pero se ignoraron muchas de las diferencias con el dialecto de Turbo Pascal (como el requisito del borrador de que todos los métodos sean virtuales ).
El lenguaje Delphi ha seguido evolucionando a lo largo de los años para admitir construcciones como matrices dinámicas , genéricos y métodos anónimos . La antigua sintaxis de objetos introducida por Apple ("Tipos de objetos de estilo antiguo") todavía es compatible. [3]
Versiones
- Borland usó el nombre Object Pascal para el lenguaje de programación en las primeras versiones, pero luego lo renombró como Delphi . Los compiladores que afirman ser compatibles con Object Pascal a menudo intentan ser compatibles con el código fuente de Delphi . [ cita requerida ] Debido a que Delphi es una marca comercial , los compiladores compatibles continúan usando el nombre Object Pascal .
- Embarcadero Technologies , que compró Delphi en 2008, [4] vende el Delphi entorno de desarrollo integrado (IDE) que compila el dialecto de Delphi Object Pascal para Ventanas y macOS , iOS , Android y Web.
- El soporte .NET existió desde Delphi 8 hasta Delphi 2005, 2006 y 2007, que ahora ha sido reemplazado por otro lenguaje, Oxygene (ver más abajo), que no es completamente compatible con versiones anteriores.
- El lenguaje Oxygene desarrollado por RemObjects Software apunta a Common Language Infrastructure , Java (plataforma de software) Runtime Environment y los frameworks Cocoa de Apple para iOS y macOS .
- El proyecto Free Pascal de código abierto permite compilar el lenguaje para una amplia gama de sistemas operativos , incluidos Linux ( 32 bits , 64 bits ), FreeBSD , Classic Mac OS , macOS , Solaris , API de Windows (32, 64, CE ), la arquitectura de conjunto de instrucciones ARM (ISA) y varias otras arquitecturas de hardware. La primera versión de Free Pascal para el iPhone kit de desarrollo de software (SDK) 2. x se anunció el 17 de enero de 2009. [5]
- El lenguaje Smart Pascal [6] apunta a ECMAScript - JavaScript y se utiliza en Smart Mobile Studio, escrito por Jon Lennart Aasenden y publicado por Optimale Systemer (2012). El lenguaje simplifica enormemente el desarrollo de HTML5 a través de métodos de desarrollo rápido de aplicaciones (RAD) orientados a objetos . Smart Pascal se integra estrechamente con tecnologías establecidas como node.js , Embarcadero DataSnap y Remobjects SDK para producir aplicaciones web modelo cliente-servidor de alto rendimiento . El lenguaje permite una fácil creación de componentes visuales y bibliotecas reutilizables. El dialecto Smart Pascal proviene del lenguaje DWScript, extendido para integrarse mejor con el entorno y las bibliotecas de JavaScript, como las
asm
secciones que son JavaScript sin formato pero tienen acceso a los símbolos de Pascal, o clases externas que se asignan directamente a clases de JavaScript prototípicas. Smart Pascal presenta herencia verdadera, clases, clases parciales, interfaces, una tabla de métodos virtuales y muchas otras construcciones avanzadas que no son parte de JavaScript por defecto. - Midletpascal se ejecuta en una máquina virtual Java (JVM) de código de bytes plataforma; al que también apunta Free Pascal, con muchas más funciones.
- El lenguaje Morfik Pascal, desarrollado por Morfik, apunta a aplicaciones web habilitadas para Ajax . El compilador está integrado en el IDE de AppsBuilder de la empresa y permite que el código Object Pascal se utilice en la implementación del código que se ejecutará en un navegador o servidor. Utiliza el compilador Free Pascal para generar binarios nativos a partir de Object Pascal.
- El compilador GNU Pascal de código abierto está disponible como interfaz para la Colección de compiladores GNU , que implementa el estándar Pascal 7185 de la Organización Internacional de Normalización (ISO) y la mayor parte del estándar Pascal Extendido ISO 10206.
- Turbo51 es un compilador gratuito para programar chips Intel 8051 . [7]
- WDSibyl es un IDE y compilador de código abierto similar a Delphi disponible para Microsoft Windows y OS / 2 , [8] y es un entorno comercial compatible con Turbo Pascal lanzado por una empresa llamada Speedsoft que más tarde se desarrolló en un entorno RAD similar a Delphi llamado Sybil , y luego de código abierto bajo la GPL cuando esa empresa cerró. Wolfgang Draxler (WD) ahora mantiene el software. El compilador utilizado parece estar ubicado en una DLL y no es de código abierto.
Compiladores
Los compiladores Object Pascal están disponibles para una amplia gama de sistemas operativos y arquitecturas.
- Delphi es probablemente el compilador más conocido. Es el sucesor de la exitosa línea de productos Borland Pascal y Turbo Pascal . Se dirige a Windows 9x , la familia Windows NT , .NET Framework (Delphi 8, 2005, 2007), macOS (Delphi XE2 y posterior), iOS (Delphi XE2 y posterior, generando binarios nativos en XE4 y posterior), Android (Delphi XE5 y luego, generar binarios nativos en XE5 y posteriores). El soporte para .NET finalmente se convirtió en un producto separado conocido como Oxygene (ver más abajo).
- Free Pascal Compiler (FPC) es un compilador Object Pascal de código abierto que admite muchos dialectos Pascal, incluidos Turbo Pascal 7, Delphi y otros. Actualmente, FPC puede generar código para procesadores IA-32 , x86-64 , PowerPC , SPARC y ARM , y para varios sistemas operativos, incluidos Microsoft Windows , Linux , FreeBSD , Classic Mac OS y macOS (con un kit de integración Xcode ) . Existen varios proyectos separados para facilitar el desarrollo rápido de aplicaciones con FPC, el más destacado es Lazarus (IDE) .
- GNU Pascal (una parte distribuida por separado de la colección de compiladores GNU ), aunque no está dirigida formalmente al dialecto Delphi de Pascal, contiene un modo de compatibilidad Turbo Pascal y está incorporando muy lentamente algunas características del lenguaje Delphi. No es adecuado para recompilar grandes cuerpos de código Delphi directamente, pero es notable por tener un soporte prolífico para sistemas operativos y arquitecturas de hardware.
- Oxygene (anteriormente Chrome ) es un compilador Object Pascal de RemObjects Software que se integra en Microsoft Visual Studio . También está disponible como compilador de interfaz de línea de comandos gratuito que se ejecuta de forma nativa en CLI . Son tres compiladores en uno, cada uno dirigido a una plataforma diferente: Echoes para .NET Framework , Mono , WinRT y Windows Phone 8 , Cooper para JDK y Android , y Nougat para iOS y macOS .
- MIDletPascal es una herramienta de desarrollo de aplicaciones móviles que genera código de bytes Java ME .
- PocketStudio es un entorno de desarrollo integrado (IDE) basado en Pascal para Palm OS .
- Smart Mobile Studio es un compilador de fuente a fuente que transforma el código fuente de Pascal a JavaScript
- Ultibo.org Core se basa en Free Pascal, con desarrollo en el IDE de Lazarus para aplicaciones integradas de Raspberry Pi .
Productos heredados
- Borland Kylix era una variante de Linux de Delphi que solo apunta a Intel Linux de 32 bits utilizando la biblioteca Qt . No funciona de fábrica con la mayoría de las distribuciones de Linux modernas.
- Virtual Pascal era un compilador gratuito compatible con Turbo Pascal y Delphi de 32 bits, principalmente para OS / 2 y Microsoft Windows. Más tarde, también recibió un DOS + Extender y un compilador cruzado de Linux experimental. El desarrollo del compilador se detuvo aproximadamente al nivel de Delphi 2. En 2007, su sitio web oficial dejó de funcionar y cesó el desarrollo posterior.
Intérpretes
Pascal Script (anteriormente InnerFuse ) y DWScript (Delphi Web Script) son intérpretes de Object Pascal y motores de scripting de código abierto escritos en Delphi. Admiten subconjuntos de Object Pascal. DWScript también puede compilar código Object Pascal en código JavaScript (Smart Pascal) y admite la compilación Just-In -Time (JIT). Modern Pascal proporciona 3 intérpretes diferentes: una interfaz de línea de comandos (CLI), Módulo Apache (Celerity) y CodeRunner (solución similar a node.js capaz de manejar diferentes scripts por puerto), además de la capacidad de compilar y proteger el código fuente de un script . [9]
Ejemplos de programas "Hello World"
Aquí hay varios programas "Hello World" en diferentes versiones de Object Pascal.
Versión de Apple
programa ObjectPascalExample ; escriba THelloWorld = procedimiento de objeto Put ; terminar ; var HelloWorld : THelloWorld ; procedimiento THelloWorld . Poner ; begin ShowMessage ( '¡Hola, mundo!' ) ; terminar ;comenzar Nuevo ( HelloWorld ) ; HelloWorld . Poner ; Dispose ( HelloWorld ) ; final .
Versión Turbo Pascal
Todavía es compatible con Delphi y Free Pascal. FPC también empaqueta sus propios sustitutos para las bibliotecas / unidades. Delphi no lo hace. La serie Free Pascal 1.0 y el IDE en modo texto FPC son las bases de código abiertas más grandes en este dialecto. Free Pascal 2.0 fue reescrito en un dialecto más parecido a Delphi, y el IDE en modo texto y los marcos relacionados (Free Vision) son las únicas partes en la versión TP de Object Pascal.
Asignación basada en pilas
programa ObjectPascalExample ; escriba THelloWorld = procedimiento de objeto Put ; terminar ; procedimiento THelloWorld . Poner ; begin WriteLn ( '¡Hola, mundo!' ) ; terminar ;var HelloWorld : THelloWorld ; {asignado en la pila y puede usarse sin asignación explícita. } comenzar HelloWorld . Poner ; final .
Asignación basada en montón
programa ObjectPascalExample ; escriba PHelloWorld = ^ THelloWorld ; THelloWorld = procedimiento de objeto Put ; terminar ; procedimiento THelloWorld . Poner ; begin WriteLn ( '¡Hola, mundo!' ) ; terminar ;var HelloWorld : PHelloWorld ; {este es un puntero escrito a THelloWorld}comenzar Nuevo ( HelloWorld ) ; HelloWorld ^. Poner ; Dispose ( HelloWorld ) ; final .
Otro ejemplo:
programa ObjectPascalExample ; escriba PHelloWorld = ^ THelloWorld ; THelloWorld = procedimiento de objeto Put ; terminar ; procedimiento THelloWorld . Poner ; begin WriteLn ( '¡Hola, mundo!' ) ; terminar ;var HelloWorld : PHelloWorld ; {este es un puntero escrito a THelloWorld} HelloWorld2 : ^ THelloWorld ; {esto es exactamente lo mismo con diferente sintaxis} HelloWorld3 : ^ THelloWorld ; HelloWorld4 : PHelloWorld ; begin {Esto funciona de manera similar al código anterior, tenga en cuenta la asignación y la desasignación, aunque muchas personas se confunden. En el pasado, hubo un ejemplo incorrecto con comentarios incorrectos aquí ...} Nuevo ( HelloWorld ) ; {una instancia} HelloWorld4 : = HelloWorld ; {esto es válido - una copia del puntero} HelloWorld2 : = HelloWorld ; {esto es válido - una copia del puntero} Nuevo ( HelloWorld3 ) ; {una segunda instancia} HelloWorld4 : = HelloWorld3 ; {esto es válido - una copia del puntero} HelloWorld2 : = HelloWorld3 ; {esto es válido - una copia de puntero} Dispose ( HelloWorld ) ; {asigna solo dos instancias} Dispose ( HelloWorld3 ) ; {por lo que debe liberar solo dos instancias} end .
Esto funciona según la copia del puntero, a menos que haya una asignación específica para una copia más profunda.
Versión Delphi y Free Pascal
programa ObjectPascalExample ;escriba THelloWorld = procedimiento de clase Put ; terminar ; procedimiento THelloWorld . Poner ; begin Writeln ( '¡Hola, mundo!' ) ; terminar ;var HelloWorld : THelloWorld ; {este es un puntero implícito}comience HelloWorld : = THelloWorld . Crear ; {constructor devuelve un puntero a un objeto de tipo THelloWorld} HelloWorld . Poner ; HelloWorld . Libre ; {esta línea desasigna el objeto THelloWorld al que apunta HelloWorld} end .
Tenga en cuenta que la construcción del objeto todavía está disponible en Delphi y Free Pascal.
Versión Pascal moderna
programa ObjectPascalExample ;tipo THelloWorld = clase Put : procedimiento del objeto ; terminar ;procedimiento THelloWorld . Poner ; begin Writeln ( '¡Hola, mundo!' ) ; terminar ;procedimiento THelloWorld . Libre ; begin // desecha cualquier puntero // fin ;procedimiento THelloWorld . Init ; begin // inicializa variables // métodos de enlace (RTTI manual) con Self do begin TMethod ( @ Put ) : = [ @ THelloWorld . Ponga , @ Auto ] ; TMethod ( @ Free ) : = [ @ THelloWorld . Libre , @ Self ] ; Fin ; terminar ;var HelloWorld : THelloWorld ; {este es un puntero implícito}comience HelloWorld . Init ; {autoinicialización (puntero a un objeto) de tipo THelloWorld} HelloWorld . Poner ; HelloWorld . Libre ; {esta línea desasigna el objeto THelloWorld al que apunta HelloWorld} end .
Versión Oxygene
espacio de nombres ObjectPascalExample ; interfaz escriba ConsoleApp = clase clase método principal ; terminar ; THelloWorld = método de clase Put ; terminar ; implementación método THelloWorld . Poner ; comience la consola . WriteLine ( '¡Hola, mundo!' ) ; terminar ; método de clase ConsoleApp . Principal ; begin var HelloWorld : = new THelloWorld ; HelloWorld . Poner ; terminar ;final .
Versión DWScript (Smart Pascal)
escriba THelloWorld = procedimiento de clase Put ; begin PrintLn ( '¡Hola, mundo!' ) ; fin fin ; var HelloWorld : = THelloWorld . Crear ; HelloWorld . Poner ;
La implementación del método también se puede realizar en una ubicación distinta como en otros dialectos Object Pascal.
Desarrollo
Muchas funciones se han introducido continuamente en Object Pascal con extensiones de Delphi y extensiones de FreePascal. En reacción a las críticas, Free Pascal ha adoptado genéricos con la misma sintaxis que Delphi, siempre que se seleccione el modo de compatibilidad con Delphi y que tanto Delphi (parcial) como Free Pascal (más extenso) admitan la sobrecarga del operador . Delphi también ha introducido muchas otras características desde la versión 7, [10] incluidos los genéricos. Mientras que FreePascal intenta ser compatible con Delphi en el modo de compatibilidad con Delphi, también suele introducir muchas características nuevas en el lenguaje que no siempre están disponibles en Delphi.
Referencias
- ↑ a b Gibson, Steve (8 de mayo de 1989). "Borland y Microsoft entran en el anillo Pascal orientado a objetos". InfoWorld . pag. 28.
- ^ Tesler, Larry (1985). "Informe de objeto Pascal". Mundo del lenguaje estructurado . 9 (3): 10–7.
- ^ Lischner, Ray (2000). Delphi en pocas palabras: una referencia rápida de escritorio (1ª ed.). Sebastopol, CA: O'Reilly and Associates. ISBN 1565926595.
- ^ Carta a la comunidad: Embarcadero Technologies acuerda adquirir CodeGear de Borland . Edn.embarcadero.com. Consultado el 21 de julio de 2013.
- ^ "Desarrollo de iPhone / iPod" . Equipo de desarrollo de Free Pascal . Consultado el 13 de abril de 2009 .
- ^ "Un libro inteligente" .
- ^ Funa, Igor (2021). "Turbo51: Compilador Turbo Pascal para microcontroladores 8051" . Archivado desde el original el 25 de septiembre de 2018.
- ^ Draxler, Wolfgang. "WDSibyl: entorno de desarrollo visual" . Archivado desde el original el 12 de febrero de 2020.
- ^ "Pascal moderno" .
- ^ "Nuevas características del lenguaje Delphi desde Delphi 7" . CodeGear . Consultado el 6 de julio de 2008 .
enlaces externos
- Introducción a Object Pascal , MacTech Vol 2 Issue 12 1985.
- Guía de referencia de Object Pascal para Free Pascal. "El objetivo es enumerar qué construcciones de Pascal son compatibles y mostrar dónde difiere la implementación de Free Pascal de las implementaciones de Turbo Pascal o Delphi".
- Free Pascal: Guía de referencia , Guía de referencia para Free Pascal, versión 2.0.0
- Principales diferencias entre la sintaxis de C ++ y Object Pascal
- Think Pascal 4.5 Página no oficial sobre la versión final de Think Pascal de Symantec.
Delphi
- Guía de Object Pascal Language que cubre Borland Delphi 6-7
- Conceptos básicos de Delphi , recurso de los códigos fuente del proyecto Delphi.
- Ayuda de Delphi - первая помощь программисту en Delphi
- Programación Delphi , Recurso de Programación Delphi y Foros de Programación Delphi.