Está en la página 1de 18

LENGUAJES DE

PROGRAMACIÓN
COMPILADORES E INTÈRPRETES
Evolución de los Lenguajes de Programación
teniendo en cuenta las generaciones
Lenguaje Ensamblador 19 Junio, 1950
Es un lenguaje de programación de bajo nivel, basado en la
representación de código de máquina. (Binario) El ensamblador
realiza la traducción del código de máquina.
Fortran 1 Octubre, 1957
Es un lenguaje de programación de Alto nivel que se utilizó
principalmente para el cálculo numérico y para la computadora
científica. Creado por IBM
Considerado uno de los lenguajes más viejos utilizados hoy en
día.
Principales usos: Aplicaciones para supercomputadoras,
desarrollo de Inteligencia Artificial, software empresarial.
Lisp 1 Abril, 1958
Especificado originalmente en 1958 por John McCarthy y sus
colaboradores en el Instituto Tecnológico de Massachusetts, el
Lisp es el segundo más viejo lenguaje de programación de alto
nivel. El nombre LISP deriva del "LISt Processing"
Cobol 1 Junio, 1979
(acrónimo de COmmon Business-Oriented Language, Lenguaje
Común Orientado a Negocios) con el objetivo de crear un
lenguaje de programación universal que pudiera ser usado en
cualquier ordenador, ya que en los años 1960 existían
numerosos modelos de ordenadores incompatibles entre sí, y
que estuviera orientado principalmente a los negocios, es decir,
a la llamada informática de gestión.
Algol 1 Julio, 1960
Lenguaje elaborado diseñado por Niklaus Wirth y Tony Hoare a
partir de los trabajos del grupo ALGOL de la IFIP. Se trata de
un lenguaje conciso, simple de implementar, que evita todos
los defectos conocidos del lenguaje Algol e incluye sus propias
características adicionales. Sin embargo, el grupo Algol no lo
adoptó como sucesor de Algol prefiriendo en su lugar al que
terminó siendo Algol 68. Algol W fue utilizado por gran cantidad
de usuarios.
Basic 11 Noviembre, 1964
El BASIC es un lenguaje de programación que se creó con fines
pedagógicos, era el lenguaje que utilizan las
microcomputadoras de los años 80. Actualmente sigue siendo
muy conocido y tienen muchísimos dialectos muy diferentes al

PÁGINA 1
original.
Los creadores del BASIC fueron John Goerge Kemeny y Thomas
Eugene Kurtz en el año 1964. Fue inventado para permitir a los
estudiantes escribir programas usando terminales de
computador de tiempo compartido. Con el BASIC se quiso hacer
un lenguaje de programación.
Pascal 20 Diciembre, 1970
Es un lenguaje de programación desarrollado por el profesor
suizo Niklaus Wirth. Su objetivo era crear un lenguaje que
facilitara el aprendizaje de programación a sus alumnos,
utilizando la programación estructurada y estructuración de
datos. Sin embargo con el tiempo su utilización fue de gran uso
para herramientas de todo tipo.
Lenguaje de alto nivel. Las versiones comerciales de Pascal
fueron ampliamente utilizadas en los años 80’s.
Principales usos: Enseñanza de la programación. Objet Pascal,
un derivado, se utiliza comúnmente para el desarrollo de
aplicaciones Windows.
Lenguaje C 1 Setiembre, 1972
Es un lenguaje orientado a la implementación de Sistemas
Operativos, concretamente Unix. C es apreciado por la
eficiencia del código que produce y es el lenguaje de
programación más popular para crear software de sistemas,
aunque también se utiliza para crear aplicaciones.
Lenguaje de propósito general, de bajo nivel. Creado por Unix
Systems. Es el lenguaje más popular (precedido por Java). De
él se derivan muchos lenguajes como C#, Java, Javascript,
Perl, PHP y Phyton.
Creador: Dennis Ritchie (Laboratorios Bell)
Principales usos: Programación multiplataforma, programación
de sistemas, programación en Unix y desarrollo de videojuegos.
Lenguaje C++ 1 Junio, 1983
C++ es un lenguaje de programación diseñado 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.
Lenguaje de nivel intermedio, orientado a objetos. Una
extensión de C con mejoras como clases, funciones virtuales y
plantillas.
Principales usos: Desarrollo de aplicaciones comerciales,
software embebido, aplicaciones cliente-servidor en
videojuegos.

PÁGINA 2
Perl 1987
Lenguaje de propósito general, de alto nivel. Creado para el
procesamiento de reportes en sistemas Unix. Hoy en día es
conocido por su alto poder y versatilidad.
Creador: Larry Wall (Unisys)
Principales usos: Imágenes generadas por computadora,
aplicaciones de base de datos, administración de sistemas,
programación web y programación de gráficos.
Usado por: IMDb, Amazon, Priceline, Ticketmaster
Phyton 10 Junio, 1991
Python es un lenguaje de programación interpretado creado por
Guido van Rossum. Python es un lenguaje de programación
multiparadigma. Esto significa que más que forzar a los
programadores a adoptar un estilo particular de programación,
permite varios estilos: programación orientada a objetos,
programación estructurada y programación funcional. Que ha
permitido modificar la forma de programar en la actualidad.
Lenguaje de propósito general, de alto nivel.
Principales usos: Aplicaciones Web, desarrollo de software,
seguridad informática.
HTML 10 Junio, 1991
Siglas de HyperText Markup Language, es de los primeros
lenguaje para paginas web. Describe 22 elementos
comprendiendo el diseño inicial y relativamente simple de
HTML. Trece de estos elementos todavía existen en HTML 4

Ruby 1993
Lenguaje de propósito general, de alto nivel. Un programa de
enseñanza, influenciado por Perl, Ada, Lisp, Smalltalk, entre
otros. Diseñado para hacer la programación más productiva y
agradable.
Creador: Yukihiro Matsumoto
Principales usos: Desarrollo de aplicaciones Web, Ruby on
Rails.
Visual C++ 10 junio, 1993
También conocido como Mvs}C, Microsoft Visual C++) es un
entorno de desarrollo integrado (IDE) para lenguajes de
programación C, C++ y C++/CLI.
PHP 1995
Lenguaje de código abierto, de propósito general. Se utiliza
para construir páginas web dinámicas. Más ampliamente usado
en software de código abierto para empresas.

PÁGINA 3
Creador: Rasmus Lerdorf
Principales usos: Construcción y mantenimiento de páginas
web dinámicas, desarrollo del lado del servidor.
JAVASCRIPT 10 Junio, 1995
Javascript es un lenguaje de programación interpretado
dialecto del estándar ECMAScript. Se define como orientado a
objetos, basado en prototipos, imperativo, débilmente tipado y
dinámico
Lenguaje de alto nivel. Creado para extender las
funcionalidades de las páginas web. Usado por páginas
dinámicas para el envío y validación de formularios,
interactividad, animación, seguimiento de actividades de
usuario, etc.
Creador: Brendan Eich (Netscape)
Principales usos: Desarrollo de web dinámica, documentos PDF,
navegadores web y widgets de Escritorio.
JAVA 1995
Lenguaje de propósito general, de alto nivel. Hecho para un
proyecto de televisión interactiva. Funcionalidad de
programación multiplataforma. Es actualmente el segundo
lenguaje de programación más popular en el mundo.
Creador: James Gosling (Sun Microsystems)
Principales usos: Programación Web, desarrollo de aplicaciones
Web, desarrollo de software, desarrollo de interfaz gráfica de
usuario.

PÁGINA 4
Clasificación De Los Lenguajes De Programación
Un Lenguaje de Programación es un conjunto de reglas, notaciones,
símbolos y/o caracteres que permiten a un programador poder
expresar el procesamiento de datos y sus estructuras en la
computadora. Cada lenguaje posee sus propias sintaxis. También se
puede decir que un programa es un conjunto de órdenes o
instrucciones que resuelven un problema específico basado en un
Lenguaje de Programación. Existen varias clasificaciones para los
lenguajes de programación. Clasificación de los Lenguajes de
Programación Los programadores escriben instrucciones en diversos
lenguajes de programación. La computadora puede entender
directamente algunos de ellos, pero otros requieren pasos de
traducción intermedios. Hoy día se utilizan cientos de lenguajes de
computadora.

1. Nivel de abstracción.
Según el nivel de abstracción, o sea, según el grado de cercanía a la
máquina:
 Lenguajes de bajo nivel: La programación se realiza teniendo
muy en cuenta las características del procesador.
 El lenguaje maquina: Este lenguaje ordena al
dispositivo las operaciones fundamentales para su
funcionamiento. Consiste en un codigo binario (0,1) que
forma las ordenes entendibles por el hardware. Este
lenguaje es mucho más rápido que los lenguajes de alto
nivel. La desventaja es que son bastantes difíciles de
manejar y usar, además de tener códigos fuente
enormes donde encontrar un fallo es casi imposible.

PÁGINA 5
 El lenguaje ensamblador: Es un derivado del lenguaje
máquina y está formado por abreviaturas de letras y
números llamadas mnemotécnicos. Con la aparición de
este lenguaje se crearon los programas traductores para
poder pasar los programas escritos en lenguaje
ensamblador a lenguaje máquina. Como ventaja con
respecto al código máquina es que los códigos fuente
serán más cortos y los programas creados ocupaban
menos memoria. Las desventajas de este lenguaje
siguen siendo prácticamente las mismas que las del
lenguaje ensamblador, añadiendo la dificultad de tener
que aprender un nuevo lenguaje difícil de probar y
mantener.

 Lenguajes de nivel medio: Permiten un mayor grado de


abstracción pero al mismo tiempo mantienen algunas
cualidades de los lenguajes de bajo nivel. Ejemplo: C puede
realizar operaciones lógicas y de desplazamiento con bits,
tratar todos los tipos de datos como lo que son en realidad a
bajo nivel (números), etc.

PÁGINA 6
 Lenguajes de alto nivel: Más parecidos al lenguaje humano.
Manejan conceptos, tipos de datos, etc., de una manera
cercana al pensamiento humano ignorando (abstrayéndose)
del funcionamiento de la máquina. Ejemplos: Java, Ruby.
Hay quien sólo considera lenguajes de
bajo nivel y de alto nivel, (en ese caso,
C es considerado de alto nivel).

2. Propósito.
Según el propósito, es decir, el tipo de problemas a tratar con ellos:
 Lenguajes de propósito general: Aptos para todo tipo de
tareas. Permiten la implementación de prácticamente cualquier
algoritmo, el nivel de abstracción es más uniforme, proporciona
razonable rendimiento. Ej Pascal, C, C++, Java, Delphi, Lisp,
Scheme.

 Lenguajes de propósito específico: Hechos para un objetivo


muy concreto. Ejemplo: Csound (para crear ficheros de audio).
Tienen por lo general un conjunto muy restringido de características
y un alto nivel de abstracción para cumplir tareas específicas como
el procesamiento de textos, gráficos, audio, video e ingeniería.
Ejemplos: Snobol, SQL, Matlab.

 Lenguajes de programación de sistemas: Diseñados para


realizar sistemas operativos o drivers.
 Lenguajes de script: Para realizar tareas varias de control y
auxiliares. Antiguamente eran los llamados lenguajes de
procesamiento por lotes (batch) o JCL (“Job Control
Languages”). Se subdividen en varias clases (de shell, de GUI,
de programación web, etc.). Ejemplos: bash (shell), mIRC
script, JavaScript (programación web).

PÁGINA 7
3. Evolución histórica.
Con el paso del tiempo, se va incrementando el nivel de abstracción,
pero en la práctica, los de una generación no terminan de sustituir a
los de la anterior:
 Lenguajes de primera generación (1GL): Código máquina.
 Lenguajes de segunda generación (2GL): Lenguajes
ensamblador.
 Lenguajes de tercera generación (3GL): La mayoría de los
lenguajes modernos, diseñados para facilitar la programación
a los humanos. Ejemplos: C, Java.
 Lenguajes de cuarta generación (4GL): Diseñados con un
propósito concreto, o sea, para abordar un tipo concreto de
problemas. Ejemplos: NATURAL, Mathematica.
 Lenguajes de quinta generación (5GL): La intención es que
el programador establezca el qué problema ha de ser resuelto
y las condiciones a reunir, y la máquina lo resuelve. Se usan en
inteligencia artificial. Ejemplo: Prolog.

4. Manera de ejecutarse.
Según la manera de ejecutarse:
 Lenguajes compilados: Un programa traductor traduce el
código del programa (código fuente) en código máquina
(código objeto). Otro programa, el enlazador, unirá los ficheros
de código objeto del programa principal con los de las librerías
para producir el programa ejecutable. Ejemplo: C.
 Lenguajes interpretados: Un programa (intérprete), ejecuta
las instrucciones del programa de manera directa. Ejemplo:
Lisp.

PÁGINA 8
También los hay mixtos, como Java, que primero pasan por una fase
de compilación en la que el código fuente se transforma en
“bytecode”, y este “bytecode” puede ser ejecutado luego
(interpretado) en ordenadores con distintas arquitecturas
(procesadores) que tengan todos instalados la misma “máquina
virtual” Java.
5. Manera de abordar la tarea a realizar.
Según la manera de abordar la tarea a realizar, pueden ser:
 Lenguajes imperativos: Son abstracciones de alguna secuencia
de instrucciones que especifican con detalle el orden de ejecución del
programa, es decir; indican cómo hay que hacer la tarea, es
decir, expresan los pasos a realizar. Ejemplos: Fortran, Algol,
Ada, Pascal, C, C++.

 Lenguajes declarativos: Indican qué hay que hacer.


Ejemplos: Lisp, Prolog. Otros ejemplos de lenguajes
declarativos, pero que no son lenguajes de programación, son
HTML (para describir páginas web) o SQL (para consultar bases
de datos).

6. Paradigma de programación.
El paradigma de programación es el estilo de programación
empleado. Algunos lenguajes soportan varios paradigmas, y otros
sólo uno. Se puede decir que históricamente han ido apareciendo
para facilitar la tarea de programar según el tipo de problema a

PÁGINA 9
abordar, o para facilitar el mantenimiento del software, o por otra
cuestión similar, por lo que todos corresponden a lenguajes de alto
nivel (o nivel medio), estando los lenguajes ensambladores “atados”
a la arquitectura de su procesador correspondiente. Los principales
son:
 Lenguajes de programación procedural: Divide el
problema en partes más pequeñas, que serán realizadas por
subprogramas (subrutinas, funciones, procedimientos), que se
llaman unas a otras para ser ejecutadas. Ejemplos: C, Pascal.
 Lenguajes de programación orientada a objetos: Crean un
sistema de clases y objetos siguiendo el ejemplo del mundo
real, en el que unos objetos realizan acciones y se comunican
con otros objetos. Ejemplos: C++, Java.
 Lenguajes de programación funcional: La tarea se realiza
evaluando funciones, (como en Matemáticas), de manera
recursiva. Ejemplo: Lisp.
 Lenguajes de programación lógica: La tarea a realizar se
expresa empleando lógica formal matemática. Expresa qué
computar. Ejemplo: Prolog.
7. Lugar de ejecución.
En sistemas distribuidos, según dónde se ejecute:
 Lenguajes de servidor: Se ejecutan en el servidor. Ejemplo:
PHP es el más utilizado en servidores web.

 Lenguajes de cliente: Se ejecutan en el cliente. Ejemplo:


JavaScript en navegadores web.

8. Concurrencia.
Según admitan o no concurrencia de procesos, esto es, la ejecución
simultánea de varios procesos lanzados por el programa:
 Lenguajes concurrentes. Ejemplo: Ada.

PÁGINA 10
 Lenguajes no concurrentes. Ejemplo: C.

9. Interactividad.
Según la interactividad del programa con el usuario u otros
programas:
 Lenguajes orientados a sucesos: El flujo del programa es
controlado por la interacción con el usuario o por mensajes de
otros programas/sistema operativo, como editores de texto,
interfaces gráficos de usuario (GUI) o kernels. Ejemplo:
VisualBasic, lenguajes de programación declarativos.

 Lenguajes no orientados a sucesos: El flujo del programa


no depende de sucesos exteriores, sino que se conoce de
antemano, siendo los procesos batch el ejemplo más claro
(actualizaciones de bases de datos, colas de impresión de
documentos, etc.). Ejemplos: Lenguajes de programación
imperativos.

10. Realización visual.


Según la realización visual o no del programa:
 Lenguajes de programación visual: El programa se realiza
moviendo bloques de construcción de programas (objetos
visuales) en un interfaz adecuado para ello. No confundir con
entornos de programación visual, como Microsoft Visual Studio
y sus lenguajes de programación textuales (como Visual C#).

Ejemplo: Mindscript.

PÁGINA 11
 Lenguajes de programación textual: El código del
programa se realiza escribiéndolo. Ejemplos: C, Java, Lisp.

11. Determinismo.
Según se pueda predecir o no el siguiente estado del programa a
partir del estado actual:
 Lenguajes deterministas. Ejemplos: Todos los anteriores.
 Lenguajes probabilísticos o no deterministas: Sirven para
explorar grandes espacios de búsqueda, (como gramáticas), y
en la investigación teórica de hipercomputación. Ejemplo: mutt
(generador de texto aleatorio).

12. Productividad.
Según se caractericen por tener virtudes útiles o productivas, u
oscuras y enrevesadas:
 Lenguajes útiles o productivos: Sus virtudes en cuanto a
eficiencia, sencillez, claridad, productividad, etc., motiva que
sean utilizados en empresas, administraciones públicas y/o en
la enseñanza. Ejemplos: Cualquier lenguaje de uso habitual (C,
Java, C++, Lisp, Python, Ruby,).

 Lenguajes esotéricos o exóticos: Inventados con la


intención de ser los más raros, oscuros, difíciles, simples y/o
retorcidos de los lenguajes, para diversión y entretenimiento
de frikis programadores. A veces exploran nuevas ideas en
programación. Ejemplo: Brainfuck.

PÁGINA 12
Funcionalidad de los Lenguajes de
Programación desde las arquitecturas RISC Y
SISC
ARQUITECTURA CISC: CISC es la abreviatura de Computadora de
conjunto de instrucciones complejas. La arquitectura CISC intenta
reducir el número de Instrucciones que tiene un programa,
optimizando así la parte de Instrucciones de cada programa de la
ecuación anterior. Esto se hace combinando muchas instrucciones
simples en una única y compleja. Han hecho su aparición los
lenguajes de alto nivel, imponiéndose en la programación al lenguaje
más básico del computador, el assembler.

Así pues, CISC es una arquitectura que persigue la programación fácil


y almismo tiempo un uso eficiente de la memoria.

En la analogía del perro, "Atrapar" puede considerarse como una


instrucción CISC. Cuando un perro "atrapa" una pelota, en realidad

PÁGINA 13
está haciendo una serie de instrucciones que incluyen: "Sigue la
pelota", luego "Recógela", luego "Regresa con el humano" y
finalmente "Dale la pelota al humano".

Para ilustrar una instrucción CISC, tomemos la instrucción MUL. Esta


instrucción toma dos entradas: la ubicación de la memoria de los dos
números para multiplicar, luego realiza la multiplicación y almacena
el resultado en la primera ubicación de la memoria.

MUL 1200, 1201

MUL toma el valor de dos ubicaciones de memoria (digamos 1200 y


1201) o dos registros, encuentra su producto y almacena el resultado
en la ubicación 1200.

Esto reduce la cantidad de trabajo que el compilador tiene que hacer


ya que las instrucciones en sí mismas son de muy alto nivel. Las
instrucciones ocupan muy poca memoria en la RAM y el hardware
realiza la mayor parte del trabajo al decodificar las instrucciones.

Dado que en una instrucción de estilo CISC, la CPU tiene que trabajar
más en una sola instrucción, por lo que las velocidades de reloj son
un poco más lentas. Además, el número de registros de propósito
general es menor ya que se necesitan usar más transistores para
decodificar las instrucciones.

Lenguajes de programación

El lenguaje ensamblador x86: es la familia de los lenguajes


ensambladores para los procesadores de la familia x86 introducida
en abril de 1972, que incluye desde los procesadores Intel 8086 y
8088, pasando por los Pentium de Intel y los Athlon de AMD y
llegando hasta los últimos procesadores x86 de estas compañías.
Como el resto de lenguajes ensambladores, usa una serie de
mnemotécnicos para representar las operaciones fundamentales que
el procesador puede realizar. Los compiladores a menudo producen
código ensamblador como un paso intermedio cuando traducen un
programa de alto nivel a código máquina.

ARQUITECTURA RISC: Por otro lado, las arquitecturas RISC o las


computadoras con conjuntos de instrucciones reducidos tienen más
instrucciones, pero reducen el número de ciclos que una instrucción
tarda en realizar. En general, una sola instrucción en una máquina

PÁGINA 14
RISC tomará solo un ciclo de CPU. Esto podría ser como una
instrucción de "sentarse" que le damos a un perro.

La multiplicación en una arquitectura RISC no se puede hacer con


una sola instrucción MUL. En cambio, primero debemos cargar los
datos de la memoria usando la instrucción LOAD, luego multiplicar
los números y almacenar el resultado en la memoria.

Load A, 1200

Load B, 1201

Mul A, B

Store 1200, A

Aquí la instrucción Load almacena los datos de una ubicación de


memoria como 1200 en un registro A o B. MUL multiplica valores en
los dos registros lo almacena en A. Luego finalmente almacenamos
el valor de A en 1200 (o cualquier otra ubicación de memoria). Tenga
en cuenta que en las arquitecturas RISC, solo podemos realizar
operaciones en Registros y no directamente en la memoria. Estos se
llaman modos de direccionamiento.

Esto puede parecer mucho trabajo, pero en realidad, dado que cada
una de estas instrucciones solo ocupa un ciclo de reloj, la operación
de multiplicación completa se completa en menos ciclos de reloj.

Sin embargo, la ventaja de tiempo no está exenta de desventajas.


Dado que RISC tiene conjuntos de instrucciones más simples, las
instrucciones complejas de alto nivel se deben dividir en muchas
instrucciones por parte del compilador. Si bien las instrucciones son
simples y no necesitan arquitecturas complejas para decodificar, el
trabajo del compilador es desglosar programas complejos de alto
nivel en muchas instrucciones simples.

COMPARACION

Mientras que CISC intenta completar una acción en el menor número


posible de líneas de código ensamblador, RISC intenta reducir el
tiempo que tarda cada instrucción en ejecutarse.

Por ejemplo, la operación MUL en dos números de 8 bits en el


registro, en 8086 que es un dispositivo CISC puede tomar hasta 77
ciclos de reloj, mientras que la operación de multiplicación completa
en un dispositivo RISC como un PIC solo toma 38 ciclos.

PÁGINA 15
Los procesadores RISC generalmente tienen menos y más simples
instrucciones que en la mayoría de los casos toman una sola
palabra. La compensación es que los procesadores RISC están
hechos con lógica combinatoria y ejecutan la mayoría de las
instrucciones en un solo ciclo de reloj, mientras que los
procesadores CISC a menudo usan micro código incorporado para

ejecutar instrucciones complejas y necesitan ciclos de reloj


adicionales. Entonces, aunque RISC requiere más instrucciones para
muchos trabajos, generalmente hacen el trabajo más rápidamente.

CISC Y LOS LENGUAJES DE ALTO NIVEL

Para CISC la simplificación de los compiladores es obvia. Cuantas más


instrucciones máquina den soporte directo a sentencias de lenguajes
de alto nivel, más fácil será escribir un buen compilador. Además,
poder ejecutar una instrucción de alto nivel en solamente una de bajo
nivel permite una optimización por hardware, debido a que cada
instrucción está diseñada para un uso específico y se puede conocer
mejor cuáles son sus características.

Otra de las preocupaciones de la filosofía CISC es que la utilización


de los lenguajes de alto nivel tiene, como hemos visto, una influencia
negativa sobre el tamaño de la memoria requerida por las
aplicaciones. Para paliar este problema los compiladores tienen que
optimizar el código assembler resultante para una ejecución eficiente.
En base a esto, CISC siempre ha intentado acercar el código máquina
a los lenguajes de alto nivel, evitando así montones de instrucciones
equivalentes que ocuparían más memoria.

Un programa corto posee mayores prestaciones que otro de mayores


dimensiones. En primer lugar porque debemos tener en cuenta que
cuanto más rápido se ejecuten los programas, mayor rendimiento se
obtiene del computador. Los programas cortos son más rápidos
porque, además de tener que ejecutar un menor número de

PÁGINA 16
instrucciones, se deben captar menos bytes de la memoria para
ejecutarlo. En segundo lugar, porque la gestión de memoria,
sobretodo en un entorno que utilice paginación y memoria virtual, se
ve simplificada por la disminución de los fallos de página.

RISC Y LOS LENGUAJES DE ALTO NIVEL

Mientras se desarrollaban los procesadores CISC, se realizaron


estudios detallados sobre las características de la ejecución de las
instrucciones generadas por los lenguajes de alto nivel. La mayoría
de ellos fueron realizados por David A.Patterson y Tanenbaum. Los
aspectos más relevantes de sus estudios se centraron en determinar
que instrucciones son las que realmente ejecuta la CPU, el tipo de
operandos y su interacción con la memoria y el secuenciamiento de
las instrucciones. Así mismo, es muy importante darse cuenta de que
realmente es un compilador el que genera el código máquina y no el
programador. Como consecuencia, la filosofía RISC está muy
encauzada a ayudar al diseño de compiladores optimizadores

PÁGINA 17