Conceptos Básicos. 1.7 Editor de texto De Wikipedia, la enciclopedia libre No debe confundirse con procesador de texto. Un editor de texto es un programa que permite crear y modificar archivos digitales compuestos únicamente por texto 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. Hoy en día es comúnmente de 7- ó 8-bits en ASCII o UTF8, rara vez EBCDIC. Por ejemplo, un editor ASCII de 8 bits que lee el número binario 0110 0001 (decimal 97 ó hexadecimal 61) en el archivo lo representará en la pantalla por la figura a, que el usuario reconoce como la letra "a" y ofrecerá al usuario las funciones necesarias para cambiar el número binario en el archivo. Los editores de texto son incluidos en el sistema operativo o en algún paquete de software instalado y se usan cuando se deben crear o modificar archivos de texto como archivos de configuración, scripts o el código fuente de algún programa. El archivo creado por un editor de texto incluye por convención en DOS y Microsoft Windows la extensión .txt, aunque pueda ser cambiada a cualquier otra con posterioridad. Tanto Unix como Linux dan al usuario total libertad en la denominación de sus archivos. Al trasladar archivos de texto de un sistema operativo a otro se debe considerar que existen al menos dos convenciones diferentes para señalar el término de una línea: Unix y Linux usan sólo retorno de carro en cambio Microsoft Windows usa al término de cada línea retorno de carro y salto de línea. El editor de texto debe ser considerado como una herramienta de trabajo del programador o administrador de la máquina. Algunas funciones especiales son: Editores diseñados para un lenguaje de programación determinado, con coloreado de sintaxis, macros, completación de palabras, etc. 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. IDE es un editor más otras herramientas de trabajo, compiladores, extractores de diferencias entre dos textos, repositorios, etc, incluidos en un solo programa. 1.8 Compilador. De Wikipedia, la enciclopedia libre Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de máquina, pero también puede ser simplemente texto. Este proceso de traducción se conoce como compilación.1 Es decir permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina). De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora. Interpretes vs. Compiladores El proceso de traducción, se puede realizar de dos maneras diferentes, a través de un intérprete o de un compilador. Un intérprete, al igual que un intérprete humano de un discurso o conversación, de ahí su nombre, traduce frase a frase, realiza el proceso de traducción línea a línea, ejecutando el programa por líneas. Un compilador para realizar la traducción necesita leer todas las líneas del programa. Una vez que han sido traducidas todas en su conjunto, se ejecuta. Por tanto, hasta que no se han traducido todas las líneas del programa no se ejecuta el programa. La diferencia con los intérpretes reside en que no traduce línea por línea, sino que las traduce todas en conjunto, analizando las relaciones que pueden existir entre ellas. Históricamente, con la penuria de memoria que tenían las primeras computadoras, había muchos partidarios del uso de los intérpretes frente al uso de compiladores. El programa fuente sin traducir y el intérprete, juntos, solían ocupar menos memoria que los compiladores, con lo que eran más atractivos que el compilador. Pero los resultados que produjeron no fueron muy satisfactorios, puesto que los errores de los programas eran frecuentes y no se detectaban antes de comenzar la ejecución. Éstos se iban detectando al ir traduciendo y ejecutando las líneas del programa, con lo que se debía parar al proceso de compilación, arreglar el error y reiniciar, desde el principio, el proceso de compilación hasta encontrar el siguiente error. Más práctico es el proceso de compilación puesto que examina detalladamente todo el programa fuente y lo convierte a objeto; si el compilador detecta errores en el programa lo indica: se corrige el código fuente de manera apropiada y se vuelve a compilar, y así sucesivamente, hasta que, al no tener errores, se puede ejecutar el programa objeto obtenido. Esta revisión global del programa fuente que realiza el compilador tiene unas ventajas tan claras, que los intérpretes la han incorporado, y al mismo tiempo que realizan esta revisión general, efectúan una traducción somera del lenguaje fuente a un formato interno, no muy lejano en su estructura del lenguaje fuente, pero que facilita mucho la ejecución posterior de cada sentencia bajo supervisión del intérprete. A primera vista, la diversidad de compiladores puede parecer enorme. Hay muchos lenguajes fuente y también lenguajes objeto. A pesar de esta aparente complejidad, las tareas básicas que debe realizar cualquier compilador son siempre las mismas, sea cual sea el lenguaje que traduce. Tipos de compiladores Esta taxonomía de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categorías: 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. Las fases de un compilador Se puede considerar un compilador como un conversor o transformador de cadenas de caracteres, que, en su caso más extremo, son: el programa fuente por un lado como cadena origen, y el programa objeto como cadena resultante. Entre estos dos tipos de cadenas, puede haber varios intermedios, según el diseño del compilador. Un compilador se divide en varias fases, cada una de las cuales transforma al programa fuente de una representación en otra. Se puede decir que existen dos fases centrales, una de «Análisis» y otra de «Síntesis», con los objetivos siguientes: — Análisis: Realiza la lectura de la cadena de caracteres que constituye el programa fuente. Tiene dos partes bien diferenciadas, el explorador (o analizador lexicográfico) con la misión de leer el programa fuente e identificar las palabras que están dentro del código, y el reconocedor (o analizador sintáctico) que mira la estructura sintáctica de las sentencias del programa fuente para comprobar su corrección. — Síntesis: Después del proceso de análisis, comienza la obtención de la cadena de caracteres que formará el programa objeto. Se hace en dos etapas, la generación de código intermedio y la generación de código ejecutable que obtiene la tira de código objeto entendible por la computadora. El proceso, como se verá más adelante en un ejemplo concreto, conceptualmente es sencillo: el código fuente, a través del analizador léxico, va siendo reconocido y dividido en palabras. A partir de estas palabras el analizador sintáctico identifica la instrucción y comprueba que se ha escrito bien. A continuación, el generador de código intermedio, genera un código estándar y común a distintos lenguajes. Por último, este código intermedio es traducido por el generador de código ejecutable que crea la cadena de código objeto. El explorador El explorador es la primera fase de un compilador. Su principal función consiste en leer los caracteres de entrada e identificar las palabras (el léxico) que forman las sentencias (oraciones) del programa fuente. La salida del explorador las recibe el reconocedor como entrada. Como el Explorador es la parte del compilador que lee el texto fuente, también se ocupa de: ignorar los comentarios que el programador ha incluido, los espacios en blanco, tabuladores y caracteres de línea nueva, que no es necesario traducir al programa objeto. También recuerda y almacena los números de las líneas del programa fuente en donde se localizó un error, para que el programador pueda conocer en qué línea se produjo. El reconocedor El Reconocedor obtiene una serie de palabras o componentes léxicos del Explorador, y comprueba si la cadena es correcta en el lenguaje de programación empleado. Informará de cualquier error de sintaxis de manera inteligible. Generación de código intermedio De las dos partes del proceso de compilación (Análisis y Síntesis), hasta el momento sólo se ha hablado de la primera: el Análisis. Pero si el compilador sólo hiciera esta parte, únicamente serviría para comprobar que la sentencia del lenguaje analizada es correcta desde el punto de vista gramatical, pero no haría ninguna traducción. Generación de código ejecutable. En este modelo de Análisis y Síntesis de un compilador, la etapa de la Generación de Código Intermedio es la que traduce un programa fuente a una representación intermedia a partir de la cual se genera el código objeto.. La fase final del compilador es la generación de código ejecutable. Toma como entrada la representación intermedia del programa fuente y produce como salida un programa objeto equivalente. Las exigencias tradicionalmente impuestas a un compilador son duras. El código de salida debe ser correcto y de gran calidad, lo que significa que debe utilizar de forma eficaz los recursos de la computadora. Además, el propio generador de código debe ejecutarse eficientemente. 1.9 Ejecutables. En informática, un ejecutable o archivo ejecutable, es un archivo binario cuyo contenido se interpreta por el ordenador como un programa. Generalmente, contiene instrucciones en código máquina de un procesador en concreto, pero también puede contener bytecode que requiera un intérprete para ejecutarlo. Además suele contener llamadas a funciones específicas de un sistema operativo (llamadas al sistema). Dependiendo del tipo de que se traten las instrucciones, hablaremos de ejecutables portables (se pueden ejecutar en varias plataformas) y no portables (destinado a una plataforma concreta). Por ejemplo, un ejecutable Java es portable ya que utiliza un bytecode no asociado a un procesador en concreto. Existen otro tipo de programas llamados scripts. No contienen código máquina sino el código fuente, que se interpreta a la vez que se ejecuta. Determinar si un archivo es ejecutable es sobre todo una cuestión de convención. Unos sistemas operativos se basan en la extensión de archivo (como la terminación .exe) y otros lo hacen leyendo los metadatos (como los bits de permiso de ejecución en Unix). En la mayoría de los sistemas modernos, un archivo ejecutable contiene mucha información que no es parte del programa en sí: recursos como textos e imágenes, requisitos del entorno de ejecución, información simbólica y de depuración, u otra información que ayude al sistema operativo a ejecutar el programa. Las extensiones comunes de archivos para campos ejecutables en Windows incluyen .exe, .com, .dll, .bat. Un archivo ejecutable que está vinculado dinámicamente a otro programa se llama una librería de vínculo dinámico. En Unix, los archivos ejecutables están marcados con una bandera de permiso especial en los atributos del archivo 1.10 Lineas de Comandos Interfaz de Línea de Comandos, por su acrónimo en inglés de Command Line Interface (CLI), es un método que permite a las personas dar instrucciones a algún programa informático por medio de una línea de texto simple. Las CLI pueden emplearse interactivamente, escribiendo instrucciones en alguna especie de entrada de texto, o pueden utilizarse de una forma mucho más automatizada (batch), leyendo comandos desde un archivo de scripts. La contraparte de CLI es la interfaz gráfica de usuario (GUI) que ofrece una estética mejorada y una mayor simplificación, a costa de un mayor consumo de recursos computacionales, y, en general, de una reducción de la funcionalidad alcanzable. Asimismo aparece el problema de una mayor vulnerabilidad por complejidad. Las CLI son usadas por muchos programadores y administradores de sistemas como herramienta primaria de trabajo, especialmente en sistemas operativos basados en Unix; en entornos científicos y de ingeniería, y un subconjunto más pequeño de usuarios domésticos Algunas aplicaciones proporcionan tanto una CLI como una GUI. Un ejemplo es el programa de CAD AutoCAD. El paquete científico/ingenieril de computación numérica. Matlab no proporciona GUI para algunos cálculos, pero la CLI puede realizar cualquier cálculo. El programa de modelado tridimensional Rhinoceros 3D (que se usa para diseñar las cajas de la mayor parte de los teléfonos portátiles, así como miles de otros productos industriales) proporciona una CLI. En algunos entornos informáticos, como la interfaz de usuario de Smalltalk u Oberon, la mayor parte del texto que aparece en la pantalla se puede usar para dar órdenes.