Язык программирования zonnon
DESCRIPTION
Язык программирования Zonnon. Compiler Project. Язык Zonnon. Авторы Jürg Gutknecht, ETH Zürich Евгений Зуев, ETH Zürich Первый компилятор для платформы .NET реализован в Швейцарском федеральном технологическом институте Евгением Зуевым. Направления работы в ETH. Компиляторы / Языки. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/1.jpg)
1
Нижегородский государственный университет им. Н.И. Лобачевского
Язык программирования Zonnon
Compiler Project
![Page 2: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/2.jpg)
2
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Язык Zonnon
Авторы Jürg Gutknecht, ETH Zürich Евгений Зуев, ETH Zürich
Первый компилятор для платформы .NET реализован в Швейцарском федеральном технологическом институте Евгением Зуевым
![Page 3: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/3.jpg)
3
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Направления работы в ETH
Rotor
Лекции/Семинары
Время исполнения/Компоненты
Компиляторы/Языки
Oberon(with N. Wirth)
Active Oberon
Oberon0
Active Oberon
Zonnonfor .NET
OberonGadgets
Aos
Jaos
System Software
Components
Info 1/4
System Software
Components
Sabbatical at MSRProject 7
.NET
Aos for Wearables
![Page 4: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/4.jpg)
4
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Видение эволюции
Algorithms
DataStructures
Modules
OOP Agents???
Algol
Pascal
Modula-2
Oberon
ActiveOberon
Zonnon
Programmingin-the-Large
Programmingin-the-Small
![Page 5: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/5.jpg)
5
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Цели проекта Zonnon
Разработать язык семейства Pascal для платформы .NET Удобный для обучения алгоритмам и
структурам данных без объектно-ориентированных ограничений
Цельный переход из эпохи паскаля к технологиям третьего тысячелетия
Расширить объектную модель средствами поддержки удаленных объектов и распределенных систем
![Page 6: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/6.jpg)
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.
![Page 7: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/7.jpg)
7
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Пример LineDrawingmodule 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;
![Page 8: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/8.jpg)
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.
![Page 9: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/9.jpg)
9
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
module DrawingTester;
import LineDrawing;
beginLineDrawing.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.
![Page 10: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/10.jpg)
10
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
C# - хороший язык, но ...
Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис
![Page 11: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/11.jpg)
11
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
C# - хороший язык, но ...
Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис
![Page 12: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/12.jpg)
12
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Поддержка потоков
C# Потоки в библиотеке System.Threading Обычные Lock Objects Wait/Pulse управляются потоками
Zonnon Активности встроенные в Объекты Объект контролирующий блокировки Потоками управляет система (AWAIT) Контролируемая синтаксисом передача
сообщений
![Page 13: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/13.jpg)
13
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Конвейер с активными объектами
Get
Put
Буфер
Активный объект Активный объект
Активность
Шаблон разработки конвейера
GetPut
Станция Станция
![Page 14: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/14.jpg)
14
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Активные объекты в Zonnonobject 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 endbegin n := 0; in := 0; out := 0end Station;
Отдельный поток
![Page 15: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/15.jpg)
15
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
C# - хороший язык, но ...
Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис
![Page 16: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/16.jpg)
16
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Строительные блоки и отношения
C# Interfaces Classes
Zonnon Definitions Implementations Object Types Modules
extends
implementsinherits
implements
aggregates
imports
refines
:n
:n:1
:1
:1
:n
:nrun
com
pile
![Page 17: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/17.jpg)
17
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Модуль как структурный элемент Что такое модуль?
Контейнер для логически близких объектов Статический объект управляемый системой
Загружаемый при необходимости библиотекой времени исполнения
Почему модули важны? Модули предоставляют простые средства для
Выделение отдельных задач Статическая декомпозиция системы
Модули сводят к нулю и выделяют явным образом зависимости при помощи IMPORT отношения
Модуль унифицирует систему и уровни приложения
![Page 18: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/18.jpg)
18
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Простая иерархия модулей
MyUserInterface
System.Windows
System.Graphics
MyBusinessLogic
Уровень системы
Уровень приложения
import
delegate
![Page 19: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/19.jpg)
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
![Page 20: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/20.jpg)
20
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Client
Client
Client
Унифицированная концепция абстракций
Servant Object asComposition of Facets
via Aggregation
DefinitionDefault ImplementationCustom Implementation
”Facet”aggregate
![Page 21: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/21.jpg)
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); begin s.next := rep;
rep := s end Add;begin Clearend 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
![Page 22: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/22.jpg)
22
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
C# - хороший язык, но ...
Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис
![Page 23: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/23.jpg)
23
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Настраиваемая расширяемость в C#
Определяемые пользователем методы и операторы Перегрузка
Атрибуты Посредник между программистом и средой
времени исполнения
![Page 24: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/24.jpg)
24
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Настраиваемая расширяемость в Zonnon
Модификаторы PUBLIC, PRIVATE, LOCKED, CONCURRENT BARRIER, WEAK, PERSISTENT, TRANSACTIONAL
Члены Activity Channel
Дефиниция Method Table & State Space XML Element SQL Query Syntax in EBNF
![Page 25: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/25.jpg)
25
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Каналы
Связь, контролируемая
синтаксисом P
Другая связь,
контролируемая
синтаксисом P
Канал типа P
Канал типа Q
Связь, контролируем
ая
синтаксисом Q
Активность
![Page 26: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/26.jpg)
26
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
t1 t2 t3 t5 t8
t6 t7 t9
Protocol = { Token { Token } { Token } }.
Синтаксические протоколы
Соответствует типу канала
Диалог объектов
Стандартизованное
кодирование
![Page 27: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/27.jpg)
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.
TICKETSERVICE
CUSTOMER
![Page 28: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/28.jpg)
28
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Пример Fighterdefinition 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 doreceive t;while t is DEFENSE do receive t; strike
if t is ATTACK then strike else halt(13) endend;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
endend fight;
![Page 29: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/29.jpg)
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
endend 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.
![Page 30: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/30.jpg)
30
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
C# - хороший язык, но ...
Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис
![Page 31: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/31.jpg)
31
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
Синтаксическое наследие и стиль
C# C & C++ Эффективный, но шифрованный
a = bfor (int i = 0, i == 99, i++) { ... }
Допускает множество стилей Zonnon
Pascal, Modula-2, Oberon Прозрачный и лаконичный Фиксированный стиль Не требующий объяснений
a := brepeat ... until i = 100
Важно для обучения,
документирования, поддержки
![Page 32: Язык программирования Zonnon](https://reader035.vdocuments.mx/reader035/viewer/2022081504/56813f92550346895daa81ae/html5/thumbnails/32.jpg)
32
ННГУ – ИТЛаб – Проект «Исследовательский компилятор»
В следующий раз
Компилятор Zonnon для .NET Технология: пакет CCI Интеграция в MS Visual Studio