miércoles, 29 de marzo de 2017

Compilación y Depuración de Programas

COMPILACIÓN
La compilación es el proceso de traducción de programas fuente a programas objeto. El programa objeto obtenido de la compilación ha sido traducido normalmente al código común del lenguaje de máquina.
Existen diversas fases de compilación o también llamadas etapas de la compilación que se ilustrarán en la siguiente imagen:
Fases de la compilación
El proceso de ejecución de un programa escrito en un lenguaje de programación y mediante un compilador tiene los siguientes pasos:
    1. Escritura del programa fuente con un editor (programa que permite a una computadora actuar de modo similar a una máquina de escribir electrónica) y guardarlo en un dispositivo de almacenamiento (por ejemplo, un disco).
    2. Introducir el programa fuente en memoria.
    3. Compilar el programa con el compilador.
    4. Verficar y corregir errores de compilación (listado de errores).
    5. Obtención del programa objeto.
    6. El enlazador (linker) obtiene el programa ejecutable.
    7. Se ejecuta el programa y, si no existen errores, se tendrá la salida del programa.
    DEPURACIÓN
    Cuando se ha desarrollado el pseudocódigo de un algoritmo o programa y lo introducimos en el ordenador en forma de código, se intenta la primera ejecución. Con esta primera ejecución se empieza a obtener información respecto al estado del programa en cuanto a errores. Es habitual que el programa no funcione a la primera.
    Comenzamos un proceso de eliminación de errores que supone ir construyendo un programa sólido a partir de un embrión de programa débil. Vamos a verlo como un proceso de destrucción de una pirámide de errores y construcción de una pirámide de programa sólido.
    piramide de errores programacion
    El umbral que hace al programa válido para su uso es el de ejecución sin errores y con resultados correctos para situaciones y datos de entrada esperados. Por tanto este será un objetivo irrenunciable para el programador. Nos situamos en un nivel en el que no existen errores de obligada ocurrencia pero sí cierta probabilidad de aparición de errores ante circunstancias específicas. Hablando pues en términos de probabilidad no nos referimos a número de errores, sino al grado de vulnerabilidad o, si se prefiere, grado de fortaleza de un programa. Si la posibilidad de errores es alta decimos que el programa es débil o vulnerable y si es baja que es poco vulnerable o fuerte. Las equivalencias serían estas:
    Probabilidad de error
    Grado de vulnerabilidad
    Grado de fortaleza
    Muy alta
    Muy vulnerable
    Inconsistente, frágil
    Alta
    Vulnerable
    Débil
    Baja
    Poco vulnerable
    Fuerte, sólido
    Nula
    Invulnerable
    Muy fuerte, totalmente sólido


    Cuanta más depuración más fuerte es el programa, pero también mayor esfuerzo y tiempo requiere. El programador puede adoptar pues una actitud de lucha tenaz y búsqueda de cualquier posible error para su eliminación, a lo que llamamos enfoque de intransigencia, o bien dar por bueno que se produzcan ciertos errores para supuestos poco usuales que serían gestionados, a lo que llamamos enfoque de permisividad. ´
    En resumen: la postura más lógica es la de tener cierta permisividad hacia los errores, buscando el equilibrio entre esfuerzo y grado de perfección del programa.

lunes, 27 de marzo de 2017

Editores y Compiladores

EDITORES
Un editor de texto es un programa informático que permite crear y modificar archivos digitales compuestos únicamente por textos sin formato, conocidos comúnmente como archivos de texto o “texto plano”. El programa lee el archivo e interpreta los bytes leídos según el código de caracteres que usa el editor. Es comúnmente de 7- u 8-bits en ASCII o UTF-8, rara vez EBCDIC.

Funciones típicas del editor de texto:

Marcar región, Búsqueda y reemplazo, Copiar, cortar y pegar, Formatear, Deshacer y rehacer, Importar, Filtros, Acceso remoto.

Algunas funciones especiales son:
  • Editores diseñados para un lenguaje de programación determinado, con coloreado de sintaxis, macros, completación de palabras, etcétera.
  • Editores con regiones plegables. A veces no todo el texto es relevante para el usuario. Con este tipo de editores ciertas regiones con texto irrelevante pueden ser plegadas, escondidas, mostrando al usuario solo lo importante del texto.
  • Un entorno de desarrollo integrado es un programa que incluye un editor y otras herramientas de trabajo, como compiladores, extractores de diferencias entre dos textos, repositorios, etcétera, incluidos en un solo programa.

Ejemplos

  • Bloc de notas, editor integrado en Microsoft Windows, también conocido como Notepad (en inglés).
  • Emacs, editor muy común en Unix.
  • Gedit, editor libre que se distribuye junto con GNOME para sistemas tipo Unix. También disponible para Windows.
  • jEdit, editor popular multiplataforma.
  • Kate, editor para Unix.
  • Notepad++, editor de código fuente para Windows.
  • Vi, editor muy común en Unix.


COMPILADORES
Un compilador es un programa informático que traduce un programa que ha sido escrito en un lenguaje de programación a un lenguaje diferente, usualmente lenguaje de máquina, aunque también puede ser traducido a un código intermedio (bytecode) o a texto. Este proceso de traducción se conoce como compilación.

La construcción de un compilador involucra la división del proceso en una serie de fases que variará con su complejidad. Generalmente estas fases se agrupan en dos tareas: el análisis del programa fuente y la síntesis del programa objeto.
Análisis: Se trata de la comprobación de la corrección del programa fuente, e incluye las fases correspondientes al Análisis léxico.
Síntesis: Su objetivo es la generación de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de generación de código.

TIPOS DE COMPILADORES:
  • Compiladores cruzados: generan código para un sistema distinto del que están funcionando.
  • Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.
  • Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.
  • Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina.
  • Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan.

Consiste en generar el código objeto equivalente al programa fuente. Solo se genera código objeto cuando el programa fuente está libre de errores de análisis, lo cual no quiere decir que el programa se ejecute correctamente, ya que un programa puede tener errores de concepto o expresiones mal calculadas. Por lo general el código objeto es código de máquina relocalizable o código ensamblador. 

jueves, 23 de marzo de 2017

Historia de los Lenguajes de Programación

Los primeros lenguajes de programación preceden a la computadora moderna. En un inicio los lenguajes eran códigos. La máquina del telar de Jacquard, creada en 1801, utilizaba los orificios en tarjetas perforadas para representar los movimientos de un brazo de la máquina de tejer, con el objetivo de generar patrones decorativos automáticamente.
Durante un período de nueve meses entre 1842 y 1843, Ada Lovelace tradujo las memorias del matemático italiano Luigi Menabrea acerca de la nueva máquina propuesta por Charles Babbage, la Máquina Analítica. Herman Hollerith se percató de que podía codificar la información en tarjetas perforadas cuando observó a los conductores de trenes codificar la apariencia de los tickets del tren con la posición de los agujeros perforados en estos. En 1890 Hollerith codificó los datos del censo en tarjetas perforadas.
En la década de 1940 fueron creadas las primeras computadoras modernas, con alimentación eléctrica. La velocidad y capacidad de memoria limitadas forzaron a los programadores a escribir programas, en lenguaje ensamblador muy afinados. Finalmente se dieron cuenta de que la programación en lenguaje ensamblador requería de un gran esfuerzo intelectual y era muy propensa a errores. Entre algunos lenguajes importantes que fueron desarrollados en este período se encuentran:
·         1943 - Plankalkül (Konrad Zuse), diseñado, pero sin implementar durante medio siglo
·         1943 - el sistema de codificación ENIAC.
·         1949 - 1954 -- una serie de conjuntos de instrucciones nemotécnicas, como la de ENIAC, comenzando en 1949 con C-10 para BINAC
En los cincuenta, los tres primeros lenguajes de programación modernos, cuyos descendientes aún continúan siendo utilizados, son:
·         1957 – Fortran: (“The IBM Mathematical Formula Translating System”): Un lenguaje de programación de alto nivel de propósito general. Para cálculo numérico y científico (como alternativa al lenguaje ensamblador). Es el lenguaje de programación más antiguo que se utiliza hoy en día.
·         1958 – Lisp: (“List Processor”) Utilizado para la notación matemática y temas de ciencias de la computación.
·         1959 – Cobol: (“Common Business-Oriented Language) Usado principalmente para la informática empresarial. Es el primer lenguaje de programación que se demandan por el Departamento de Defensa de EE.UU.

Otro lenguaje importante de esta época es en 1964 – BASIC: (“Beginner’s All-purpose Symbolic Instruction Code”) Diseñado para la simplicidad. Su popularidad explotó a mediados de los años 70 con los computadores personales.


El período comprendido entre finales de 1960 y finales de 1970 trajo un gran florecimiento de lenguajes de programación. La mayoría de los paradigmas de lenguajes de programación más importantes y actualmente en uso se inventaron en este período:
·         Simula, inventado en la década de 1960 por Nygaard y Dahl como un superconjunto de Algol 60, fue el primer lenguaje diseñado para apoyar la programación orientada a objetos.
·         C, en principio un lenguaje de programación de sistemas, fue desarrollado por Dennis Ritchie y Ken Thompson en los Laboratorios Bell entre 1969 y 1973.

Algunos lenguajes de programación sobresalientes de esta época fueron:
·         1970 – Pascal: (En honor al matemático/físico francés Blaise Pascal) Utilizado para la enseñanza de la programación estructurada y estructuración de datos.
·         1972 – Lenguaje C: (Basado en un lenguaje anterior llamado “B”) Creado para sistemas Unix. Muchos de lenguajes de programación más populares del mundo son derivados de él, entre ellos tenemos C#, Java, JavaScript, Perl, PHP y Python.

La década de 1980 fueron años de consolidación relativa en los lenguajes imperativos. En vez de inventar nuevos paradigmas, se comenzó a trabajar a partir de las ideas inventadas en la década anterior. C++ combinaba la programación orientada a objetos y la programación de sistemas. Algunos lenguajes de programación sobresalientes de esta época fueron:
·         1980 – Ada: (En honor a Ada Lovelace): Es derivado del Pascal. Contratado por el Departamento de Defensa de los EE.UU. en 1977 para el desarrollo de sistemas de software grandes.
·         1983 – C++: (“C con clases”; ++ es el operador de incremento en “C”) Es una extensión de lenguaje C, con mejoras tales como clases, funciones virtuales y plantillas.
·         1983 – Objective-C: (Extensión de “C” orientada a objetos) Ampliación de C, se adiciona la funcionalidad de paso de mensajes basado en el lenguaje Smalltalk.
·         1987 – Perl: Creado para el procesamiento de informes en sistemas Unix. Hoy en día es conocido por su gran potencia y versatilidad.

El rápido crecimiento de Internet en la década de 1990 fue el siguiente gran acontecimiento histórico para los lenguajes de programación. Con la apertura de una plataforma totalmente nueva para los sistemas informáticos, Internet creó una oportunidad adoptar nuevos lenguajes. En particular, el lenguaje de programación Java se hizo popular debido a su pronta integración con el navegador web Netscape Navegador, y varios lenguajes de scripting alcanzaron un amplio uso en el desarrollo de aplicaciones personalizadas para servidores web.
Esta era vino con lenguajes como:
·         1991 – Python: Creado para apoyar una variedad de estilos de programación y hacerlo divertido de usar.
·         1993 – Ruby: Un lenguaje influenciado por Perl, Ada, Lisp, Smalltalk, etc. Diseñado para la programación productiva y agradable.
·         1995 – Java: Hecho para un proyecto de televisión interactiva. Funciona multiplataforma. Es el segundo lenguaje más popular (detrás de lenguaje C).
·         1995 – PHP: (“Personal Home Page”) Usado para la creación de páginas web dinámicas.
·         1995 – JavaScript: Creado para ampliar la funcionalidad de las páginas web, permite utilizar formularios de presentación/validación, interactividad, animaciones, seguimiento de la actividad del usuario, etc...

Actualmente los lenguajes han evolucionado de maneras más fáciles de desarrollar y entender, tales como:
·         Java: Reconocido por su legibilidad y simplicidad, Java es uno de los lenguajes de programación más adoptados: más 9 millones de desarrolladores lo usan.
·         C++: Conocido por el nombre “C Plus Plus”, este lenguaje de programación orientado a objetos surge como una continuación y ampliación del C. Hay una gran cantidad de programas escritos en C++, como por ejemplo los paquetes de Adobe.
·         C#: También llamado “C Sharp”, este lenguaje de programación orientado a objetos fue desarrollado en el año 2000 por Microsoft para ser empleado en una amplia gama de aplicaciones empresariales ejecutadas en el framework .NET. C Sharp es una evolución del C y C++ que se destaca por su sencillez y modernidad.
·         Visual Basic. NET: Una gran cantidad de personas a lo largo del mundo que trabajan con Visual Basic.net. Muchas personas que no cuentan con conocimientos profundos como desarrolladores, encuentran en Visual Basic, además de una sintaxis sencilla, la posibilidad de automatizar sus propios procesos y crear sus propias aplicaciones web. Es visto como uno de los lenguajes más amigables para los que recién comienzan, sobre todo a comparación de C#.
·         JavaScript: Antes que nada, no confundir con Java. Son lenguajes distintos. JavaScript es un lenguaje de programación que puede ser utilizado para crear programas que luego son acoplados a una página web o dentro de programas más grandes. Sirve para crear efectos y realizar acciones interactivas. Podemos ver funcionando este lenguaje en servicios como el chat, calculadoras, buscadores de información y un sin fin de utilidades más.