Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 10 лет назад пользователемЕлена Петрягина
1 Нижегородский государственный университет им. Н.И. Лобачевского 1 Язык программирования Zonnon Compiler Project
2 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 2 Язык Zonnon Авторы Jürg Gutknecht, ETH Zürich Евгений Зуев, ETH Zürich Первый компилятор для платформы.NET реализован в Швейцарском федеральном технологическом институте Евгением Зуевым
3 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 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 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 4 Видение эволюции Algorithms Data Structures Modules OOPAgents ??? Algol Pascal Modula-2 Oberon Active Oberon Zonnon Programming in-the-Large Programming in-the-Small
5 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 5 Цели проекта Zonnon Разработать язык семейства Pascal для платформы.NET Удобный для обучения алгоритмам и структурам данных без объектно- ориентированных ограничений Цельный переход из эпохи паскаля к технологиям третьего тысячелетия Расширить объектную модель средствами поддержки удаленных объектов и распределенных систем
6 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 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 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 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 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 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 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 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 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 10 C# - хороший язык, но... Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис
11 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 11 C# - хороший язык, но... Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис
12 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 12 Поддержка потоков C# Потоки в библиотеке System.Threading Обычные Lock Objects Wait/Pulse управляются потоками Zonnon Активности встроенные в Объекты Объект контролирующий блокировки Потоками управляет система (AWAIT) Контролируемая синтаксисом передача сообщений
13 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 13 Конвейер с активными объектами Get Put Буфер Активный объект Активност ь Шаблон разработки конвейера Get Put Станция
14 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 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 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 15 C# - хороший язык, но... Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис
16 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 16 Строительные блоки и отношения C# Interfaces Classes Zonnon Definitions Implementations Object Types Modules extends implements inherits implements aggregates imports refines :n :1 :n run compile
17 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 17 Модуль как структурный элемент Что такое модуль? Контейнер для логически близких объектов Статический объект управляемый системой Загружаемый при необходимости библиотекой времени исполнения Почему модули важны? Модули предоставляют простые средства для Выделение отдельных задач Статическая декомпозиция системы Модули сводят к нулю и выделяют явным образом зависимости при помощи IMPORT отношения Модуль унифицирует систему и уровни приложения
18 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 18 Простая иерархия модулей MyUserInterface System.Windows System.Graphics MyBusinessLogic Уровень системы Уровень приложения import delegate
19 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 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 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 20 Client Унифицированная концепция абстракций Servant Object as Composition of Facets via Aggregation Definition Default Implementation Custom Implementation Facet aggregate
21 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 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 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 22 C# - хороший язык, но... Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис
23 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 23 Настраиваемая расширяемость в C# Определяемые пользователем методы и операторы Перегрузка Атрибуты Посредник между программистом и средой времени исполнения
24 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 24 Настраиваемая расширяемость в Zonnon Модификаторы PUBLIC, PRIVATE, LOCKED, CONCURRENT BARRIER, WEAK, PERSISTENT, TRANSACTIONAL Члены Activity Channel Дефиниция Method Table & State Space XML Element SQL Query Syntax in EBNF
25 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 25 Каналы Связь, контролируемая синтаксисом P Другая связь, контролируемая синтаксисом P Канал типа P Канал типа Q Связь, контролируемая синтаксисом Q Активност ь
26 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 26 t1 t2 t3 t5 t8 t6 t7 t9 Protocol = { Token { Token } { Token } }. Синтаксические протоколы Соответствует типу канала Диалог объектов Стандартизованно е кодирование
27 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 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 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 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 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 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 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 30 C# - хороший язык, но... Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис
31 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 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 ННГУ – ИТЛаб – Проект «Исследовательский компилятор» 32 В следующий раз Компилятор Zonnon для.NET Технология: пакет CCI Интеграция в MS Visual Studio
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.