1 / 32

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

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

elmo
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Язык программирования Zonnon Compiler Project

  2. Язык Zonnon • Авторы • Jürg Gutknecht, ETH Zürich • Евгений Зуев, ETH Zürich • Первый компилятор для платформы .NET реализован в Швейцарском федеральном технологическом институте Евгением Зуевым

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

  4. Видение эволюции Programmingin-the-Small Programmingin-the-Large Active Oberon Modula-2 Algol Oberon Zonnon Pascal Algorithms OOP Agents ??? DataStructures Modules

  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 implementsSystem.Windows.Forms.Form; const { public } MAX_POINTS = 1024; var { public } vx : array MAX_POINTS ofinteger; vy : array MAX_POINTS ofinteger; 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 Put Get Активный объект Активный объект Шаблон разработки конвейера

  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 Nend 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; beginloop 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 :n extends :n implements :1 inherits :1 refines :1 implements compile :n aggregates run :n imports

  17. Модуль как структурный элемент • Что такое модуль? • Контейнер для логически близких объектов • Статический объект управляемый системой • Загружаемый при необходимости библиотекой времени исполнения • Почему модули важны? • Модули предоставляют простые средства для • Выделение отдельных задач • Статическая декомпозиция системы • Модули сводят к нулю и выделяют явным образом зависимости при помощи IMPORT отношения • Модуль унифицирует систему и уровни приложения

  18. Простая иерархия модулей MyUserInterface Уровень приложения delegate MyBusinessLogic System.Windows import Уровень системы System.Graphics

  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. Унифицированная концепция абстракций Definition Default Implementation Client Custom Implementation ”Facet” aggregate Client Client Servant Object asComposition of Facets via Aggregation

  21. Пример definition Music.Store; procedure Clear; procedure Add (s: Song); end Store. implementation Music.Store; var rep: Lib.Song; procedure Clear; begin loop := nilend Clear; procedure Add (s: Song); begin s.next := rep; rep := s end Add; begin Clear end Store. Namespace definition Music.Player; var cur: Song; procedure Play (s: Song); procedure Stop; end Player. object Music.JukeBox implementsPlayer, Store; importStore; (* aggregate *) procedure Play (s: Song); implementsPlayer.Play; procedure Stop; implementsPlayer.Stop; end JukeBox.

  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. Каналы Связь, контролируемаясинтаксисом Q  Канал типа Q Связь, контролируемаясинтаксисом P    Активность Другая связь, контролируемаясинтаксисом P Канал типа P

  26. Синтаксические протоколы Стандартизованное кодирование Соответствует типу канала Protocol = { Token { Token } { Token } }. t1 t2 t3 t5 t8 t6 t7 t9 Диалог объектов

  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. Пример 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 doreceive t; strike if t is ATTACK then strike else halt(13) end end; if t is RUNAWAY then if(*not exhausted*)thensend Karate.CHASE end; return(* fight over *) elsif t is KO thenreturn(* fight over *) elsif t is ATTACK then fight (* recursion, continue the fight *) else halt(13) (* protocol error *) end 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

More Related