Lenguaje programación limbo



Documentos relacionados
RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Elementos léxicos del lenguaje de programación Java

Estructura de Datos [Tipos de datos concretos y tipos de datos abstractos]

Arrays y Cadenas en C

PASCAL. Repaso de Pascal Introducción a Python. Pascal. Pascal - introducción. Pascal Declaraciones: Variables. Pascal Declaraciones: Tipos 07/04/2015

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

Tema 2. El lenguaje de programación Java (Parte 1)

SOLUCION EXAMEN junio 2006

Se guardan en archivos con extencion c y los cabezales con extension h

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

GENERACIÓN DE CÓDIGO

Preliminares. Tipos de variables y Expresiones

El lenguaje de Programación C. Fernando J. Pereda

Tema 3 Elementos básicos de programación

Que es PHP? Que se puede hacer con PHP? Sintaxis del lenguaje. Variables. Operadores básicos. Condicionales. Ciclos.

TEMA 5. CONTROL DE FLUJO DEL PROGRAMA. Sentencia Instrucción Expresión Operadores + Operandos Sintaxis: Sentencia ;

Tema 2: La clase string

1 ELEMENTOS BASICOS DEL LENGUAJE

INTELIGENCIA ARTIFICIAL 2015 TALLER RÁPIDO DE PROGRAMACIÓN EN JAVA

Introducción a la Computación TFA

Semántica Denotacional

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

PHP y MySQL. Indice: Switch Bucles For While do...while

Para leer la entrada de consola, lo primero que se hace es construir un Scanner que este asociado al flujo de entrada estándar System.

Introducción al tipo de dato ARRAY

Lenguaje de Programación: Go

Concurrencia. Primitivas IPC con bloqueo

Una variable de clase escalar tiene un nivel de indirección igual a 1. Por ejemplo, las variables i, b y x definidas como se muestra a continuación.

Objetivo: Introducción conceptual y aplicación básica de los lenguajes del lado del servidor.

Programación Orientada a Objetos con Java

Capítulo 4. Vectores y matrices. 4.1 Declaración de tablas. 4.2 Declaración estática de tablas

Java Inicial (20 horas)

Modulo 1 El lenguaje Java

Tema 4. Gestión de entrada/salida

Contenidos. Funciones (suplemento) Funciones. Justificación del uso de Funciones

Curso PHP Módulo 1 R-Luis

TEMA 2. Agenda. Fundamentos de JAVA

Examen Junio- Grupo A Lunes 17 de Junio - Programación en C++ Pág. 1

Notación algorítmica (seudocódigo en castellano) (fecha: )

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática

Ficheros. fd = open(nombre, modo)

CONCEPTOS BASICOS DEL LENGUAJE JAVA

Carmen. Estándares de codificación. Manuel Arias Calleja

Tutorial Básico de vbscript

Ejemplos de conversión de reales a enteros

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

ACTIONSCRIPT (AS) Proyectos II. Audiovisuales. Dpto. Escultura. UPV. [sintaxis elemental]

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Tema 1. Introducción a JAVA

Concurrencia: deberes. Concurrencia: Exclusión Mutua y Sincronización. Concurrencia. Dificultades con la Concurrencia

Sea el siguiente programa de nombre "c0p1" para copiar archivos (por simplicidad se ha eliminado todo control de errores): Se pide:

8. Sentencia return y métodos

! Una variable declarada con final no puede volver a ser reinicializada. numero = 2;! ! Para definir constantes

Tema 5 Sentencias de control de flujo. Fundamentos de Informática

Capítulo 6. Asociaciones y Declaraciones.

TUTORIAL DE PHP. M. en C. Erika Vilches. Parte 2.

Examen Principios de Programación Febrero 2012

Diseño de algoritmos.

Estructura de Datos. Unidad I Tipos de Datos

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

Tiempo de Compilación. Programa fuente. Secuencia. de caracteres. Scanner. Secuencia. de símbolos Parser. Compilador.

Contenido. Sistema de archivos. Operaciones sobre archivos. Métodos de acceso a archivos. Directorio. Sistema de archivos por capas.

Repaso de las características más importantes de la programación Java y su adaptación a Android

Visual Basic 1. Empleo de módulos y Procedimientos. Procedimientos definidos por el usuario

ALGORITMICA Y PROGRAMACION POR OBJETOS I

CURSO ONLINE INSTALACIÓN Y ADMINISTRACIÓN DE CENTRALITAS VoIP ASTERISK

Distinguir las diferentes estructuras de repetición utilizadas en problemas con ciclos: mientras, haga-mientras, repita-hasta, para.

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

7. Manejo de Archivos en C.

Lenguaje C. Tipos de Datos Simples y Estructuras de Control

Sistemas Operativos. Curso 2016 Procesos

Informática I. While & do While

Introducción al lenguaje JAVA

promedio = nint((notas(1) + notas(2) + notas(3) + & notas(4) + notas(5) + notas(6)) / 6.0) print *, 'Su promedio es', promedio

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

CAPÍTULO IV BREVE DESCRIPCIÓN DE LA INFRAESTRUCTURA DE CÓMPUTO VISUAL BASIC 6.0 PARA WINDOWS

INSTITUTO POLITECNICO NACIONAL. ESCUELA SUPEIRIOR DE INGENIERIA MECANICA Y ELECTRICA. UNIDAD CULHUACAN. INTEGRANTES: FLORES ACOLTZI ONESIMO

Academia técnica de computación A.T.C.

PROGRAMACIÓ DIDÁCTICA: Secuanciación, Temporalización y Unidades Didácticas

Capítulo 1 Introducción a la Computación

2.4. Modos de direccionamiento Distintas formas que tiene la arquitectura para especificar la ubicación de los operandos.

Examen de Fundamentos de sistemas distribuidos

Tema 2: Arquitectura del repertorio de instrucciones. Visión del computador que tiene el programador en bajo nivel.

ESTRUCTURAS CONDICIONALES EN PHP: SWITCH, CASE, BREAK. EJEMPLOS DE USO Y EJERCICIOS RESUELTOS. (CU00820B)

Introducción a PHP. * No es necesario declarar previamente las variables.

Tema 1: Computadores y Programas

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3

Sistemas Operativos Práctica 3

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

11. Algunas clases estándar de Java (II)

Tecnologías en la Educación Matemática. Expresiones. Datos. Expresiones Aritméticas. Expresiones Aritméticas 19/08/2014

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

El soporte del sistema operativo. Hace que un computador sea más fácil de usar. Permite que los recursos del computador se aprovechen mejor.

República Bolivariana de Venezuela Aldea Universitaria Liceo Fray Pedro de Agreda. Lenguaje C++ Contadores y Acumuladores

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

Tema 7: Programación con Matlab

Introducción al lenguaje Java

Transcripción:

José María Cañas Plaza gsyc-profes@gsyc.escet.urjc.es Octubre 2003

Índice 1 Índice Introducción Tipos de datos Estructuras de control Hebras Canales

Introducción 2 Introducción similar a C en el flujo de control similar a Pascal en las estructuras de datos sensible a mayúsculas fuertemente tipado no es orientado a objetos lenguaje modular: módulos

Introducción (cont.) 3 Hola mundo # esto es un comentario implement Hi; include "sys.m"; include "draw.m"; sys:sys; Hi: module { init: }; fn(nil: ref Draw->Context, argv: list of string); init(nil: ref Draw->Context, argv: list of string) { sys = load Sys Sys->PATH; sys->print("hola mundo\n"); }

Introducción (cont.) 4 Compilación y ejecución limbo -g holamundo.b./holamundo.dis ejecutables en dis, interpretados máquina virtual DIS /dis/

Introducción (cont.) 5 Módulos como tipos cabeceras.m implementación.b implementaciones como valores de variable carga dinámica de módulos no hay enlazado estático import función init

Tipos de datos 6 Tipos de datos declaración : inicialización, asignación = declaración impĺıcita := básicos: int, byte, big, real, string compuestos: lists, array, tuplas, adt tipos valor: se pasan como parámetros en funciones tipos referencia conversión entre tipos

Tipos de datos (cont.) 7 Tipos enteros: int, byte, big int, [ 2 31, 2 31 1], i := 341421432; byte, [0, 255] big, [ 2 63, 2 63 1] se inicializan a cero solo si son globales, locales indefinido los tipos no son miscibles para pasar de un tipo entero a otro se necesita una conversión b : byte; b = (byte) 7; i : int; i = (i << 3) + 345;

Tipos de datos (cont.) 8 Tipo real 64 bits, notación flotante IEEE r: real; r=3.141592; r = real 4;

Tipos de datos (cont.) 9 Tipo string secuencias de caracteres Unicode codificación UTF-8 de Unicode K no es lo mismo que K cada carácter es un entero s: string; s= telefono ; s[3] = E ; c := s[2]; operador len num := len s; s = F ; (??)

Tipos de datos (cont.) 10 se pueden incrementar uno a uno de int a string a: string; a = (string) 234; de string a int i: int; i = (int) 456 67 ; se concatenan con el operador + nombre := Juan saludo:= hola + +nombre;

Tipos de datos (cont.) 11 Constantes datos: con /usr/jmplaza/texto ; pi: con 3.14159265; enumeraciones: Lun, Mar, Mie, Jue, Vie, Sab, Dom: con iota; doce, trece, catorce: con iota+12; dos, cuatro, ocho, dieciseis: con 2<<iota;

Tipos de datos (cont.) 12 Tipos referencia listas, arrays, tuplas... antes de usarlos hay que ubicarles en un espacio de memoria en Limbo no hay punteros, lo más parecido son las referencias no hay aritmética de referencias en Limbo sólo se puede pedir memoria, no liberarla. El recolector de basura la libera automáticamente cuando deja de ser accesible Si x e y son dos referencias, que pasa al asignar x = y? x = nil nil es una referencia a cualquier cosa también se usa para anunciar que no se usa cierto parámetro a := funcion( hola,3,nil);

Tipos de datos (cont.) 13 Listas lista de elementos del mismo tipo menu : list of string; menu := list of sopa, coliflor, filete ; es un tipo referencia operador :: operador hd operador tl operador len menu = pescado ::menu; primero := hd menu; submenu := tl menu; num := len menu; los operadores no son modifican elementos de la lista original

Tipos de datos (cont.) 14 Arrays colecciones indexadas de elementos del mismo tipo bonoloto : array of int; bonoloto = array [6] of int; bonoloto := array [6] of int; indice de 0 a n-1 se les puede dar valor inicial bonoloto := array [6] of {1,12,15,23,35,41}; z := array [20] of { 0 or 2 or 4 or 6 or 8 => 1; 1 or 3 or 5 or 7 or 9 => 0; * => 2 }; puede haber arrays de arrays

Tipos de datos (cont.) 15 Rebanadas subconjuntos de arrays y de strings comienzan en un índice inicial y acaban uno antes del índice final familia := array [] of manuela, marta, pablo, luis chicos := familia[2:]; chicas := familia[0:2]; compuesto := chicas[0][:3]+chicas[1][3:5]; se pueden asignar cosas a una rebanada si no se especifica su final a := array [10] of int; b:= array [20] of int; b[15:]=a[5:]

Tipos de datos (cont.) 16 Conversión entre string y array of byte de string a array of byte pueden no tener la misma longitud, dependiendo de cuantos bytes se necesite para representar los caracteres de Unicode ingles := ant ; inglesbytes := array of byte ingles; castellano := españa ; castellanobytes := array of byte castellano; de array of byte a string depende de si el flujo de bytes es una secuencia válida de Unicode array of byte > string > array of byte, pueden no coincidir

Tipos de datos (cont.) 17 Tuplas una colección sin nombre de elementos a:= ( Juana, José,34,9.2) es un buen modo de pasar argumentos a funciones recoger su retorno (valor,ok):=funcion(34); se puede usar a ambos lados de la asignación int i; real r; (nil,nil,i,r)=a;

Tipos de datos (cont.) 18 ADT persona : adt { a~no: int; nombre: string; } paciente : persona; colección de elementos heterogeneos con nombre, incluso funciones es un tipo valor acceso a los elementos por nombre, a:=paciente.nombre se permite la asignación entre un ADT y una tupla homóloga se adscriben a módulos, sus funciones deben definirse en él

Tipos de datos (cont.) 19 ref ADT operador ref admite también acceso con. se hace una copia del ADT y se entrega una referencia a esa copia funciones que admiten referencias pueden cambiar contenidos del ADT manolo: paciente; a, b, c : ref paciente a= ref manolo; manolo.nombre = Manuel García ; manolo.año = 1970; b=c= ref paciente(1923, Jesús Molina );

Tipos de datos (cont.) 20 autoreferencia self persona : adt { a~no: int; nombre: string; edad: fn(yomismo : self ref persona): int; } persona.edad(yomismo : self persona):int {#comprueba fecha actual y le resta la de nacimiento } z: = manolo.edad(); ADT con especialidades, los campos dependen de la especialidad similar a los registros variantes

Tipos de datos (cont.) 21 pick ADT fichero : adt {permisos: int; due~no: string; pick {regular => contenido : array of byte; longitud : int; directorio => hijos : ref fichero; cuantos : int; }} ADT con especialidades, los campos dependen de la especialidad f : fichero; tagof f; g := fichero.regular(777, jmplaza,nil,0);

Tipos de datos (cont.) 22 Construcción pick del lenguaje pick aux := variable { regular => print( %d bytes\n,aux.longitud); directorio => print( dir con %d hijos\n, aux.cuantos); } para utilizarlos se utiliza la construcción pick del lenguaje el flujo avanza por la rama con la especialidad acertada

Tipos de datos (cont.) 23 Definición de tipos nuevos type mientero: type int; a : mientero; uchar: type byte; b : uchar;

Estructuras de control 24 Estructuras de control Condicional if if ( expresion ) sentencia; if ( expresion ) sentencia1; else sentencia2; la expresión es entera y evalúa a 0 o a distinto de 0 se pueden anidar condicionales, el else corresponde al último if operadores lógicos se pueden agrupar sentencias en un bloque con {}

Estructuras de control (cont.) 25 Construcción do while do sentencia while ( expresion ); mientras la expresión evalúa a 0 siempre se ejecuta al menos una vez se pueden anidar

Estructuras de control (cont.) 26 Construcción while while ( expresion ) sentencia ; mientras la expresión evalúa a 0 puede no ejecutarse nunca la sentencia se pueden anidar

Estructuras de control (cont.) 27 Sentencia case case expresion { expr1 => sentencia1; expr2 to expr3 => sentencia2; expr4 or expr5 => sentencia3; * => sentencia4; } la expresión evalúa a un int o a un string sólo ejecuta la rama que casa si ninguna casa, entonces se evalúa la de * las expresiones de las entradas no pueden solaparse

Estructuras de control (cont.) 28 for (i=1; i<=10; i++) { print( i = %d\n,i); } Iteraciones con for for (expr1; expr2; expr3) sentencia; expr1 para incializar al final de cada iteración se comprueba expr2 si hay que dar otra iteración se evalúa expr3

Estructuras de control (cont.) 29 n=0; primero: do { segundo: do { if (n >= 5) break primero; n++; }while(); } while (); break, continue y return return devuelve el flujo de control al llamante de una función break saca el flujo de control fuera del while, do o case continue salta la iteración actual de while, do, o for pueden llevar etiqueta

Hebras de Limbo 30 Hebras de Limbo flujos de ejecución concurrentes no son los procesos del kernel roundrobin spawn función(1,3.24); exit; las hebras tienen estado ready, broken, exiting, alt, send, receive, release

Hebras de Limbo (cont.) 31 Recursos de las hebras sys >pctl() espacio de nombres variables de entorno tabla de descriptores abiertos nuevo vacío copia del padre compartir con el padre

Hebras de Limbo (cont.) 32 hebra limbo 2 hebra limbo 1 hebra limbo 3 MAQUINA VIRTUAL SO HUESPED, INFERNO NATIVO proceso kernel A proceso kernel B hebra 1 puede ejecutarse en el proceso A o B en distintos instantes el proceso A puede ejecutar la hebra 1 o 2 en distintos instantes

Canales 33 Canales mecanismo de cita el que quiere leer se bloquea hasta que alguien escribe el que quiere escribir se bloquea hasta que alguien lee útil para comunicar datos entre dos hebras útil para sincronización inchan := chan of int; outchan := chan of string; c =< inchan; outchan < = mesa ;

Canales (cont.) 34 sentencia alt alt { a := <- chan1 => print( Esta preparado el 1\n ); b := <- chan2 => print( Esta preparado el 2\n ); chan3 <- 3 => print( Esta preparado el 3\n ); * => print( Ninguno está listo\n ); } similar a case, pero con canales el flujo prosigue por el envío o recepción que esté preparado

+ información 35 + información www.vitanuova.com/inferno/papers.html Limbo Basics A Descent into Limbo Limbo programming Inferno Programming with Limbo