15 sept 2011

Algoritmos & Lenguajes de Programación

Algoritmos de Programación

Utilidad

En matemáticas,  ciencias de la computacion y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus y éste a su vez del matemático persa Al Juarismi ) es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha actividad.Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución. Los algoritmos son el objeto de estudio de la algoritmia.
En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador por parte de su patrón. Algunos ejemplos en matemática son el algoritmo de la división para calcular el cociente de dos números, el algoritmo de Euclides para obtener el máximo común divisor de dos enteros positivos, o el método de Gauss para resolver un sistema lineal de ecuaciones.

Ejemplo:

     ...
    i:=1;
    read(n);
    while i < n do begin
       (* cuerpo del bucle *)
       i := i + 1
    end;
     ...

Inicio
...
    float b, h, a;
    printf("Diga la base");
    scanf("%f", &b);
    printf("Diga la altura");
    scanf("%f", &h);
    a = (b*h)/2;
    printf("El área del triángulo es %f", a)
...
Fin




Leguajes de Programación


Un lenguaje de programación es un idioma artificial diseñado para expresar computaciones que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana. Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el código fuente de un programa informático se le llama programación.
También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos:
  • El desarrollo lógico del programa para resolver un problema en particular.
  • Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa).
  • Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina.
  • Prueba y depuración del programa.
  • Desarrollo de la documentación.
Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y 'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo HTML (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación, sino un conjunto de instrucciones que permiten diseñar el contenido de los documentos).
Permite especificar de manera precisa sobre qué datos debe operar una computadora, cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural. Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción de un programa de forma colaborativa.

¿Qué es un lenguaje de programación?. Un conjunto de sintaxis y reglas semánticas que definen los programas del computador. Es una técnica estándar de comunicación para entregarle instrucciones al computador. Un lenguaje le da la capacidad al programador de especificarle al computador, qué tipo de datos actúan y que acciones tomar bajo una variada gama de circunstancias, utilizando un lenguaje relativamente próximo al lenguaje humano.

Un programa escrito en un lenguaje de programación necesita pasar por un proceso de compilación, interpretación o intermedio, es decir, ser traducido al lenguaje de máquina para que pueda ser ejecutado por el ordenador.


Los lenguajes de programación pueden ser clasificados de acuerdo a diversos criterios:


Lenguajes interpretados (Interpretes) como Basic, Dbase.

Lenguajes compilados (Compiladores) como C, C++, Clipper.

Lenguajes interpretados con recolectores de basura (Maquina Virtual) como Smalltalk, Java, Ocaml.

Lenguajes Scripts (Motor de ejecución) como Perl, PhP.


Clasificación de los Lenguajes de Programación



Declarativos



Se les conoce como lenguajes declarativos en ciencias computacionales aquellos lenguajes de programación en los cuales se le indica a la computadora que es lo que se desea obtener o que es lo que se esta buscando, por ejemplo: Obtener los nombres de todos los empleados que tengan más de 32 años. Algunos ejemplos de lenguajes declarativos son el Datatrieve, SQL y las expresiones regulares.


Siglas de Structured Query Language (Lenguaje Estructurado de Consultas). Es un lenguaje declarativo que aúna características del Álgebra y el Cálculo Relacionales que nos permite lanzar consultas contra una Base de Datos para recuperar información de nuestro interés, almacenada en ella.


Ejemplos de consultas SQL:

SELECT Nombre From Tabl_fich_personales where Edad >=18;

Muestra el Campo "Nombre" de todos los individuos mayores de 18 años de la tabla

"Tabl_fich_personales"


El concepto de expresiones regulares (Regular expressions en inglés) se refiere a una familia de lenguajes compactos y potentes para la descripción de conjuntos de cadenas de caracteres. Numerosos editores de texto y otras utilidades (especialmente en el sistema operativo UNIX), como por ejemplo sed y awk, utilizan estos lenguajes para buscar ciertas estructuras en el texto y, por ejemplo, remplazarlas con alguna otra cadena de caracteres.


Imperativos



En ciencias de la computación se llama lenguajes imperativos a aquellos en los cuales se le ordena a la computadora cómo realizar una tarea siguiendo una serie de pasos o instrucciones, por ejemplo:

Paso 1, solicitar número.
Paso 2, multiplicar número por dos.
Paso 3, imprimir resultado de la operación.
Paso 4, etc,

Algunos ejemplos de lenguajes imperativos son: BASIC, C, C++, Java, Clipper, Dbase, C# y Perl.


Generaciones de los Lenguajes



Los equipos de ordenador (el hardware) han pasado por cuatro generaciones, de las que las tres primeras (ordenadores con válvulas, transistores y circuitos integrados) están muy claras, la cuarta (circuitos integrados a gran escala) es más discutible.


Algo parecido ha ocurrido con la programación de los ordenadores (el software), que se realiza en lenguajes que suelen clasificarse en cinco generaciones, de las que las tres primeras son evidentes, mientras no todo el mundo está de acuerdo en las otras dos. Estas generaciones no coincidieron exactamente en el tiempo con las de hardware, pero sí de forma aproximada, y son las siguientes:


Primera generación: Los primeros ordenadores se programaban directamente en código binario, que puede representarse mediante secuencias de ceros y unos sistema binario. Cada modelo de ordenador tiene su propio código, por esa razón se llama lenguaje de máquina.


Segunda generación: Los lenguajes simbólicos, así mismo propios de la máquina, simplifican la escritura de las instrucciones y las hacen más legibles.


Tercera generación: Los lenguajes de alto nivel sustituyen las instrucciones simbólicas por códigos independientes de la máquina, parecidas al lenguaje humano o al de las Matemáticas.


Cuarta generación: se ha dado este nombre a ciertas herramientas que permiten construir aplicaciones sencillas combinando piezas prefabricadas. Hoy se piensa que estas herramientas no son, propiamente hablando, lenguajes. Algunos proponen reservar el nombre de cuarta generación para la programación orientada a objetos.


Quinta generación: se llama así a veces a los lenguajes de la inteligencia artificial, aunque con el fracaso del proyecto japonés de la quinta generación el nombre ha caído en desuso.


Historia y Características de algunos Lenguajes



Ada


Lenguaje de programación diseñado por Jean Ichbiah de Cii Honeywell Bull por encargo del Departamento de Defensa de los EE.UU. para unificar el uso de los lenguajes de programación en los proyectos que le fuesen entregados. Es un lenguaje diseñado con la seguridad en mente y es multipropósito, pudiendo llegar desde la facilidad de Pascal a la flexibilidad de C pero con una filosofía orientada a la reducción de errores.

Su nombre conmemora a la condesa Ada Lovelace, hija de Lord Byron, a quien se considera la primera programadora de la Historia, por su relación con Charles Babbage, creador de la máquina analítica. El Departamento de Defensa de los Estados Unidos (DoD) y los ministerios equivalentes de varios países europeos exigen la utilización de este lenguaje en los proyectos realizados bajo su patrocinio. También es usado en otros entornos en los que también se necesita una gran seguridad como la gestión del tráfico aéreo (en empresas como Boeing o la española Indra).

Ada se diseñó de manera que permita evitar los errores comunes y difíciles de descubrir. Esto puede hacer que sea muy irritante para los programadores principiantes.

Hasta la fecha la ISO ha publicado dos ediciones del estándar de Ada: la original Ada 83 que incluía conceptos novedosos como las excepciones y la programación genérica; y la revisión Ada 95, que entre otras cosas añadió la capacidad de herencia para completar sus características de lenguaje OOP.

Un compilador de Ada muy usado es GNAT, originalmente desarrollado por la Universidad de Nueva York y mantenido en la actualidad por Ada Core Technologies. Está basado en la tecnología de GCC y es software libre.


Ejemplo: «Hola Mundo» en Ada es:


with Ada.Text_IO; use Ada.Text_IO;


procedure Hola_Mundo is

begin

Put_Line ("Hola Mundo");

end;


Aquí abajo hay un ejemplo más elaborado (función de Ackermann) de código fuente escrito en Ada, para mostrar sus rasgos principales.

with Ada.Command_Line; use Ada.Command_Line;

with Ada.Text_Io; use Ada.Text_Io;


procedure Ackermann is

function ack (x : integer; y: integer) return integer is

begin

if x = 0 then

return y + 1;

elsif y = 0 then

return ack(x-1,1);

else

return ack(x-1,ack(x,y-1));

end if;

end ack;

x,y,a : integer;

begin

if Argument_Count = 2 then

x := Integer'Value (Argument(1));

y := Integer'Value (Argument(2));

elsif Argument_Count = 1 then

x := 3;

y := Integer'Value (Argument(1));

else

x := 3;

y := 3;

end if;

a := ack (x,y);

Put ("Ack (" & Integer'Image (x) & ",");

Put_Line (Integer'Image (y) & ") = " & Integer'Image (a));

end Ackermann;


Podemos observar que:

La sintaxis, inspirada en Pascal, es bastante legible incluso para personas que no conozcan el lenguaje. Es un lenguaje que no escatima en la longitud de las palabras clave, en la filosofía de que un programa se escribe una vez, se modifica decenas de veces y se lee miles de veces (legibilidad es más importante que rapidez de escritura).

Todo es case-insensitive. Ya que todo el entorno Unix es case-sensitive, a algunos programadores de Unix no les gusta este rasgo de Ada.

En este caso, todo el programa es un solo procedimiento, que puede contener subprogramas (procedimientos o funciones) (en este caso: la función ack).

Cada sentencia se cierra con un end qué_cerramos. Es un modo de evitar errores y facilitar la lectura. No es necesario hacerlo en el caso de subprogramas, aunque todos los manuales lo aconsejan y casi todos los programadores de Ada lo hacen.

Se asigna un valor con :=, se comparan dos valores con =. A los programadores de C les puede confundir este rasgo inspirado en Pascal.

La sintaxis de atributos es objeto'atributo (o tipo'atributo) (nota: esto sólo aplica a los objetos predefinidos, ya que no es el concepto de atributo típico de OOP).

Se distingue entre "procedimientos" (subrutinas que no devuelven ningún valor pero pueden modificar sus parámetros) y "funciones" (subrutinas que devuelven un valor y no modifican los parámetros). La mayoría de lenguajes de programación no hacen esta distinción, sin embargo las funciones de Ada favorecen la seguridad al reducir los posibles efectos colaterales, pues no tienen parámetros in out.


Smalltalk


Diseñado por Alan Kay durante los años setenta en el Palo Alto Reasearch Institute de Xerox (conocido como Xerox Parc). Smalltalk era un elemento de la primera computadora personal con interfaz gráfica el "Alto" (que nunca fue llevado al mercado pero de cuyas ideas nació el Macintosh).

Smalltalk es considerado el primero de los lenguajes orientados a objetos (OOP). En Smalltalk TODO es un objeto.. aun los números enteros. Smalltalk se basó en ideas de Simula (un lenguaje de simulaciones).

Pero Smalltalk no es meramente un lenguaje, sino un entorno completo, prácticamente un sistema operativo que se ejecuta encima de una "máquina virtual". Esto asegura su máxima portabilidad entre plataformas.

A pesar de ser un lenguaje muy simple, muy poderoso, y que promueve buenas prácticas de programación, Smalltalk (hasta el 2002) no había llegado a ser un lenguaje muy popular. Esto se debe a la poca aceptación de lenguajes interpretados en los años 1980 y 1990. A pesar de esto algunas empresas como Digitalk, VisualWorks e IBM llegaron a tener relativo éxito con la plataforma como una herramienta de desarrollo rápido que competía contra herramientas como PowerBuilder y en menor grado contra VisualBasic que eran muy populares en los años 80 y 90.

En 1995, Sun Microsystems lanzó Java que es un lenguaje fuertemente influenciado por Smalltalk. Un lenguaje que popularizaría el concepto de lenguajes interpretados con recolectores de basura.

Ejemplos de Smalltalk:

En Smalltalk todo es un objeto, y a un objeto le enviamos mensajes. Por ejemplo:

1 + 1

Significa que al objeto "1" le enviamos el mensaje "+" con el parámetro "1". Este ejemplo entonces resulta en el valor "2".


Java


Plataforma de software desarrollada por Sun Microsystems. Esta plataforma ha sido desarrollada de tal manera que los programas desarrollados para ella puedan ejecutarse de la misma forma en diferentes tipos de arquitecturas y dispositivos computacionales.

La plataforma Java consta de tres partes:

  • El lenguaje de programación
  • Máquina virtual de Java
  • API Java


Originalmente llamado OAK por Ingenieros de Sun Microsystems, Java fue diseñado para correr en computadoras embebidas. Sin embargo, en 1995, dada la atención que estaba produciendo la Web, Sun Microsystems la distribuyó para sistemas operativos tales como Microsoft Windows.

El lenguaje mismo adopta la sintaxis de C++, pero su funcionamiento es muy similar al de Smalltalk. Incorpora sincronización y manejo de tareas en el lenguaje mismo (similar a Ada) e incorpora interfaces como un mecanismo alternativo a la herencia múltiple de C++.

A fines del siglo XX, Java llegó a ser el lenguaje de mayor acogida para programas de servidor. Utilizando una tecnología llamada JSP (similar a ASP de Microsoft), se hizó muy fácil escribir páginas dinámicas para sitios de Internet. Sumado a esto, la tecnología de JavaBeans, al incorporarse con JSP, permitía utilizar el patrón MVC (Modelo-Vista-Controlador) que ya tanto se había aplicado a interfaces gráficas.

Java llegó a ser extremadamente popular cuando Sun Microsystems introdujo la plataforma y el modelo de programación J2EE (Java 2 Enterprise Edition). Este modelo permite una separación entre la presentación de los datos al usuario (JSP o Applets), el modelo de datos (EJB), y el control (Servlets). Enterprise Java Beans (EJB) que es una tecnología de objetos distribuídos que pudo lograr el sueño de muchas empresas como Microsoft e IBM de crear una plataforma de objetos distribuídos con un monitor de transacciones. Con este nuevo estándar, empresas como BEA, IBM, Sun Microsystems, Oracle y otros crearon nuevos "servidores de aplicaciones" que tuvieron gran acogida en el mercado.

Además de programas del servidor, Java permite escribir programas de interfaz gráfica o textual. Además se pueden correr programas de manera incorporada o embebida en los navegadores web de Internet, aunque esto nunca llegó a popularizarse como se esperaba en un principio.

Los programas en Java generalmente son compilados a un lenguaje intermedio o bytecode, y luego interpretados por una máquina virtual (JVM). Esta última sirve como una plataforma de abstracción entre la máquina y el lenguaje permitiendo que se pueda "escribir el programa una vez, y correrlo en cualquier lado". También existen compiladores nativos de Java, tanto comercial como libre. El compilador GCC de GNU compila Java a código de máquina con algunas limitaciones al año 2002.

Ejemplo:

import javax.swing.JFrame;
import javax.swing.JLabel;
 
public class HolaMundo extends javax.swing.JFrame {
        
        public static void main(String[] args) {
                System.out.println("Vamos a crear una ventana que ponga \"HolaMundo\"");
                new HolaMundo();
        }
 
        public HolaMundo() {
                super("HolaMundo");
                JLabel etiqueta = new JLabel("HolaMundo");
                etiqueta.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
                getContentPane().add(etiqueta);
                setSize(400,200);
                
                addWindowListener(
                        new java.awt.event.WindowAdapter() {
                                public void windowClosing(java.awt.event.WindowEvent evt) {
                                        System.exit(0);
                                }
                        }
                );
        
                setVisible(true);
        }
}



C Más Más


C++ (pronunciado "C plus plus" o "C más más", por algunos programadores de habla hispana) es un lenguaje de programación, diseñado a mediados de los ochenta, por Bjarne Stroustrup, como extensión del lenguaje de programación C.

Es un lenguaje híbrido, que se puede compilar y resulta más sencillo de aprender para los programadores que ya conocen C. Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes como ROOT (http://root.cern.ch/) (enlace externo). Las principales características del C++ son abstracción (encapsulación), el soporte para programación orientada a objetos (polimorfismo) y el soporte de plantillas o programación genérica (Templates). Las plantillas se las define de la manera siguiente: template declaración X y se las instancia con X.

Pero añade otra serie de propiedades que se encuentran más difícilmente en otros lenguajes de alto nivel:

  • Posibilidad de redefinir los operadores
  • Indentificación de tipos en tiempo de ejecución (RTTI)

El nombre C++ fue propuesto por Rick Masciatti en el año 1983, cuando el lenguaje fue utilizado por primera vez fuera de un laboratorio científico. Antes se había usado el nombre "C con clases". En el C++, "C++" significa "uno más de C" y se refiere a que C++ es una extensión del C.

Algunos dicen que "C++" todavía significa "C", porque "++" en este caso es el operador de la postincrementación, es decir, aumenta el valor de la expresión a la que se refiere, después, en las instrucciones siguientes. Por esto el valor de la expresión en este momento permanece original.


Aquí hay un programa de ejemplo escrito en C++:
 
 #include 
 
 int main()
 {
    std::cout << "¡Hola mundo!" << std::endl;
 }


Pascal


Pascal es un lenguaje de programación de alto nivel, desarrollado por Niklaus Wirth. Se convirtió en uno de los lenguajes extensamente usados en lo cursos de introducción a la programación, pues fue bien recibido como lenguaje de enseñanza para estudiantes universitarios. Pascal es un lenguaje con técnicas de programación estructurada, dicha programación hace programadores disciplinados.

Sus primeras versiones datan de 1970. Es un lenguaje de programación estructurado creado por Niklaus Wirth, un profesor del Instituto tecnológico de Zurich, que lo creó pensando en un lenguaje didáctico que enseñase la programación como "una disciplina sistemática basada en determinados conceptos fundamentales". Estos conceptos más tarde se tornarían motivo de controversia entre los que creen que este lenguage tiene utilidad limitada a los medios academicos, como Brian W. Kernighan.

A partir de los años setenta se convirtió en el sucesor de ALGOL en el entorno universitario. Pascal permite construir programas muy legibles. Wirth es también autor del lenguaje Modula-2 y de Oberon.

El lenguaje de programación Delphi es una versión orientada a objetos moderna del lenguaje Pascal y es ampliamente utilizada en la industria de software.

Ejemplo:

PROGRAM Ejemplo(INPUT, OUTPUT);
 
FUNCTION PreguntaNombre:STRING;
VAR
    nombre:STRING;
BEGIN
    REPEAT
        WRITELN('Ingresa tu nombre:');
        READLN(nombre);
    UNTIL nombre <> '';
    PreguntaNombre := nombre;
END;
 
PROCEDURE Saluda;
VAR
    nombre:STRING;  
BEGIN
    nombre := PreguntaNombre;
    IF nombre = 'wirth' THEN
        WRITELN('Hola señor Wirth!');
    ELSE 
        WRITELN('Hola '+nombre);
END;
 
BEGIN
    Saluda;
END.
 

En la ciencia de la computación, Pascal es uno de los hitos de lenguajes de programación el cual tiene definido la programación de computadora y esta todavía en uso hoy en día.

Niklaus Wirth lo desarrollo para hacer posible la programación estructurada que seria mas fácil para un compilador para procesar. Pascal se baso en el lenguaje de programación Algol y su nombre se debe en honor del matemático Blaise Pascal. Wirth también desarrollo Modula-2 y Oberon, lenguajes similares a Pascal el cual también soporta programación orientada a objetos.

Características únicas


A diferencia de lenguajes de programación descendientes de C, Pascal utiliza := para asignamiento en vez de =. Esto es una ventaja en diferenciar comparaciones y asignamientos. En C = = es comparación, pero = es una asignación. Esas pueden ser fáciles de confundir resultando en una línea de asignamiento en vez de comparación. También = tiene siempre siendo comparación en matemáticas, así a cambiar el significado en un lenguaje de programación resulta en confusión. Esta sintaxis conduce a muchos errores [bugs] difíciles de rastrear en código C. Desde que Pascal no permite asignamientos en línea y utiliza sintaxis distinta para asignamientos y comparaciones, esto no sufre de esos errores.

Otra mayor diferencia es que Pascal se determina el tipo fuertemente. Esto significa que toda variable debe ser definida con un tipo especifico antes que puedan ser usadas. También, asignamientos de variable incompatibles no son permitidas sin un tipo explicito. Esto previene errores comunes donde variables son usadas incorrectamente por que el tipo es desconocido. Esto también aliviana la necesidad de notación húngara - la practica de nombres de variables sufijos con tipo- identificando letras.

Implementaciones


Primeros acercamientos (mas notables en UCSD p-System) trasladar código Pascal dentro de una representación de p-Code de máquina independiente. Este código intermediario fue entonces interpretado por un programa especifico a cada arquitectura. Como una consecuencia, solo el interprete pequeño tuvo que ser portada a muchas arquitecturas.

En los 1980s Anders Hejlsberg escribió el compilador Blue Label Pascal para la Nascom-2. Mas tarde el fue a trabajar para Borland y rescribió su compilador que se convirtió en Turbo Pascal para la IBM PC. Este nuevo compilador se vendió por $49, el cual fue mucho menos que el precio que Hejlsberg originalmente solicito para el compilador Blue Label Pascal.

El barato compilador de Borland tubo una larga influencia en la comunidad de Pascal que comenzó concentrándose principalmente en el IBM PC a finales de los 80. Muchos aficionados a la PC en busca de un estructurado reemplazo para el BASIC utilizo este producto. Turbo Pascal, siendo disponible solo en una arquitectura, trasladada directamente al código de máquina del Intel 8088, haciéndola mucho mas rápida que esquemas interpretados.

Durante los 90s compiladores que pudieron redesignar a diferentes arquitecturas de hardware se convirtieron mas común. Esto permitió para Pascal traducción a código de maquina nativo que fue al mismo tiempo fácil portar a hardware nuevo.

Con Turbo Pascal versión 5 Borland agregó orientación a objetos a Pascal. Sin embargo, Borland después decidió característica orientado a objetos mas elaborada, y volvió a empezar en Delphi usando el proyecto estándar Object Pascal propuesto por Apple como una base. (Este proyecto de Apple no es un estándar formal aún) Borland también llamo este Object Pascal en las primeras versiones de Delphi, pero cambio el nombre a lenguaje de programación Delphi en sus ultimas versiones. Los primeros cambios comparando a las viejas extensiones OOP fueron una basada-referencia modelo objeto, constructores y destructores virtuales, y propiedades. Hay otros compiladores implementando este dialecto: vease lenguaje de programación Delphi.

Compiladores disponibles publicamente


Varios compiladores de Pascal están disponibles para el uso del publico en general:

  • Compilador GNU Pascal Compiler (GPC) es un adicional front-end para el GNU Compiler Collection (GCC), y esta escrito en C. Distribuido libremente bajo la licencia GNU General Public License. El soporte de Borlan/Turbo Pascal está sin embargo algo limitado.
  • FreePascal esta escrito en Pascal (asi que se compilo este mismo), y esta apuntado a proveer un conveniente y poderoso compilador. También distribuido libremente bajo la licencia GNU GPL. Este puede mezclar Turbo Pascal con código Delphi, y soporta muchas plataformas y sistemas operativos.
  • Turbo Pascal fue el compilador Pascal dominante para PCs durante los 80s y a principios de los 90s,popular ambos debido a sus extensiones poderosas y los tiempos de la compilación sumamente bajos. Actualmente, versiones viejas de TP (hasta la 5.5) están disponibles para descargarlo gratuitamente desde el sitio de Borland (se requiere registración)
  • Delphi es un producto de Borland RAD (Rapid Application Development). Utiliza el lenguaje de programación Delphi, descendiente de Pascal, para crear aplicaciones para la plataforma windows. La ultima versión también soporta compilación de la plataforma .NET.
  • Kylix es la mas nueva versión de Borland reiterando la rama de Pascal de sus productos. Esta es la descendiente de Delphi, con soporte para el sistema operativo Linux y una libreria object mejorada. El compilador y el IDE están disponibles para uso no comercial. El compilador (pero no la librería o la IDE) es supuestamente a convertirse en software Open Source pronto algún día .