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

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

  • Upload
    elmo

  • View
    101

  • Download
    3

Embed Size (px)

DESCRIPTION

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

Citation preview

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

1

Нижегородский государственный университет им. Н.И. Лобачевского

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

Compiler Project

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

2

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

Язык Zonnon

Авторы Jürg Gutknecht, ETH Zürich Евгений Зуев, ETH Zürich

Первый компилятор для платформы .NET реализован в Швейцарском федеральном технологическом институте Евгением Зуевым

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

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

4

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

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

Algorithms

DataStructures

Modules

OOP Agents???

Algol

Pascal

Modula-2

Oberon

ActiveOberon

Zonnon

Programmingin-the-Large

Programmingin-the-Small

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

5

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

Цели проекта Zonnon

Разработать язык семейства Pascal для платформы .NET Удобный для обучения алгоритмам и

структурам данных без объектно-ориентированных ограничений

Цельный переход из эпохи паскаля к технологиям третьего тысячелетия

Расширить объектную модель средствами поддержки удаленных объектов и распределенных систем

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

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

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

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

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

10

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

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

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

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

11

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

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

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

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

12

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

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

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

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

сообщений

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

13

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

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

Get

Put

Буфер

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

Активность

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

GetPut

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

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

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

15

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

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

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

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

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

17

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

Модуль как структурный элемент Что такое модуль?

Контейнер для логически близких объектов Статический объект управляемый системой

Загружаемый при необходимости библиотекой времени исполнения

Почему модули важны? Модули предоставляют простые средства для

Выделение отдельных задач Статическая декомпозиция системы

Модули сводят к нулю и выделяют явным образом зависимости при помощи IMPORT отношения

Модуль унифицирует систему и уровни приложения

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

18

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

Простая иерархия модулей

MyUserInterface

System.Windows

System.Graphics

MyBusinessLogic

Уровень системы

Уровень приложения

import

delegate

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

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

20

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

Client

Client

Client

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

Servant Object asComposition of Facets

via Aggregation

DefinitionDefault ImplementationCustom Implementation

”Facet”aggregate

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

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

22

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

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

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

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

23

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

Настраиваемая расширяемость в C#

Определяемые пользователем методы и операторы Перегрузка

Атрибуты Посредник между программистом и средой

времени исполнения

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

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

25

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

Каналы

Связь, контролируемая

синтаксисом P

Другая связь,

контролируемая

синтаксисом P

Канал типа P

Канал типа Q

Связь, контролируем

ая

синтаксисом Q

Активность

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

26

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

t1 t2 t3 t5 t8

t6 t7 t9

Protocol = { Token { Token } { Token } }.

Синтаксические протоколы

Соответствует типу канала

Диалог объектов

Стандартизованное

кодирование

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

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

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

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

30

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

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

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

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

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

32

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

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

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