Download File
Document related concepts
Transcript
UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO COLEGIO DE CIENCIAS Y HUMANIDADES PLANTEL VALLLEJO LENGUAJES DE PROGRAMACIÓN PROFESOR: Manuel Odilón Gómez Castillo ALUMNOS: Karen Cruz Ríos Blanca Estela Espinal Hernández Abraham Mayer Chávez GRUPO: 232 A 0 PRÓLOGO Captura del microordenador Commodore PET-32 mostrando un programa en el lenguaje de programación BASIC, bajo el emulador VICE en una distribución GNU/Linux. La primera línea, titula (rem) al programa para permitir su almacenamiento, la segunda, solicita una cadena de datos (input) que una vez obtenidos, almacenará en una instrucción que el lenguaje lleva incorporada, llamada variable alfanumérica ($). La tercera línea, establece una condición, (if) determina que si la cadena de texto almacenada no es igual (<>) al valor dado, proceda (then) a ejecutar la línea anterior, volviendo así a solicitar nuevos datos, pero en caso de ser igual, (=) continúe ejecutando la siguiente línea del programa. La cuarta línea, imprime el mensaje encomillado en pantalla (print), para terminar con la quinta línea que establece su fin. (end) 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.1 Está formado de 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 el 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 y el texto de los documentos) 1 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, tal como sucede con el lenguaje Léxico. 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 del programa de forma colaborativa. Historia Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje específico conocido como código máquina, el cual la máquina comprende fácilmente, pero que lo hace excesivamente complicado para las personas. De hecho sólo consiste en cadenas extensas de números 0 y 1. Para facilitar el trabajo, los primeros operadores de computadoras decidieron hacer un traductor para reemplazar los 1 y 0 por palabras o abstracción de palabras y letras provenientes del inglés; éste se conoce como lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). En realidad escribir en lenguaje ensamblador es básicamente sigue la misma estructura del en lenguaje máquina, pero las letras y palabras son más fáciles de recordar y entender que los números. La necesidad de recordar secuencias de programación para las acciones usuales llevó a denominarlas con nombres fáciles de memorizar y asociar: ADD (sumar), SUB (restar), MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia de posiciones se le denominó "instrucciones", y a este conjunto de instrucciones se le llamó lenguaje ensamblador. Posteriormente aparecieron diferentes lenguajes de programación, los cuales reciben su denominación porque tienen una estructura sintáctica similar a los lenguajes escritos por los humanos, denominados también lenguajes de alto nivel. La primera programadora de computadora conocida fue Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo en las matemáticas a Ada quien, después de conocer a Charles Babbage, tradujo y amplió una descripción de su máquina analítica. Incluso aunque Babbage nunca completó la construcción de cualquiera de sus máquinas, el trabajo que Ada realizó con éstas le hizo ganarse el título de primera programadora de computadoras del mundo. El nombre del lenguaje de programación Ada fue escogido como homenaje a esta programadora. A finales de 1953, John W. Backus sometió una propuesta a sus superiores en IBM para desarrollar una alternativa más práctica al lenguaje ensamblador para programar el computador central IBM 704. El histórico equipo Fortran de Backus consistió en los programadores Richard Goldberg, Sheldon F. Best, 2 Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre.2 El primer manual para el lenguaje Fortran apareció en octubre de 1956, con el primer compilador Fortran entregado en abril de 1957. Esto era un compilador optimizado, porque los clientes eran reacios a usar un lenguaje de alto nivel a menos que su compilador pudiera generar código cuyo desempeño fuera comparable al de un código hecho a mano en lenguaje ensamblador. En 1960, se creó COBOL, uno de los lenguajes usados aun en 2010 en informática de gestión. A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un método más eficiente para programarlas. Entonces, se crearon los lenguajes de alto nivel, como lo fue el BASIC en las versiones introducidas en los microordenadores de la década de 1980. Mientras que una tarea tan sencilla como sumar dos números puede necesitar varias instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará con solo una. Implementación La implementación de un lenguaje es la que provee una manera de que se ejecute un programa para una determinada combinación de software y hardware. Existen básicamente dos maneras de implementar un lenguaje: Compilación e interpretación. Compilación es la traducción a un código que pueda utilizar la máquina. Los programas traductores que pueden realizar esta operación se llaman compiladores. Éstos, como los programas ensambladores avanzados, pueden generar muchas líneas de código de máquina por cada proposición del programa fuente. Se puede también utilizar una alternativa para traducir lenguajes de alto nivel. En lugar de traducir el programa fuente y grabar en forma permanente el código objeto que se produce durante la compilación para utilizarlo en una ejecución futura, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuación, un programa intérprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la máquina, convierte cada proposición del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el procesamiento de los datos. El código objeto no se graba para utilizarlo posteriormente. La siguiente vez que se utilice una instrucción, se la deberá interpretar otra vez y traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo o bucle, cada instrucción del bucle tendrá que volver a ser interpretada en cada ejecución repetida del ciclo, lo cual hace que el 3 programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada momento el código completo). El intérprete elimina la necesidad de realizar una compilación después de cada modificación del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una ejecución del código. La mayoría de lenguajes de altonivel, permiten la programación multipropósito, sin embargo, muchos de ellos fueron diseñados para permitir programación dedicada, como lo fue PASCAL con las matemáticas en su comienzo. También, se han implementado lenguajes educativos infantiles como LOGO que mediante una serie de simples instrucciones, permitía mover una tortuga entre otras cosas. En el ámbito de infraestructura de internet, cabe destacar a Perl con un poderoso sistema de procesamiento de texto y una enorme colección de módulos. Técnica Para escribir programas que proporcionen los mejores resultados, cabe tener en cuenta una serie de detalles. Corrección. Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente qué debe hacer el programa antes de desarrollarlo y, una vez acabado, compararlo con lo que realmente hace. Claridad. Es muy importante que el programa sea lo más claro y legible posible, para facilitar así su desarrollo y posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, así como cuidar el estilo en la edición; de esta forma se ve facilitado el trabajo del programador, tanto en la fase de creación como en las fases posteriores de corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es aún más necesaria para que otros programadores puedan continuar el trabajo fácilmente. Algunos programadores llegan incluso a utilizar Arte ASCII para delimitar secciones de código. Otros, por diversión o para impedir un análisis cómodo a otros programadores, recurren al uso de código ofuscado. Eficiencia. Se trata de que el programa, además de realizar aquello para lo que fue creado (es decir, que sea correcto), lo haga gestionando de la 4 mejor forma posible los recursos que utiliza. Normalmente, al hablar de eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros recursos que también pueden ser de consideración al obtener la eficiencia de un programa, dependiendo de su naturaleza (espacio en disco que utiliza, tráfico de red que genera, etc.). Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea hardware o software, diferente a aquélla en la que se elaboró. La portabilidad es una característica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha desarrollado para sistemas GNU/Linux ejecutarse también en la familia de sistemas operativos Windows. Esto permite que el programa pueda llegar a más usuarios más fácilmente. Paradigmas Los programas se pueden clasificar por el paradigma del lenguaje que se use para producirlos. Los principales paradigmas son imperativos y declarativos. Los programas que usan un lenguaje imperativo especifican un algoritmo, usan declaraciones, expresiones y sentencias.3 Una declaración asocia un nombre de variable con un tipo de dato, por ejemplo: var x: integer; . Una expresión contiene un valor, por ejemplo: 2 + 2 contiene el valor 4. Finalmente, una sentencia debe asignar una expresión a una variable o usar el valor de una variable para alterar el flujo de un programa. Por ejemplo: x := 2 + 2; if x == 4 then haz_algo();. Una crítica común en los lenguajes imperativos es el efecto de las sentencias de asignación sobre una clase de variables llamadas "no locales".4 Los programas que usan un lenguaje declarativo especifican las propiedades que la salida debe conocer y no especifica cualquier detalle de implementación. Dos amplias categorías de lenguajes declarativos son los lenguajes funcionales y los lenguajes lógicos. Los lenguajes funcionales (como Haskell) no permiten asignaciones de variables no locales, así, se hacen más fácil, por ejemplo, programas como funciones matemáticas.4 El principio detrás de los lenguajes lógicos (como Prolog) es definir el problema que se quiere resolver (el objetivo) y dejar los detalles de la solución a el sistema de Prolog. 5 El objetivo es definido dando una lista de sub-objetivos. Cada sub-objetivo también se define dando una lista de sus sub-objetivos, etcétera. Si al tratar de buscar una solución, una ruta de sub-objetivos falla, entonces tal sub-objetivo se descarta y sistemáticamente se prueba otra ruta. 5 La forma en la cual es programa se crea puede ser por medio de texto o de forma visual. En un lenguaje de programación visual, los elementos son manipulados gráficamente en vez de especificarse por medio de texto. FOREWORD Capture Commodore PET microcomputer-32 showing a program in BASIC programming language under the VICE emulator on a GNU / Linux. The first line, called (rem) to the program to allow storage, the second asks a string of data (input) that once obtained, stored in a statement that the language has built-in variable called alphanumeric ($). The third line sets a condition (if) determines whether the stored string is not equal (<>) to the value given appropriate (then) to execute the previous line, thereby reverting to request new data, but if to be equal (=) to continue running the next program line. The fourth line prints the message on the screen encomillado (print), to end the fifth line that sets an end. (End) A programming language is an artificial language designed to express computations that can be carried out by machines like computers. They can be used to create programs that control physical and logical behavior of a machine, to express algorithms precisely, or mode of communication humana.1 It consists of a set of symbols and syntactic and semantic rules that define its structure and meaning its elements and expressions. The process by which it is written, tested, debugged, compiled and maintained the source code of a computer program is called programming. Also the word programming is defined as the process of creating a computer program, through the application of logical procedures, through the following steps: • The logical development of the program to solve a particular problem. • Writing the program logic using a specific programming language (coding the program) • Assembly or compilation of the program to make machine language. • Testing and debugging the program. • Development of documentation. A common mistake is synonymous terms for 'programming language' and 'computer language'. Computer languages encompass the programming languages and others, such as HTML. (Markup language for web pages is not really a programming language but a set of instructions that allow to design the content and text documents) Allows you to specify precisely what data should operate a computer, how they should be stored or transmitted and what actions should be taken under a variety of circumstances. All this, through a language that tries to be relatively close to human language or natural, as with the language lexicon. An important feature of programming languages is precisely that more than one programmer can use a common set of instructions that are included among them for the 6 construction History of a collaborative program. Fortran code on a punch card, showing the specialized use of columns 1-5, 6 and 73-80. For the computer to understand our instructions must use a specific language called machine code, which the machine is easily understood, but that makes it too complicated for people. In fact only consists of extensive chains of numbers 0 and 1. To facilitate the work, the first computer operators decided to replace a translator for 1 and 0 for words or abstraction of words and letters from the English, this is known as assembly language. For example, to add the letter A is used the English word add (add). Actually written in assembly language is basically the same structure of the machine language, but the letters and words are easier to remember and understand the numbers. The need to remember sequences of programming for common action was to call them easy to remember names and associate: ADD (addition), SUB (subtraction), MUL (multiply), CALL (Run subroutine), etc. This sequence of positions was called "instructions", and this set of instructions is called assembly language. Later appeared different programming languages, which get their name because they have a similar syntactic structure to the language written by humans, so-called high-level languages. The first known computer programmer was Ada Lovelace, daughter of Lord Byron and Annabella Milbanke Byron. Anabella introduced mathematics to Ada, who, after meeting Charles Babbage, translated and expanded a description of his analytical engine. Even though Babbage never completed construction of any of its machines, the work done with Ada they earned him the title of first computer programmer in the world. The name of the Ada programming language was chosen as a tribute to the programmer. In late 1953, John W. Backus submitted a proposal to his superiors at IBM to develop a more practical alternative to assembly language to program the IBM 704 mainframe computer. The historic team consisted Fortran programmers Backus Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois and David Sayre.2 Haibt The first manual for the Fortran language appeared in October 1956 with the first FORTRAN compiler delivered in April 1957. This was an optimizing compiler, because customers were reluctant to use a high-level language unless its compiler could generate code whose performance was comparable to that of a hand-made code in assembly language. In 1960, he created COBOL, one of the languages used even in 2010 in computer management. As the complexity of the tasks being carried out by computers grew, it became necessary to have a more efficient method to program them. There, the high7 level languages, as was the BASIC versions microcomputers introduced in the 1980s. While a task as simple as adding two numbers may require several assembly language instructions in a high-level language is sufficient to just one. Implementation Source code of a program written in Java programming language The implementation of a language is one that provides a way to run a program for a particular combination of software and hardware. There are basically two ways to implement a language: Compilation and interpretation. Compilation is the translation into a code that can use the machine. Translation programs that can perform this operation are called compilers. These, like assemblers advanced programs can generate many lines of machine code for each proposition of the source program. You can also use an alternative to translate high-level languages. Instead of translating the source program and permanently save the object code produced during compilation for use in a future implementation, the programmer just load the source program in the computer along with the data to be processed. Then, an interpreter program stored on the disk operating system, permanently or included within the machine, makes every sentence of the source program into machine language as will be necessary during the processing of data. The object code is not recorded for later use. The next time you use an instruction, it must again be interpreted and translated into machine language. For example, during repetitive processing steps of a cycle or loop, each loop instruction will have to be interpreted in each cycle repeated performance, which makes the program more slowly at runtime (because it is reviewing the code in runtime) but faster at design time (because you have to be compiled each time the entire code). The interpreter removes the need for a compilation after each modification of the program when you want to add features or fix bugs, but it is obvious that a pre-compiled object program must be implemented much more quickly than one that has to be interpreted at each step during code execution. Most highlevel languages, enable multi-programming, however, many of them were designed to enable dedicated programming, as it was PASCAL mathematics at the start. Have also been implemented as a children's educational language LOGO that through a series of simple instructions, allowed to move a turtle among other things. In the area of Internet infrastructure, to include Perl with a powerful text-processing system and a large collection of modules. Technique To write programs that provide the best results, it should take into account a number of details. • Correction. A program is correct if you what to do as established in previous phases to its development. To determine if a program does what it must, it is 8 very important to specify clearly what to do before you develop the program and, once finished, compare it to what actually does. • Clarity. It is very important that the program is as clear and readable as possible to facilitate their development and subsequent maintenance. In developing a program should try their structure is simple and consistent, and take care of the editing style, is thus facilitated the work of the programmer, both in the development phase and in the later stages of error correction , extensions, modifications, etc. Phases that can be performed even by another developer, thus further clarity is necessary to allow other developers to continue the work easily. Some developers go so far as to use ASCII art to delimit sections of code. Others, for fun or to prevent an easy analysis to other programmers, resort to using obfuscated code. • Efficiency. This is the program, in addition to that for which it was created (that is, that's right), managing to do the best possible resources it uses. Normally, when talking about efficiency of a program, usually referred to the time it takes to perform the task for which it was created and the amount of memory you need, but there are other resources that may be of consideration to achieve the efficiency of a program, depending on their nature (which uses disk space, network traffic generated, etc.).. • Portability. A program is portable when you have the ability to run on a platform, either hardware or software, different from that in which it was developed. Portability is a very desirable feature for a program, allowing, for example, a program that was developed for GNU / Linux also run in the Windows family of operating systems. This allows the program to reach more users more easily. Paradigms The programs can be classified by the paradigm of language that is used to produce them. The main paradigms are imperative and declarative. Programs that use mandatory language specifying an algorithm, using statements, expressions and sentencias.3 A declaration associates a variable name with a data type, for example: var x: integer;. An expression contains a value, eg 2 + 2 contains the value 4. Finally, a sentence must assign an expression to a variable or use the value of a variable to alter the flow of a program. For example: x: = 2 + 2, if x == 4 Then haz_algo ();. A common criticism in imperative languages is the effect of assignment statements about a class of variables called "non-locals' 4 Programs that use a declarative language to specify the properties the output must know and do not specify any implementation details. Two broad categories of declarative languages are functional languages and logical languages. Functional languages (like Haskell) do not allow non-local variable assignments, thus, become easier, for example, programs like functions matemáticas.4 The principle behind the logical languages (like Prolog) is to define the problem to be solved (the objective) and leave the details of the solution to the system Prolog.5 The objective is defined by giving a list of sub9 goals. Each sub-goal is also defined by giving a list of sub-objectives and so forth. If trying to find a solution, a sub-objective path fails then that subgoal is discarded and systematically try another route. How is the program which is created may be by text or visual form. In a visual programming language, graphic elements are manipulated rather than specified by text. 10 INTRODUCCIÓN La programación de computadoras es una de las áreas mas interesantes de la tecnología moderna. Para comunicarnos con estas maquinas es necesario recurrir a lenguajes especiales. Este trabajo presenta brevemente lo que son los lenguajes de programación, como se clasifican, las características y diferencias de los principales lenguajes y para finalizar, estudiaremos cual es el proceso que le permite a la computadora entender esos lenguajes. ¿QUÉ ES UN LENGUAJE 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 de 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. 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. ¿QUÉ NOS PERMITE HACER UN LENGUAJE DE PROGRAMACIÓN? 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, tal como sucede con el lenguaje Léxico. Una característica relevante de los lenguajes de programación es precisamente que más de un programador 11 pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción del programa de forma colaborativa. FINALIDAD DE LOS LENGUAJES Entre los seres humanos el lenguaje es un medio de comunicación de ideas, sentimientos, necesidades, ordenes. De un modo similar, entre el hombre y la computadora la comunicación se establece por medio de un lenguaje especializado. Las computadoras pueden hacer algunas tareas elementales(con mucha rapidez) y combinándolas en forma adecuada es posible obtener resultados útiles. Un lenguaje de programación permite que el usuario controle las tareas elementales de la computadora, además de mantener un nivel de comunicación adecuado. Por tanto, programar consiste en lograr que la computadora funcione como queremos, aplicando las facilidades de un lenguaje. La programación de las primeras computadoras (para cambiar un proceso por otro) se efectuaba reacomodando cables y conexiones (los programas eran cableados). Gracias al espíritu inquieto de muchos investigadores esta actividad fue facilitada y mejorada, quitándole lo mecánico y volviéndola lógica. HISTORIA Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje específico conocido como código máquina, el cual la máquina comprende fácilmente, pero que lo hace excesivamente complicado para las personas. De hecho sólo consiste en cadenas extensas de números 0 y 1. Para facilitar el trabajo, los primeros operadores de computadoras decidieron hacer un traductor para reemplazar los 1 y 0 por palabras o abstracción de palabras y letras provenientes del inglés; éste se conoce como lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). En realidad escribir en lenguaje ensamblador es básicamente sigue la misma estructura del en lenguaje máquina, pero las letras y palabras son más fáciles de recordar y entender que los números. La necesidad de recordar secuencias de programación para las acciones usuales llevó a denominarlas con nombres fáciles de memorizar y asociar: ADD (sumar), SUB (restar), MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia de posiciones se le denominó "instrucciones", y a este conjunto de 12 instrucciones se le llamó lenguaje ensamblador. Posteriormente aparecieron diferentes lenguajes de programación, los cuales reciben su denominación porque tienen una estructura sintáctica similar a los lenguajes escritos por los humanos, denominados también lenguajes de alto nivel. La primera programadora de computadora conocida fue Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella introdujo en las matemáticas a Ada quien, después de conocer a Charles Babbage, tradujo y amplió una descripción de su máquina analítica. Incluso aunque Babbage nunca completó la construcción de cualquiera de sus máquinas, el trabajo que Ada realizó con éstas le hizo ganarse el título de primera programadora de computadoras del mundo. El nombre del lenguaje de programación Ada fue escogido como homenaje a esta programadora. A finales de 1953, John W. Backus sometió una propuesta a sus superiores en IBM para desarrollar una alternativa más práctica al lenguaje ensamblador para programar el computador central IBM 704. El histórico equipo Fortran de Backus consistió en los programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre. El primer manual para el lenguaje Fortran apareció en octubre de 1956, con el primer compilador Fortran entregado en abril de 1957. Esto era un compilador optimizado, porque los clientes eran reacios a usar un lenguaje de alto nivel a menos que su compilador pudiera generar código cuyo desempeño fuera comparable al de un código hecho a mano en lenguaje ensamblador. En 1960, se creó COBOL, uno de los lenguajes usados aun en 2010 en informática de gestión. A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un método más eficiente para programarlas. Entonces, se crearon los lenguajes de alto nivel, como lo fue el BASIC en las versiones introducidas en los microordenadores de la década de 1980. Mientras que una tarea tan sencilla como sumar dos números puede necesitar varias instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará con solo una. 13 CLASIFICACIÓN DE LOS LENGUAJES En la actualidad hay una gran variedad de lenguajes de programación, cada uno con muchas ventajas y también con desventajas. No obstante, los lenguajes pueden agruparse según sus características comunes. Los lenguajes de programación han sido clasificados de muchas maneras: *Por su nivel *Por sus aplicaciones principales. La clasificación de los lenguajes por su nivel se refiere a qué tan cercanos están los lenguajes a las características físicas de la computadora o qué tan próximos están alas necesidades del programador. La segunda, por aplicaciones, se refiere a las ventajas que tienen los lenguajes para resolver ciertos problemas específicos. CLASIFICACIÓN DE LOS LENGUAJES POR SU NIVEL LENGUAJES DE BAJO NIVEL Los lenguajes de bajo nivel son aquellos que el procesador de la computadora entiende en forma directa. Dependen de las características de cada tipo de maquina y sólo son comprensibles por especialistas. Aparecieron durante la primera generación de computadoras y entran en esta categoría el lenguaje maquina y el lenguaje ensamblador. LENGUAJES DE ALTO NIVEL Los lenguajes de alto nivel son aquellos desarrollados para el usuario de la computadora. Permiten que los procedimientos se expresen con un estilo comprensible; sin embargo, la computadora no los entiende directamente. Algunos de estos lenguajes fueron desarrollados durante la segunda generación de computadoras y la mayoría durante la tercera. 14 Ejemplos de lenguajes de alto nivel son: Pascal, BASIC, Ada, FORTRAN, etcétera. LENGUAJES DE NIVEL MEDIO Los lenguajes de nivel medio se definen como lenguajes que reúnen las ventajas de los dos niveles anteriores. Los únicos lenguajes de este tipo son C y Forth. El siguiente esquema presenta el lugar que ocupan los lenguajes dentro del campo de la computación. El lenguaje mas cercano al hardware (centro de la figura) es el lenguaje maquina, circundado por el lenguaje ensamblador. Como este ultimo se encuentra mas alejado del hardware, hay una capa de traducción llamada programa ensamblador. Mas hacia el exterior están los lenguajes de alto nivel y de cuarta generación. Ambos requieren de un estrato intermedio de traducción, formado por los compiladores e intérpretes. Lenguajes de cuarta generación Lenguajes de alto nivel Compiladores e interpretes Lenguaje ensamblador Programa ensamblador Lenguaje máquina Hard ware 15 CLASIFICACIÓN DE LOS LENGUAJES POR SU APLICACIÓN Muchos de los lenguajes de alto nivel desarrollados para servir a un objeto en especial. A continuación una clasificación de los lenguajes de acuerdo con las áreas de aplicación: *Lenguajes de propósito general: Pascal, BASIC. *Lenguajes para aplicaciones científicas: FORTRAN, APL. *Lenguajes didácticos: Logo. *Lenguajes para administración. COBOL, RPG, SQL. *Lenguajes para inteligencia artificial: Prolog, Lisp. *Lenguajes para programación de sistemas: C, Ada. *Lenguajes de programación orientada a objetos (OOP): SmallTalk, Java, C++. *lenguajes de cuarta generación (4GL): Mapper, Cogen, Linc. *Lenguajes orientados a la interfaz gráfica: Visual Basic, Visual C++, Delphi. LENGUAJES DE BAJO NIVEL Los lenguajes de bajo nivel, lenguaje maquina y ensamblador, aparecieron durante la primera generación de computadoras y siguen siendo utilizados ya que son los lenguajes propios de los microprocesadores, aunque sólo los usan programadores especializados. EL LENGUAJE MÁQUINA El CPU de una computadora es un circuito electrónico digital, por ello solo entiende pulsos electrónicos. Esos pulsos eléctricos corresponden a secuencias de unos y ceros que el procesador maneja y entiende, y son conocidas como lenguaje maquina; no importa que tan moderna sea la computadora, cualquier programa que ejecute deberá estar en lenguaje maquina antes de que el CPU pueda entenderlo. Programar en código maquina permite el control directo del CPU. Sin embargo, sise cambia de computadora, el lenguaje cambia. Por lo tanto, un programa realizado en el código maquina de un procesador no sirve para otro procesador diferente. A continuación se muestra como ejemplo un programa en lenguaje maquina que lee os números desde el teclado, los suma e imprime el resultado. Fue 16 escrito para computadoras con microprocesador Intel 8086 (y sólo funcionará en maquinas con este procesador o compatible). 10110100 00000001 11001101 0010001 (leer un número desde el teclado) 10001010 11111000 10110100 00000001 11001101 00100001 (leer otro número desde el teclado) 00000010 11111000 (sumar los números) 10110100 00000010 10001010 11010111 1100110100100001 (imprimir el resultado) 10111000 01001100 00000000 (terminar proceso) 11000011 Aquí se observa con toda claridad que este lenguaje no es sencillo y con facilidad causa confusión. Para disminuir las confusiones con los ceros y unos se recurre a la equivalencia hexadecimal de cada byte. B4 01 CD 21 8A F8 B4 01 CD 21 (leer otro número desde el teclado) 02 F8 (sumar los números) B4 02 8A D7 CD 21 (imprimir e resultado) B8 4C 00 (terminar proceso) (leer un número desde el teclado) C3 17 La ventaja del código maquina es el control directo del procesador y la gran velocidad de ejecución. Además, pese a los avances logrados en lenguajes, aún existen rutinas que sólo es posible hacer en código maquina. EL LENGUAJE ENSAMBLADOR Para allanar algunas de las dificultades que presentaba la programación en lenguaje maquina se desarrollo un método mnemotécnico que establecía una equivalencia entre las secuencias binarias y un conjunto de abreviaturas que indicaban las acciones efectuadas por el procesador. A esta mejora se le nombró como lenguaje ensamblador y sus instrucciones mnemotécnicas o mnemónicas. El lenguaje ensamblador maneja símbolos que el procesador no entiende de inmediato, por ello los programas deben traducirse a lenguaje maquina para ejecutarse. Ese proceso de traducción (conocido como ensamblado) es sencillo pues existe una relación uno a uno entre las instrucciones en ensamblador y las secuencias numéricas en código maquina. Gracias al ensamblador las revisiones y cambios ya no se realizan sobre el código binario de la computadora, sino sobre símbolos. El programa antes presentado luce así en lenguaje ensamblador: MOV AH,0 1H I N T 2 1H (leer un número desde el teclado) MOV BH, AL MOV AH,0 1H I N T 2 1H A DD BH ,BL (leer otro numero desde el teclado) (sumar los números) MOV DL,BH I N T 2 1H M O V A X , 4 C 0 0 H (imprimir el resultado) I N T 21 (terminar proceso) RET 18 El ensamblador tiene las mismas ventajas que el lenguaje maquina: control directo del procesador y gran velocidad de ejecución; además, ofrece mayores facilidades para el desarrollo de programas. También es un lenguaje que depende por completo de cada tipo de computadora. LENGUAJES DE ALTO NIVEL Debido a las dificultades que presentaba programar con lenguajes de bajo nivel, se desarrollaron nuevos lenguajes, llamados de alto nivel, que facilitaron bastante el trabajo de los programadores. Actualmente hay gran variedad de lenguajes, algunos aparecieron en la segunda generación (FOLTRAN, ALGOL y COBOL), la mayoria en la tercera y se siguen desarrollando más. CARACTERÍSTICAS GENERALES Por muy diferentes que puedan ser entre sí los lenguajes de alto nivel, todos poseen las siguientes características: Independencia: el lenguaje no depende de un equipo en particular Transportabilidad: un programa hecho en una computadora puede funcionar en otra Generación de códigos: los programas hechos en lenguajes de alto nivel deben ser traducidos a lenguaje maquina para poder ejecutarse. Notación orientada al problema: los lenguajes y su gramática se especializan hacia un área especifica (administrativa, científica, etcétera). Uso de identificadores: los valores o procesos pueden s ser referidos mediante símbolos o palabras, en lugar de números. Similitud con el lenguaje ordinario: las palabras del lenguaje y sus estructuras son parecidas al idioma inglés. 19 LOS DISTINTOS LENGUAJES EL LENGUAJE FORTRAN Fue el primer lenguaje de alto nivel que apareció. Su nombre es una abreviatura de FORmula TRANslating system. Se desarrolló a partir de 1954 y dos años más tarde apareció en el IBM 704. Se mejoraron sus características y se transformo en FORTRAN II (1958). FORTRAN III no se utilizo públicamente y en 1962 se desarrollo FORTRAN IV para IBM 7090/7094. La ultima versión estándar es FORTRAN 95. FORTRAN fue orientado hacia la solución de problemas y permite el manejo de números complejos. EL LENGUAJE ALGOL El ALGOL (ALGOrithmic Language) apareció en 1985, tras su discusión en un comité de dos asociaciones de informática (ACM-americana y GAMMeuropea). Fue el primer lenguaje estructurado. El ALGOL se orientó hacia problemas científicos. Sus características fueron ser algorítmico y permitir la recursividad. principales EL LENGUAJE COBOL COBOL son siglas de Common Business Oriented Lenguaje. Sus orígenes remontan a 1959, cuando después de una reunión de fabricantes de computadoras, industrias y gobierno estadounidense, se planteó la necesidad de un lenguaje que estuviese enfocado hacia las necesidades administrativas. Como resultado se formó el Comité CODASYL(Conference on Data Systems Languajes) que desarrolló una descripción del lenguaje, apareciendo finalmente COBOL en 1960. COBOL fue el primer lenguaje transportable y su enfoque de trabajo es hacia problemas administrativos. EL LENGUAJE BASIC BASIC son las siglas de Beginner’s All-purpose Symbolic Instruction Code. Este lenguaje fue desarrollado en 1965, en el Darmouth College (New Hamshire), por Thomas Kurtz y John Kenemy. Estos investigadores tuvieron 20 como finalidad tener un lenguaje facil de aprender (en aquella época ninguno de los lenguajes existentes resultaba sencillo para los estudiantes universitarios). Sus características son la simplicidad, el fácil aprendizaje, la versatilidad, y no ser estructurado. EL LENGUAJE LOGO Este lenguaje fue creado por Seymour Papert (del Tecnológico de Massachussets) en las postrimerías de la década de los sesenta, y es una variante de LISP (LISt Processor). Mediante él intentó reunir teorías pedagógicas de aprendizaje e inteligencia artificial. LOGO es un eficiente lenguaje educativo (para enseñanza de programación y aprendizaje en general) gracias a su sencillez y a sus capacidades graficas (conocidas como gráficos de tortuga). LOGO tiene como características ser interactivo, ampliable y recursivo. Debido a su ascendiente (LISP) puede servir de introducción en los campos de inteligencia artificial y procesamiento de listas. EL LENGUAJE PASCAL En honor a Blaise Pascal, Nicklaus Wirth así bautizó al lenguaje que diseñó en 1970. el lenguaje Pascal tuvo propósito enseñar ,os principios de la programación estructurada a estudiantes universitarios. Tuvo como antecesor directo al ALGOL; sin embargo, en Pascal es más sencillo el manejo de datos y no es tan extenso. Es un lenguaje estructurado, transportable, de propósito general, recursivo y modular. EL LENGUAJE C Durante la década de los sesenta se empezó a sentir necesidad de un lenguaje de programación que tuviera facilidades y estructuras de un lenguaje de alto nivel pero que permitiera también manipular directamente al procesador de la computadora. 21 El primer intento lo realizó Martin Richards en la Universidad de Cambridge (Inglaterra) en 1969, con el lenguaje BCPL. En los laboratorios Bell tomaron sus conceptos y desarrollaron el lenguaje B. En 1972 Ken Thompson y Dennis Ritchie empiezan a extender este lenguaje dando creación al lenguaje C. Las capacidades del C promovieron que el núcleo del sistema operativo Unix fuera reescrito casi en su totalidad en este lenguaje, en 1973. El lenguaje C es uno de los más populares en la actualidad, se ha implantado en casi la totalidad de las computadoras y ha mantenido gran estandaridad en sus librerías de funciones, gracias a lo cual es muy útil para desarrollar sistemas transportables. EL LENGUAJE ADA Ada es un lenguaje de programación orientado a objetos y fuertemente tipado de forma estática que fue diseñado por Jean Ichbiah de CII Honeywell Bull por encargo del Departamento de Defensa de los Estados Unidos. Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++.. Fue diseñado con la seguridad en mente y con una filosofía orientada a la reducción de errores comunes y difíciles de descubrir. Para ello se basa en un tipado muy fuerte y en chequeos en tiempo de ejecución (desactivables en beneficio del rendimiento). La sincronización de tareas se realiza mediante la primitiva rendezvous. Ada se usa principalmente en entornos en los que se necesita una gran seguridad y fiabilidad como la defensa, la aeronáutica (Boeing o Airbus), la gestión del tráfico aéreo (como Indra en España) y la industria aeroespacial entre otros. EL LENGUAJE C++ C++ es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al exitoso lenguaje de programación C con mecanismos que permitan la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido. Posteriormente se añadieron facilidades de programación genérica, que se sumó a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma. 22 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, tales como ROOT. Una particularidad del C++ es la posibilidad de redefinir los operadores (sobrecarga de operadores), y de poder crear nuevos tipos que se comporten como tipos fundamentales. El nombre C++ fue propuesto por Rick Mascitti 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 C++, la expresión "C++" significa "incremento de C" y se refiere a que C++ es una extensión de C. EL LENGUAJE SMALLTALK Smalltalk es un lenguaje de programación que permite realizar tareas de computación mediante la interacción con un entorno de objetos virtuales. Metafóricamente, se puede considerar que un Smalltalk es un mundo virtual donde viven objetos que se comunican mediante el envío de mensajes. Un sistema Smalltalk está compuesto por: Máquina virtual Imagen virtual que contiene todos los objetos del sistema Lenguaje de programación (también conocido como Smalltalk) Biblioteca de Objetos reusables Opcionalmente un entorno de desarrollo que funciona como un sistema en tiempo de ejecución. Los orígenes de Smalltalk se encuentran en las investigaciones realizadas por Alan Kay, Dan Ingalls, Ted Kaehler, Adele Goldberg y otros durante los años setenta en el Palo Alto Research Institute de Xerox (conocido como Xerox PARC), para la creación de un sistema informático orientado a la educación. El objetivo era crear un sistema que permitiese expandir la creatividad de sus usuarios, proporcionando un entorno para la experimentación, creación e investigación. EL LENGUAJE LISP El Lisp (o LISP) especificado originalmente en 1958 por John McCarthy y sus colaboradores en el MIT, el Lisp es el segundo más viejo lenguaje de programación de alto nivel de extenso uso hoy en día; solamente el FORTRAN es más viejo. Al igual que el FORTRAN, el Lisp ha cambiado mucho desde sus 23 comienzos, y han existido un número de dialectos en su historia. Hoy, los dialectos Lisp de propósito general más ampliamente conocidos son el Common Lisp y el Scheme. El Lisp fue creado originalmente como una notación matemática práctica para los programas de computadora, basada en el cálculo lambda de Alonzo Church. Se convirtió rápidamente en el lenguaje de programación favorito en la investigación de la inteligencia artificial (AI). Como uno de los primeros lenguajes de programación, el Lisp fue pionero en muchas ideas en ciencias de la computación, incluyendo las estructuras de datos de árbol, el manejo de almacenamiento automático, tipos dinámicos, y el compilador auto contenido. El nombre LISP deriva del "LISt Processing" (Proceso de LIStas). Las listas encadenadas son una de las estructuras de datos importantes del Lisp, y el código fuente del Lisp en sí mismo está compuesto de listas. Como resultado, los programas de Lisp pueden manipular el código fuente como una estructura de datos, dando lugar a los macro sistemas que permiten a los programadores crear una nueva sintaxis de lenguajes de programación de dominio específico empotrados en el Lisp. La intercambiabilidad del código y los datos también da a Lisp su instantáneamente reconocible sintaxis. Todo el código del programa es escrito como expresiones S, o listas entre paréntesis. Una llamada de función o una forma sintáctica es escrita como una lista, con la función o el nombre del operador en primer lugar, y los argumentos a continuación; por ejemplo, una función f que toma tres argumentos. EL LENGUAJE PROLOG Se trata de un lenguaje de programación ideado a principios de los años 70 en la Universidad de Aix-Marseille (Marsella, Francia) por los profesores Alain Colmerauer y Philippe Roussel. Nació de un proyecto que no tenía como objetivo la implementación de un lenguaje de programación, sino el procesamiento de lenguajes naturales. Alain Colmerauer y Robert Pasero trabajaban en la parte del procesado del lenguaje natural y Jean Trudel y Philippe Roussel en la parte de deducción e inferencia del sistema. Interesado por el método de resolución SL, Trudel persuadió a Robert Kowalski para que se uniera al proyecto, dando lugar a una versión preliminar del lenguaje Prolog a finales de 19712 y apareciendo la versión definitiva en 1972.3 Esta primera versión de Prolog fue programada en ALGOL W. Inicialmente se trataba de un lenguaje totalmente interpretado hasta que, en 1983, David H.D. Warren desarrolló un compilador capaz de traducir Prolog en un conjunto de instrucciones de una máquina abstracta denominada Warren Abstract Machine, o abreviadamente, WAM. Desde entonces Prolog es un lenguaje semi-interpretado. 24 Si bien en un principio se trataba de un lenguaje de uso reducido, la aparición de intérpretes del mismo para microordenadores de 8 bits (ej: micro-PROLOG) y para ordenadores domésticos de 16 bits (ej: Turbo PROLOG de Borland, entre otros muchos) a lo largo de la década de 1980 contribuyó notablemente a su popularización.4 Otro importante factor en su difusión fue la adopción del mismo para el desarrollo del proyecto de la quinta generación de computadoras a principios de la década de los 80,5 en cuyo contexto se desarrolló la implementación paralelizada del lenguaje llamada KL1 y del que deriva parte del desarrollo moderno de Prolog. Las primeras versiones del lenguaje diferían, en sus diferentes implementaciones, en muchos aspectos de sus sintaxis, empleándose mayormente como forma normalizada el dialecto propuesto por la Universidad de Edimburgo6 , hasta que en 1995 se estableció un estándar ISO (ISO/IEC 13211-1), llamado ISO-Prolog. Prolog se enmarca en el paradigma de los lenguajes lógicos y declarativos, lo que lo diferencia enormemente de otros lenguajes más populares tales como Fortran, Pascal, C o Java. EL LENGUAJE JAVA Java es un lenguaje de programación orientado a objetos desarrollado por Sun Microsystems a principios de los años 90. El lenguaje en sí mismo toma mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a muchos errores, como la manipulación directa de punteros o memoria. Las aplicaciones Java están típicamente compiladas en un bytecode, aunque la compilación en código máquina nativo también es posible. En el tiempo de ejecución, el bytecode es normalmente interpretado o compilado a código nativo para la ejecución, aunque la ejecución directa por hardware del bytecode por un procesador Java también es posible. La implementación original y de referencia del compilador, la máquina virtual y las bibliotecas de clases de Java fueron desarrollados por Sun Microsystems en 1995. Desde entonces, Sun ha controlado las especificaciones, el desarrollo y evolución del lenguaje a través del Java Community Process, si bien otros han desarrollado también implementaciones alternativas de estas tecnologías de Sun, algunas incluso bajo licencias de software libre. Entre noviembre de 2006 y mayo de 2007, Sun Microsystems liberó la mayor parte de sus tecnologías Java bajo la licencia GNU GPL, de acuerdo con las especificaciones del Java Community Process, de tal forma que prácticamente todo el Java de Sun es ahora software libre (aunque la biblioteca de clases de Sun que se requiere para ejecutar los programas Java aún no lo es). 25 EL LENGUAJE ML ML es un lenguaje de programación de propósito general de la familia de los lenguajes de programación funcional desarrollado por Robin Milner y otros a finales de los años 1970 en la Universidad de Edimburgo. ML es un acrónimo de Meta Lenguaje dado que fue concebido como el lenguaje para desarrollar tácticas de demostración en el sistema LCF (El lenguaje para el cual ML era meta lenguaje es pplambda, una combinación del cálculo de predicados de primer orden y el lambda-cálculo polimórfico sencillamente tipificado). Frecuentemente se clasifica a ML como un lenguaje funcional impuro dado que permite programar imperativamente con efectos de borde, a diferencia de otros lenguajes de programación funcional, tales como Haskell. Entre las características de ML se incluyen evaluación por valor, álgebra de funciones, manejo automatizado de memoria por medio de recolección de basura, polimorfismo parametrizado, análisis de estático de tipos, inferencia de tipos, tipos de datos algebraicos, llamada por patrones y manejo de excepciones. Esta combinación particular de conceptos hace que sea posible producir una de los mejores compiladores actualmente disponibles[1]. En la actualidad varios lenguajes de la familia ML están disponibles, principalmente Standard ML (SML) y Ocaml (Ocaml contiene la sintaxis de ML como un subconjunto). Varias ideas aparecidas en ML han influido el diseño de otros lenguajes, tales como Cyclone y Nemerle. Los lenguajes de la familia ML se aplica principalmente en diseño y manipulación de lenguajes de programación (compiladores, analizadores, demostradores de teoremas), así como en bioinformática, sistemas financieros, protocolos de sincronización, etc. TRADUCCIÓN DE LENGUAJES Cuando se escribe un programa en lenguaje de alto nivel, éste debe traducirse al lenguaje máquina de la computadora para lo que lo pueda ejecutar. Este proceso de traducción se realiza mediante programas especializados llamados compiladores e intérpretes. TIPOS DE PROGRAMA Una vez escrito un programa éste puede estar en código fuente, código objeto o código ejecutable. 26 Código fuente: es el conjunto de instrucciones tal y como fueron escritas por el programador en el lenguaje de alto nivel (también se le conoce como programa fuente). Código objeto: son las instrucciones de un programa cuando ya han sido traducidas a lenguaje máquina (también se le conoce como programa fuente). Código ejecutable: es un código objeto que puede ser ejecutado por la computadora de inmediato (no todos los códigos objeto son ejecutables.) EL COMPILADOR El compilador es un programa especial que traduce un programa fuente (escrito en un lenguaje de alto nivel) a un código objeto. Un compilador analiza las líneas del programa e identifica ciertas estructuras para traducirlas adecuadamente a lenguaje máquina. Una vez que se ha efectuado la compilación puede prescindirse del programa fuente. Los compiladores son propios de cada lenguaje de programación. Algunos ejemplos de lenguajes que requieren compilador son: Pascal, C, FORTRAN, COBOL, ALGOL, Y APL. El proceso de compilación se verifica en cinco etapas: Análisis léxico: durante esta etapa se verifica que las palabras utilizadas en el programa fuente pertenezcan al lenguaje. Análisis de sintaxis: esta parte de la compilación examina cada instrucción del programa fuente para que las instrucciones estén organizadas correctamente. Generación de código intermedio: este paso produce un código simbólico que permitirá efectuar la equivalencia con lenguaje máquina. Generación de código máquina: en esta última etapa se elabora el programa objeto. EL INTERPRETE Es un programa especial que traduce (a lenguaje máquina) cada línea del programa fuente y la ejecuta de inmediato. Los interpretes no producen código objeto, por ello la ejecución de un programa requiere forzosamente del código fuente. Además, los programas en lenguaje interpretado se ejecutan con más lentitud que aquellos en lenguaje compilado. 27 Son lenguajes que requieren intérprete: BASIC, LOGO, Prolog, LISP Y SmallTalk. ELABORAR UN LENGUAJE DE PROGRAMACIÓN Para escribir programas que proporcionen los mejores resultados, cabe tener en cuenta una serie de detalles. Corrección. Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente qué debe hacer el programa antes de desarrollarlo y, una vez acabado, compararlo con lo que realmente hace. Claridad. Es muy importante que el programa sea lo más claro y legible posible, para facilitar así su desarrollo y posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, así como cuidar el estilo en la edición; de esta forma se ve facilitado el trabajo del programador, tanto en la fase de creación como en las fases posteriores de corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es aún más necesaria para que otros programadores puedan continuar el trabajo fácilmente. Algunos programadores llegan incluso a utilizar Arte ASCII para delimitar secciones de código. Otros, por diversión o para impedir un análisis cómodo a otros programadores, recurren al uso de código ofuscado. Eficiencia. Se trata de que el programa, además de realizar aquello para lo que fue creado (es decir, que sea correcto), lo haga gestionando de la mejor forma posible los recursos que utiliza. Normalmente, al hablar de eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros recursos que también pueden ser de consideración al obtener la eficiencia de un programa, dependiendo de su naturaleza (espacio en disco que utiliza, tráfico de red que genera, etc.). Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea hardware o software, diferente a aquélla en la que se elaboró. La portabilidad es una característica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha desarrollado para sistemas GNU/Linux ejecutarse también en la familia de sistemas operativos Windows. Esto permite que el programa pueda llegar a más usuarios más fácilmente. 28 PARADIGMAS Los programas se pueden clasificar por el paradigma del lenguaje que se use para producirlos. Los principales paradigmas son imperativos y declarativos. Los programas que usan un lenguaje imperativo especifican un algoritmo, usan declaraciones, expresiones y sentencias. Una declaración asocia un nombre de variable con un tipo de dato, por ejemplo: var x: integer; . Una expresión contiene un valor, por ejemplo: 2 + 2 contiene el valor 4. Finalmente, una sentencia debe asignar una expresión a una variable o usar el valor de una variable para alterar el flujo de un programa. Por ejemplo: x := 2 + 2; if x == 4 then haz_algo();. Una crítica común en los lenguajes imperativos es el efecto de las sentencias de asignación sobre una clase de variables llamadas "no locales". Los programas que usan un lenguaje declarativo especifican las propiedades que la salida debe conocer y no especifica cualquier detalle de implementación. Dos amplias categorías de lenguajes declarativos son los lenguajes funcionales y los lenguajes lógicos. Los lenguajes funcionales (como Haskell) no permiten asignaciones de variables no locales, así, se hacen más fácil, por ejemplo, programas como funciones matemáticas. El principio detrás de los lenguajes lógicos (como Prolog) es definir el problema que se quiere resolver (el objetivo) y dejar los detalles de la solución a el sistema de Prolog. El objetivo es definido dando una lista de sub-objetivos. Cada sub-objetivo también se define dando una lista de sus sub-objetivos, etcétera. Si al tratar de buscar una solución, una ruta de sub-objetivos falla, entonces tal sub-objetivo se descarta y sistemáticamente se prueba otra ruta. La forma en la cual es programa se crea puede ser por medio de texto o de forma visual. En un lenguaje de programación visual, los elementos son manipulados gráficamente en vez de especificarse por medio de texto. 29 CONCLUSIONES Un lenguaje de programación permite que el usuario controle las tareas elementales de la computadora. La programación de las primeras computadoras era por medio de cables. Los lenguajes de programa se clasifican por su nivel y por sus aplicaciones principales. Lenguajes de bajo nivel son los que el procesador de la computadora entiende directamente. Dependen de las características de cada tipo de máquina. Son lenguajes de bajo nivel el lenguaje máquina y el lenguaje ensamblador. Lenguajes de alto nivel son lenguajes que permiten que los procedimientos de expresen con palabras y estructura comprensibles. Algunos lenguajes de alto nivel son: Pascal, BASIC, Ada, FORTRAN. Los lenguajes de nivel medio son los que reúnen las ventajas de lenguajes de alto y bajo nivel. Los únicos de este tipo son C y Forth. El CPU de una computadora es un circuito electrónico digital que sólo entiende pulsos electrónicos. El lenguaje máquina son las secuencias de unos y ceros que el procesador maneja y entiende. Cualquier programa deberá estar en lenguaje máquina antes de que el CPU pueda entenderlo. Programar en código máquina permite el control directo del CPU y gran velocidad de ejecución. Un programa escrito en el lenguaje máquina de un procesador específico no sirve para otro diferente. El lenguaje ensamblador maneja símbolos y existe una relación uno a uno entre esos símbolos y las secuencias numéricas en código máquina. También es un lenguaje totalmente dependiente de cada tipo de computadora. Las instrucciones en ensamblador no las entiende directamente del CPU, por ello los programas deben traducirse a lenguaje máquina para poder ejecutarse (proceso de ensamblado). 30 Las ventajas del lenguaje ensamblador son control directo del procesador , gran velocidad de ejecución y facilidades para la depuración y mantenimiento de programas. Son características de los lenguajes de alto nivel la independencia, transportabilidad, generación de código, notación orientada al problema, uso de identificadores y similitud con el lenguaje ordinario. El lenguaje FORTRAN (FORmula TRANslating system) fue el primer lenguaje de alto nivel que apareció. Se orientó a la solución de problemas numéricos. El lenguaje ALGOL (ALGOrithmic Languaje) fue el primer lenguaje estructurado, algorítmico y que permitió la recursividad. Se orientó hacia problema científicos. El lenguaje COBOL (Common Business Oriented Languaje) fue el primer lenguaje transportable y su enfoque de trabajo e hacia problemas administrativos. El lenguaje Pascal ha tenido como propósito enseñar los principios de la programación estructurada. Sus principales características son ser un lenguaje estructurado, transportable, de propósito general, recursivo y modular. El lenguaje C es muy útil para la programación de sistema debido a su estandarizad, a la gran cantidad de computadoras que lo han implementado y que permite grandes facilidades para el control directo de la computadora. Se desarrolló en 1972 por Thompson y Ritchie (laboratorios Bell) y se encuentra emparentado con el sistema operativo UNIX. El código fuente es el conjunto de instrucciones en lenguaje de alto nivel. El código objeto son las instrucciones de un programa que ya han sido traducidas a lenguaje máquina. El código ejecutable es un código objeto que puede ser ejecutado por la computadora de inmediato. Un compilador es un programa especial que traduce un programa escrito en lenguaje de alto nivel a un código objeto. Algunos ejemplos de lenguajes que requieren compilador son: Pascal, C, FORTRAN, COBOL, ALGOL Y APL. 31 Los pasos de compilación son análisis léxico, análisis de sintaxis, generación de código intermedio y generación de código máquina. El intérprete es un programa especial que traduce (a lenguaje máquina) cada línea del programa fuente y la ejecuta de inmediato. Los intérpretes no producen código objeto. La ejecución de un programa requiere del código fuente. Los programas en lenguaje interpretado se ejecutan con más lentitud que aquellos en lenguaje compilado. Los lenguajes que requieren intérprete son BASIC, LOGO, Prolog y LISP. 32 BIBLIOGRAFÍA Vasconcelos Santillán, INTRODUCCIÓN A LA COMPUTACIÓN, México 2005, 103-105 pp., Publicaciones cultural. Pratt W. Terrence, LENGUAJES DE PROGRAMACIÓN, México 1995, 451-630 pp., Pentice-Hall Hispanoamericana. 33 ÍNDICE Prólogo ………………………………………………………………………..1 Foreword ………………………………………………………………………6 Introducción ……………………………………………………………………11 ¿Qué es un lenguaje de programación?..................................................11 ¿Qué nos permite un lenguaje de programación?...................................11 Finalidad de los lenguajes…………………………………………………...12 Historia…………………………………………………………………………12 Clasificación de los lenguajes………………………………………………14 Clasificación de los lenguajes por su nivel………………………...14 Lenguajes de bajo nivel……………………………………..14 Lenguajes de alto nivel……………………………………...14 Lenguajes de nivel medio……………………………………15 Clasificación de los lenguajes por su aplicación…………………..16 Lenguajes de bajo nivel……………………………………………………..16 El lenguaje máquina…………………………………………………16 El lenguaje ensamblador……………………………………………18 Lenguajes de alto nivel………………………………………………………19 Los distintos lenguajes...........................................................................20 El lenguaje FORTRAN……………………………………………………..20 El lenguaje ALGOL…………………………………………………………20 El lenguaje COBOL…………………………………………………………20 El lenguaje BASIC…………………………………………………………...20 El lenguaje LOGO……………………………………………………………21 El lenguaje Pascal…………………………………………………………..21 El lenguaje C………………………………………………………………….21 34 El lenguaje Ada……………………………………………………………..22 El lenguaje C++……………………………………………………………..22 El lenguaje SmallTalk……………………………………………………...23 El lenguaje LISP…………………………………………………………….23 El lenguaje PROLOG……………………………………………………….24 El lenguaje JAVA……………………………………………………………25 El lenguaje ML……………………………………………………………….26 Traducción de lenguajes……………………………………………………..26 Tipos de programa……………………………………………………26 El compilador…………………………………………………………..27 El intérprete…………………………………………………………….27 Elaborar un lenguaje de programación…………………………………….28 Paradigmas ……………………………………………………………………29 Conclusiones………………………………………………………………….30 Bibliografía…………………………………………………………................33 35