Язык программирования Zonnon

Preview:

DESCRIPTION

Язык программирования Zonnon. Compiler Project. Язык Zonnon. Авторы Jürg Gutknecht, ETH Zürich Евгений Зуев, ETH Zürich Первый компилятор для платформы .NET реализован в Швейцарском федеральном технологическом институте Евгением Зуевым. Направления работы в ETH. Компиляторы / Языки. - PowerPoint PPT Presentation

Citation preview

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

Zonnonfor .NET

OberonGadgets

Aos

Jaos

System Software

Components

Info 1/4

System Software

Components

Sabbatical at MSRProject 7

.NET

Aos for Wearables

4

ННГУ – ИТЛаб – Проект «Исследовательский компилятор»

Видение эволюции

Algorithms

DataStructures

Modules

OOP Agents???

Algol

Pascal

Modula-2

Oberon

ActiveOberon

Zonnon

Programmingin-the-Large

Programmingin-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

ННГУ – ИТЛаб – Проект «Исследовательский компилятор»

Пример 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;

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;

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.

10

ННГУ – ИТЛаб – Проект «Исследовательский компилятор»

C# - хороший язык, но ...

Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис

11

ННГУ – ИТЛаб – Проект «Исследовательский компилятор»

C# - хороший язык, но ...

Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис

12

ННГУ – ИТЛаб – Проект «Исследовательский компилятор»

Поддержка потоков

C# Потоки в библиотеке System.Threading Обычные Lock Objects Wait/Pulse управляются потоками

Zonnon Активности встроенные в Объекты Объект контролирующий блокировки Потоками управляет система (AWAIT) Контролируемая синтаксисом передача

сообщений

13

ННГУ – ИТЛаб – Проект «Исследовательский компилятор»

Конвейер с активными объектами

Get

Put

Буфер

Активный объект Активный объект

Активность

Шаблон разработки конвейера

GetPut

Станция Станция

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;

Отдельный поток

15

ННГУ – ИТЛаб – Проект «Исследовательский компилятор»

C# - хороший язык, но ...

Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис

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

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

Client

Client

Унифицированная концепция абстракций

Servant Object asComposition of Facets

via Aggregation

DefinitionDefault ImplementationCustom 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); 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

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.

TICKETSERVICE

CUSTOMER

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;

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.

30

ННГУ – ИТЛаб – Проект «Исследовательский компилятор»

C# - хороший язык, но ...

Что может быть улучшено? Параллелизм Компонентность Расширяемость Синтаксис

31

ННГУ – ИТЛаб – Проект «Исследовательский компилятор»

Синтаксическое наследие и стиль

C# C & C++ Эффективный, но шифрованный

a = bfor (int i = 0, i == 99, i++) { ... }

Допускает множество стилей Zonnon

Pascal, Modula-2, Oberon Прозрачный и лаконичный Фиксированный стиль Не требующий объяснений

a := brepeat ... until i = 100

Важно для обучения,

документирования, поддержки

32

ННГУ – ИТЛаб – Проект «Исследовательский компилятор»

В следующий раз

Компилятор Zonnon для .NET Технология: пакет CCI Интеграция в MS Visual Studio

Recommended