Нижегородский государственный университет им. Н.И. Лобачевского 1 Язык программирования Zonnon Compiler Project.

Презентация:



Advertisements
Похожие презентации
Нина Гонова ННГУ ВМК МЛиВА. Zonnon Немного истории: почему еще один язык?
Advertisements

© 2003, Cisco Systems, Inc. All rights reserved. CSVPN Lesson 17 Configure the Cisco Virtual Private Network 3000 Series Concentrator for LAN-to-LAN.
Structured Error Handling in the ABL Sarah Marshall QA Architect, OpenEdge Session 128.
© 2006 Cisco Systems, Inc. All rights reserved.ISCW v Cisco IOS Threat Defense Features Configuring Cisco IOS IPS.
WS9-1 PAT328, Workshop 9, May 2005 Copyright 2005 MSC.Software Corporation WORKSHOP 9 PARAMETERIZED GEOMETRY SHAPES.
1/27 Chapter 9: Template Functions And Template Classes.
Одномерный массив Turbo Pascal 9 класс. Объясните каждый шаг в программе. Что делает программа? Сколько раз срабатывает цикл? Var A : array [1..10] of.
© 2006 Cisco Systems, Inc. All rights reserved. HIPS v Configuring CSA Installing and Configuring CSA MC.
Saint Petersburg, 2011 Java Lecture Generics. Quiz ArrayList lst = new ArrayList(); Collection c = lst; lst.add("one"); lst.add(two"); lst.add(three");
Массивы в Паскале. Создание массива: var a:array [1..5] of integer; i:integer; begin for i:=1 to 5 do begin write ('a[',i,']='); readln(a[i]); end; end.
© 2003, Cisco Systems, Inc. All rights reserved. CSVPN Lesson 7 Configure the Cisco VPN Firewall Feature for IPSec Software Client.
© 2006 Cisco Systems, Inc. All rights reserved. HIPS v Working with Variables and Application Classes Creating Variables.
PL/SQL Хранимые процедуры и функции. Процедуры [CREATE [OR REPLACE]] PROCEDURE procedure_name[(parameter[, parameter]...)] {IS | AS} [local declarations]

PROGRAM example1; const m=100; var a : ARRAY [1.. m] of INTEGER; i,k,n,q : INTEGER; BEGIN readln (n); randomize; WRITELN('Полученный массив:' ); FOR i.
© 2006 Cisco Systems, Inc. All rights reserved. ICND v Determining IP Routes Introducing Distance Vector Routing.
5.Дана матрица А и вектор Х соответствующих размерностей. Нечетные строки матрицы заменить элементами вектора Х. Результаты работы: n=4 m=
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Гречкина П.В., ПЯВУ-2, С++ Быстрое введение в язык C++ C++ Builder – консольное приложение либо Turbo C.
Тема: Нахождение минимального и максимального элемента в массиве.
Транксрипт:

Нижегородский государственный университет им. Н.И. Лобачевского 1 Язык программирования Zonnon Compiler Project

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 2 Язык Zonnon Авторы Jürg Gutknecht, ETH Zürich Евгений Зуев, ETH Zürich Первый компилятор для платформы.NET реализован в Швейцарском федеральном технологическом институте Евгением Зуевым

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 3 Направления работы в ETH Rotor Лекции/Семинары Время исполнения/ Компоненты Компиляторы/Языки Oberon (with N. Wirth) Active Oberon Oberon0 Active Oberon Zonnon for.NET Oberon Gadgets Aos Jaos System Software Components Info 1/4 System Software Components Sabbatical at MSR Project 7.NET Aos for Wearables

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 4 Видение эволюции Algorithms Data Structures Modules OOPAgents ??? Algol Pascal Modula-2 Oberon Active Oberon Zonnon Programming in-the-Large Programming in-the-Small

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 5 Цели проекта Zonnon Разработать язык семейства Pascal для платформы.NET Удобный для обучения алгоритмам и структурам данных без объектно- ориентированных ограничений Цельный переход из эпохи паскаля к технологиям третьего тысячелетия Расширить объектную модель средствами поддержки удаленных объектов и распределенных систем

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 6 Простая программа module example526; var m,n,a,i: integer; begin write("Введите 4-х значное число: "); readln(n); m := n; a := 0; for i := 1 to 4 do a := a * 10 + m mod 10; m := m div 10; end; if a = n then writeln("Является перевертышем") else writeln("Не является перевертышем") end; end example526.

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 7 Пример LineDrawing module LineDrawing; import System.Math,System.Drawing.Pens as Pens, System.Windows.Forms.PaintEventArgs as PaintEventArgs, System.Windows.Forms.Application as Application, System.Windows.Forms.Form; object GraphicsForm implements System.Windows.Forms.Form; const { public } MAX_POINTS = 1024; var { public } vx : array MAX_POINTS of integer; vy : array MAX_POINTS of integer; pointsCount : integer; procedure { public } OnPaint(e : PaintEventArgs) implements System.Windows.Forms.Form.OnPaint; var k : integer; g : System.Drawing.Graphics; begin g := e.Graphics; for k := 0 to pointsCount-2 do g.DrawLine(Pens.Black, vx[k], vy[k], vx[k+1], vy[k+1]); end; writeln("OK"); end OnPaint; begin Text := "Drawing Context"; Width := 300; Height := 300; pointsCount := 0; end GraphicsForm;

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 8 var { private } form : GraphicsForm; var { public } (* Window size *) width, height : integer; (* Starting position *) Px, Py : integer; procedure { public } clear; begin form.vx[0] := Px; form.vy[0] := Py; form.pointsCount := 1; form.Width := width; form.Height := height; form.Update(); end clear; procedure { public } line(direction, length : integer); begin form.vx[form.pointsCount] := integer(length * System.Math.Cos( real(direction) )); form.vy[form.pointsCount] := integer(length * System.Math.Sin( real(direction) )); inc(form.pointsCount); form.Update(); end line; begin Px := 150; Py := 150; width := 300; height := 300; form := new GraphicsForm(); Application.Run(form); end LineDrawing.

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 9 module DrawingTester; import LineDrawing; begin LineDrawing.Px := 200; LineDrawing.Py := 200; LineDrawing.width := 400; LineDrawing.height := 400; (* Draw rectangle *) LineDrawing.line( 90, 100); LineDrawing.line( 0, 100); LineDrawing.line(-90, 100); LineDrawing.line(180, 100); end DrawingTester.

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 10 C# - хороший язык, но... Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 11 C# - хороший язык, но... Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 12 Поддержка потоков C# Потоки в библиотеке System.Threading Обычные Lock Objects Wait/Pulse управляются потоками Zonnon Активности встроенные в Объекты Объект контролирующий блокировки Потоками управляет система (AWAIT) Контролируемая синтаксисом передача сообщений

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 13 Конвейер с активными объектами Get Put Буфер Активный объект Активност ь Шаблон разработки конвейера Get Put Станция

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 14 Активные объекты в Zonnon object Station (next: Station); var { private } n, in, out: integer; buf: array N of object; procedure { private } Get (var x: object); begin { locked } await (n # 0); dec(n); x := buf[out]; out := (out + 1) mod N end Get; procedure { public } Put (x: object); begin { locked } await (n # N); inc(b); buf[in] := x; in := (in + 1) mod N end Put; activity; var x: object; begin loop Get(x); (*process x;*) next.Put(x) end end begin n := 0; in := 0; out := 0 end Station; Отдельный поток

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 15 C# - хороший язык, но... Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 16 Строительные блоки и отношения C# Interfaces Classes Zonnon Definitions Implementations Object Types Modules extends implements inherits implements aggregates imports refines :n :1 :n run compile

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 17 Модуль как структурный элемент Что такое модуль? Контейнер для логически близких объектов Статический объект управляемый системой Загружаемый при необходимости библиотекой времени исполнения Почему модули важны? Модули предоставляют простые средства для Выделение отдельных задач Статическая декомпозиция системы Модули сводят к нулю и выделяют явным образом зависимости при помощи IMPORT отношения Модуль унифицирует систему и уровни приложения

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 18 Простая иерархия модулей MyUserInterface System.Windows System.Graphics MyBusinessLogic Уровень системы Уровень приложения import delegate

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 19 Абстракции: Что первично? JukeBox: Player or Store? class JukeBox: Player, Store {... } Truck: Container or Vehicle? class Truck: Vehicle, Container {... } Computer: Calculator or DataBase or Browser? class Computer: Calculator, DataBase, Browser {... } Base class Interface

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 20 Client Унифицированная концепция абстракций Servant Object as Composition of Facets via Aggregation Definition Default Implementation Custom Implementation Facet aggregate

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 21 Пример definition Music.Store; procedure Clear; procedure Add (s: Song); end Store. implementation Music.Store; var rep: Lib.Song; procedure Clear; begin loop := nil end Clear; procedure Add (s: Song); begins.next := rep; rep := s end Add; begin Clear end Store. definition Music.Player; var cur: Song; procedure Play (s: Song); procedure Stop; end Player. object Music.JukeBox implements Player, Store; import Store; (* aggregate *) procedure Play (s: Song); implements Player.Play; procedure Stop; implements Player.Stop; end JukeBox. Namespace

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 22 C# - хороший язык, но... Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 23 Настраиваемая расширяемость в C# Определяемые пользователем методы и операторы Перегрузка Атрибуты Посредник между программистом и средой времени исполнения

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 24 Настраиваемая расширяемость в Zonnon Модификаторы PUBLIC, PRIVATE, LOCKED, CONCURRENT BARRIER, WEAK, PERSISTENT, TRANSACTIONAL Члены Activity Channel Дефиниция Method Table & State Space XML Element SQL Query Syntax in EBNF

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 25 Каналы Связь, контролируемая синтаксисом P Другая связь, контролируемая синтаксисом P Канал типа P Канал типа Q Связь, контролируемая синтаксисом Q Активност ь

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 26 t1 t2 t3 t5 t8 t6 t7 t9 Protocol = { Token { Token } { Token } }. Синтаксические протоколы Соответствует типу канала Диалог объектов Стандартизованно е кодирование

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 27 Пример: электронный билет TicketingService = CheckPrice Destination [ TicketType ] Price | BuyTicket Destination [ TicketType ] AccountID TicketID. Destination = CharString. TicketType = (full | reduced) [twoway]. Price = Number. AccountID = CharString : CharString. CharString. TicketID = CharString. CharString. TICKET SERVICE CUSTOMER

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 28 Пример Fighter definition Fighter; activity (* Syntax of the protocol, in this case it is recursive too *) {fight = { attack ( { defense attack } | RUNAWAY [ ?CHASE] | KO | fight ) }. attack = ATTACK strike. defense = DEFENSE strike. strike = bodypart [ strength ]. bodypart = LEG | NECK | HEAD. strength = integer. } Karate = (RUNAWAY, CHASE, KO, ATTACK, DEFENSE, LEG, NECK, HEAD); end Fighter. object Opponent implements Fighter; activity Karate implements Fighter.Karate; var t: object; procedure fight; begin while t is ATTACK do receive t; while t is DEFENSE do receive t; strike if t is ATTACK then strike else halt(13) end end; if t is RUNAWAY then if (*not exhausted*) then send Karate.CHASE end; return (* fight over *) elsif t is KO then return (* fight over *) elsif t is ATTACK then fight (* recursion, continue the fight *) else halt(13) (* protocol error *) end end fight;

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 29 procedure strike; begin if (t is LEG) or (t is NECK) or (t is HEAD) then receive t; if t is integer then (* unusual strength *) receive t end end end strike; begin (* Karate*) receive t; fight end Karate; end Opponent. object Challenger; import Opponent, Fighter; var opp: Opponent; f: Fighter.Karate; opp := new Opponent; (* create opponent *) … f := new opp.Fighter.Karate; (* create dialog *) send Fighter.Karate.ATTACK => f; … (* fight according to the dialog protocol *) … end Challenger.

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 30 C# - хороший язык, но... Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 31 Синтаксическое наследие и стиль C# C & C++ Эффективный, но шифрованный a = b for (int i = 0, i == 99, i++) {... } Допускает множество стилей Zonnon Pascal, Modula-2, Oberon Прозрачный и лаконичный Фиксированный стиль Не требующий объяснений a := b repeat... until i = 100 Важно для обучения, документирования, поддержки

ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 32 В следующий раз Компилятор Zonnon для.NET Технология: пакет CCI Интеграция в MS Visual Studio