As computadoras de primeira xeración programábanse en linguaxe máquina. As segundas con linguaxe de ensamblaje. O terceiro e cuarto prográmanse en linguaxe de alto nivel. Os da xeración quintana programaranse cunha linguaxe próxima á linguaxe natural.
Por tanto, paira programar una computadora actual é necesario dominar algunha linguaxe de alto nivel (BASIC, FORTRAN, COBOL, PASCAL...) e utilizando esta linguaxe como ferramenta, redactaremos programas que resolvan os nosos problemas. En calquera caso, nunha computadora concreta, e máis aínda nunha micro, non podemos utilizar calquera linguaxe, senón un dos que a nosa computadora ten implementados no seu Sistema Operativo.
O uso de linguaxes de alto nivel non exclúe a linguaxe máquina e sobre todo a linguaxe de ensamblaje (assembler). Estas opcións, polo menos a do ensamblaje, ás veces son moi adecuadas.
O obxectivo deste artigo é explicar cando e paira que deben utilizarse a linguaxe de ensamblaje (ASSEMBLER) e as linguaxes superiores.
As ordes que executa ou executa directamente un computador son aquelas escritas en linguaxe máquina. As ordes en linguaxe máquina son coñecidas e executadas pola Unidade de Control da CPU. Estas ordes adhírense ao computador e son relativamente sinxelas, cada una delas representa una soa operación aritmética ou lóxica normal. A linguaxe máquina exprésase en códigos binarios mediante 0 e 1.
Programar en binario resulta moi pesado, deixando ao carón as outras molestias. Por iso creáronse linguaxes simbólicas, primeiro linguaxes de ensamblaje e logo superiores.
Os programas escritos en linguaxe simbólica non poden executarse directamente. Os programas escritos en linguaxe máquina só poden executarse directamente. O obxectivo dos tradutores é superar esta obxección.
Un programa tradutor toma como dato o programa escrito en linguaxe simbólica e como resultado da súa execución crea un programa equivalente escrito en linguaxe máquina. Por tanto, o programa que realizamos cando o programamos en linguaxe simbólica non se pode executar directamente, xa que antes de executalo hai que realizar un proceso de tradución.
Por iso diciamos que nunha computadora non se pode programar en calquera lingua, porque paira programar nunha linguaxe é necesario o seu espertador. Prográmalos tradutores están escritos en linguaxe máquina e forman parte do Sistema Operativo, é dicir, os usuarios non deben programalos e constitúen una das principais partes do software auxiliar que incorpora a computadora.
O programa que traduce automaticamente da linguaxe de programación a outra linguaxe que a máquina entende directamente, a linguaxe máquina, chámase tradutor. Nos tradutores distínguense diferentes tipos; doutra banda, os ensambladores, paira traducir programas de linguaxe ensamblador, e doutra banda, os compiladores e os intérpretes paira traducir linguaxes superiores.
Cando os compiladores traducen un programa, obteñen un programa equivalente en linguaxe máquina (chamado programa de obxectos), quedando preparados paira executar devandito programa de obxectos (ver figura 1).
Pola contra, os intérpretes non traducen integramente o programa fonte, senón que o len ordenadamente, tradúceno e execútano. Por tanto, non corresponden á 2ª fase independente (tradución e execución), xa que ambas se unifican (ver figura 2).
Paira traducir unha linguaxe de alto nivel pódese utilizar un compilador ou un intérprete. Paira os casos de BASIC, PASCAL e outros se adoitan ofrecer ambas, compilador e intérprete. Cando o tradutor resulta moi complexo e longo, non é conveniente una implementación interpretativa. E é que paira levar a cabo o programa, o intérprete ten que estar todo o tempo na momoría, tomando paira el una parte demasiado grande. Por tanto, na maioría das linguaxes complexas utilízanse compiladores. Por iso non hai intérpretes paira COBOL ou FORTRAN, polo menos nas computadoras normais.
Cando hai dúas opcións paira volver, cal elixir?, interpretación ou compilación?
Antes de responder a esta pregunta hai que analizar as dúas principais diferenzas que xera o seu uso:
Entón, paira responder á pregunta anterior, hai que diferenciar dous casos: Paira o desenvolvemento dun novo programa, o ideal é utilizar un intérprete, xa que as probas xeradas polas correccións poden realizarse de forma inmediata. Cando o programa estea probado e funcione correctamente, é mellor conseguir mediante o compilador un programa de obxectos equivalente e utilizar o programa de obxectos en todas as execucións posteriores, co que o tempo de execución foi menor, xa que non é necesario traducir.
Por tanto, cando hai dúas opcións paira unha linguaxe determinada, o mellor na fase de desenvolvemento é utilizar o intérprete, pero una vez comprobado que o programa está ben. Mediante o compilador obterase un programa de obxectos paira a súa utilización na fase de explotación.
Con todo, moitas veces non está dispoñible xa que o Sistema Operativo só ofrece un. Na maioría do micro só se ofrece intérprete paira a linguaxe BASIC. Os programas que traducen a linguaxe de ensamblaje denomínanse machihembradores (ASSEMBLY), aínda que sexan similares aos compiladores. Os ensambladores, ao ser a linguaxe de orixe correspondente a linguaxe de ensamblaje, presentan una característica particular: a súa tradución é moi rápida ao obter una soa orde de máquina de cada manancial. Por tanto, o proceso de tradución é moito máis sinxelo que o dos compiladores.
Á marxe das diferenzas intrínsecas que supón o uso dun ou outro tipo de tradutores nunha determinada linguaxe, cada linguaxe de programación ten as súas propias características que limitan o seu uso.
En primeiro lugar, as linguaxes de programación poderían clasificarse en dous tipos: a linguaxe de alto nivel e as linguaxes de ensamblaje compáranse a continuación as características de ambos os tipos:
Pola mesma razón, os programas escritos en linguaxe superior son máis comprensibles e legibles que os escritos en linguaxe de ensamblaje.
As características dos parágrafos a) e b) están a favor da utilización dos lenzos superiores e as dos parágrafos c) e d) en contra. En definitiva, o uso de linguaxes de alto nivel xera programas máis universais, fáciles, fiables e comprensibles, pero con tempos de execución máis lentos e con maior acollida de memoria.
Algunhas das características mencionadas analizarémolas cun exemplo. No exemplo preséntase un programa que, una vez calculados o primeiros mil números primos, redáctase 1000 con tres linguaxes diferentes: a linguaxe de ensamblaje, o FORTRAN e o PASCAL (ver figura 3). No tres casos seguiuse o mesmo algoritmo e o modo de programación (denominada programación estruturada), implementados no miniconputador denominado VAX 750.
Rastrexando o exemplo, as ordes do programa escritas en linguaxe de ensamblaje non se entenden si non se coñece a linguaxe de ensamblaje da computadora VAX 11. As outras dúas pódense entender si coñécese FORTAN ou PASCAL de calquera computador.
No programa escrito con linguaxe de ensamblaje, aínda que as ordes compréndense una a unha, resulta moi difícil comprender na súa totalidade e realizar algún cambio. Nos outros dous casos, sobre todo no de PASCAL, a inteligibilidad do programa é moito maior.
Co fin de dar una idea máis clara das características expostas no parágrafo c) anterior, os exemplos traduciron e executado os 3 programas obtendo os resultados que se mostran na táboa 1.
Analizando a Táboa 1 obsérvase que utilizando linguaxes de alto nivel créanse programas de maior acollida e de menor lentitude. Por iso, neste caso, a parte de memo que ocupan as ordes dos programas escritos en linguaxe de alto nivel é (aproximadamente) un 50% maior que a parte correspondente ao programa de linguaxe de ensamblaje, chegando ao 100% paira os datos. De face ao tempo de execución, o programa de linguaxe de ensamblaje é un 50% máis rápido que o de FORTRAN e un 100% máis rápido que o de PASCAL. Estas medidas son bastante xeneralizadas, aínda que no caso da adopción do memori deste exemplo hai demasiadas diferenzas.
En xeral, pódese afirmar que os programas realizados en linguaxe de alto nivel son un 50% máis lentos e altos que os realizados en linguaxe de ensamblaje.
Tras ver e analizar as características anteriores, chegou o momento de responder á pregunta principal. Cando utilizar unha linguaxe de ensamblaje e cando un alto nivel?
A resposta é agora evidente. Na maioría dos casos utilizaranse linguaxes de alto nivel e linguaxe de ensamblaje unicamente nos dous seguintes casos.
Con todo, cando utilizamos unha linguaxe de alto nivel, que linguaxe escoller? Non é obxecto deste artigo responder a esta pregunta, pero paira a toma de decisión teranse en conta o seguintes tres características:
Na táboa 1 pódese comparar a velocidade correspondente a un programa de PASCAL e a correspondente a un programa de FORTRAN. O de PASCAL é un 25% máis lento, pero como se pode observar na Figura 3, o programa de PASCAL lese mellor que o de FORTRAN. Ademais, o compilador PASCAL realiza moitas máis comprobacións, polo que os erros atópanse antes reducindo o tempo de proba.
As linguaxes aquí mencionadas son convencionais, é dicir, imperativos; non se mencionaron as linguaxes funcionais (LISP e similares) e explicativos (PROLOG) que actualmente teñen un gran desenvolvemento.
Tampouco se mencionaron as linguaxes desenvolvidas paira aplicacións concretas (estadistica GPSS, simulación SIMULA, etc.)
Os criterios a ter en conta á hora de seleccionar a linguaxe de programación son: