Lenguajes de Alto Nivel

4
Lenguajes de alto nivel (HLL) Assembler: representación simbólica de las instrucciones de máquina ( 1 sentencia = 1 instrucción de máquina ). • Ventaja: se puede alcanzar la máxima flexibilidad, performance, y manejo del HW. • Desventaja: baja productividad, baja confiabilidad, difícil verificación y debugging, mantenimiento costoso, baja portabilidad, etc. Lenguaje de alto nivel (HLL): 1. Expresan los algoritmos de una manera adecuada a la capacidad cognitiva humana. 2. Portabilidad: código portable a diversas arquitecturas y sistemas operativos. 3. Modularidad, facilidad de modificación y mantenimiento. 4. Productividad en la generación de código. 5. Performance: con los compiladores actuales, la performance de programas en C o C++ se aproxima o a veces supera a la de un buen programador en Assembler. 6. Penalidad: en general más lentos en ejecución, consumen más recursos de la 7. Necesitan un traductor entre el código simbólico y las instrucciones de máquina Según sea el momento en el que la traducción se realiza, los HLL son: 1. Compilados: la traducción se realiza previamente (C, C++, Java, Pascal, Fortran, etc.) 2. Interpretados: la traducción se realiza en el momento de ejecución (Basic, Python, JVM, etc.) 3. Surge entonces la idea del la brecha semántica (semantic gap) entre el código de alto nivel y la arquitectura del procesador, se reaviva el debate CISC vs. RISC, etc. (ej. Jazelle).

description

Programación

Transcript of Lenguajes de Alto Nivel

Page 1: Lenguajes de Alto Nivel

Lenguajes de alto nivel (HLL)

Assembler: representación simbólica de las instrucciones de máquina ( 1 sentencia = 1 instrucción de máquina ).

• Ventaja: se puede alcanzar la máxima flexibilidad, performance, y manejo del HW.

• Desventaja: baja productividad, baja confiabilidad, difícil verificación y debugging, mantenimiento costoso, baja portabilidad, etc.

Lenguaje de alto nivel (HLL):

1. Expresan los algoritmos de una manera adecuada a la capacidad cognitiva humana.2. Portabilidad: código portable a diversas arquitecturas y sistemas operativos.3. Modularidad, facilidad de modificación y mantenimiento.4. Productividad en la generación de código.5. Performance: con los compiladores actuales, la performance de programas en C o C++ se

aproxima o a veces supera a la de un buen programador en Assembler. 6. Penalidad: en general más lentos en ejecución, consumen más recursos de la 7. Necesitan un traductor entre el código simbólico y las instrucciones de máquina

Según sea el momento en el que la traducción se realiza, los HLL son:

1. Compilados: la traducción se realiza previamente (C, C++, Java, Pascal, Fortran, etc.) 2. Interpretados: la traducción se realiza en el momento de ejecución (Basic, Python, JVM,

etc.) 3. Surge entonces la idea del la brecha semántica (semantic gap) entre el código de alto nivel

y la arquitectura del procesador, se reaviva el debate CISC vs. RISC, etc. (ej. Jazelle).

Compiladores:

Un compilador es un programa que traduce un lenguaje fuente en un lenguaje objetivo equivalente.

Procedimientos & Funciones

Procedimiento: es una construcción que permite dar nombre a un conjunto de sentencias y declaraciones asociadas que se usan para resolver un sub problema determinado.

Ventajas: reutilización del código y de la memoria de distribución entre programadores, simplicidad del testeo y debugging, mantenimiento, programación estructurada, etc.

Desventajas: overhead moderado y cuidados para el proceso de llamado y retorno.

Page 2: Lenguajes de Alto Nivel

Organización del Stack Frame – Convenciones de Llamado

Un compilador puede usar cualquier esquema de layout que sea conveniente.

Los fabricantes de microprocesadores especifican esquemas de layout estándar para su utilización para todos los compiladores.

Se los denomina comunmente Convenciones de Llamado ( Calling Conventions ). – Si todos los compiladores usan las mismas calling conventions, entonces funciones compiladas con un compilador pueden llamar a funciones compiladas con otro compilador.

Son esenciales para la interacción con los Sistemas Operativos y las Librerías.

Forman parte de ABI (Application Binary Interface). ABI especifica convenciones estándar para formatos de archivos, tipos de datos, uso de registros, organización del stack frame, pasaje de parámetros, etc.

Pasaje de Parámetros

Los registros son más rápidos que la memoria.

En lo posible el compilador debe mantener los valores en registros.

Este espacio debe ser reservado en el stack frame aún si los parámetros se pasan vía registros.

Registros vs. Stack Frame

1. Los Registros guardan: 2. Algunos Parámetros.3. Valor de Retorno. 4. Variables Locales Resultados intermedios de expresiones (temporarios) 5. El Stack Frame guarda:6. Variables pasadas por referencia o que tienen la dirección tomada 7. Variables accedidas por procedimientos anidados dentro del corriente. 8. Variables que son demasiado grandes para entrar en el register file.9. Array variables (se requiere arimética de direccionamiento para acceder elementos).10. Variables cuyos registros se necesitan para ún propósito específico (parameter passing)

Registros – Asignación

Los compiladores típicamente ubican variables en la pila hasta que pueden determinar si pueden ser promovidos a un registro (p.ej. sin referencias).

•La asignación de variables a registros la realiza el Register Allocator (etapa de optimización del compilador).

Page 3: Lenguajes de Alto Nivel

Registros – resguardo

Caller-save: los registros son responsabilidad de la función llamante. La función llamada puede usar esos registros sin salvar sus valores originales.

Callee-save: los registros son responsabilidad de la función llamada. La función llamante puede asumir que esos registros tendrán los mismos valores después de retornar del llamado.

Calling Conventions

• Los registros R0 hasta R3 son usados para pasar parámetros a la función.• Los registros R4 hasta R11 deben ser preservados por la función llamada.• Los registros R12 hasta R15 tienen propósitos especiales.• El valor de la función se devuelve en R0 (y en R1 de ser necesario).