html5-img
1 / 33

Mozart System(OZ language)

By Eng.Muhammad Hamed. Mozart System(OZ language). Introduction.

dena
Download Presentation

Mozart System(OZ language)

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. By Eng.Muhammad Hamed Mozart System(OZ language)

  2. Introduction • Mozart Programming System is an advanced development platform for intelligent, distributed applications. The system is the result of a decade of research in programming language design and implementation, constraint-based inference, distributed computing, and human-computer interfaces. As a result, it’s unequalled in expressive power and functionality. • It has an interactive incremental development environment and a production-quality implementation for Unix and Windows platforms. • It is the fruit of an ongoing research collaboration by the Mozart Consortium.

  3. Introduction(cont.) • Mozart is based on the Oz language, which supports declarative programming, object-oriented programming, constraint programming, and concurrency as part of a coherent whole. For distribution. • Mozart provides a true network transparent implementation with support for network awareness, openness, and fault tolerance. • Mozart supports multi-core programming with its network transparent distribution and is an ideal platform for both general-purpose distributed applications as well as for hard problems requiring sophisticated optimization and inferencing abilities.

  4. Choosing the right concepts • Oz provides a large set of basic concepts • Choose the concepts you need, for the paradigm you need • Functional programming • Declarative concurrency • Lazy functional programming • Message-passing concurrency • Asynchronous dataflow programming • Relational programming • Constraint programming • Object-oriented programming • … • All these paradigms work together well because they differ in just a few concepts

  5. Symbolic data structures & Dataflow variables

  6. Dataflow variables • Single-assignment store • Variables are initially unbound and can be bound to just one value declare X in {Browse X} % Displays “X” X=100 % X is bound, display becomes “100” • Data structures with holes that are filled in later (“partial values”) declare X K V L R in X=tree(K V L R) % Build tree with holes in it K=dog V=chien % Fill key and value L=tree(cat chat leaf leaf) % Fill left subtree R=tree(mouse souris leaf leaf) % Fill right subtree • This is an important concept for many paradigms • Functional programs can be simpler and more efficient (tail recursion) • Declarative concurrency becomes possible (streams)

  7. Symbolic data structures • Lists: the simplest linear structure [francebelgiumcolombia] • Records: a way to group data together nations(france:parisbelgium:brusselscolombia:bogota) • Atoms: simple constants nations, france, paris, belgium, brussels, colombia, bogota • Numbers: integers (true integers) or floating point • All these data structures are first-class values • First class: Full range of operations to calculate with them • Values: They are constants (this is very important!)

  8. Lists • There two concepts of lists (open and closed) • Open Lists : lists that can hold new elements L=1|2|3|nil L=1|2|X Or with record notation L='|'(1 '|'(2 X)) • Closed Lists : lists that can not hold new elements. L=[1,2,3] L=1|2|3 Or with record notation L= '|'(1 '|'(2 3))

  9. Records • Records are structured compound entities. A record has a label and a fixed number or variable of components or arguments. tree(key: I value: Y left: LT right: RT) tree right key value left

  10. Records cont. Declare T in T = tree(key:1 value:bigleft:nilright:nil) {Browse T.key} %display 1 {Browse {Label T}} % displays tree {Browse {Arity T}} % [1 big nil nil] {Browse {Width T}} %4

  11. Functional programming & Concurency

  12. Functional programming • We use a simple functional language as the starting point (Actually it is a process calculus with procedures, but you don’t really need to know that yet) • This is a powerful way to begin a programming language • Functions are building blocks • This is called higher-order functional programming and it gives an enormous expressive power (the whole area of functional programming is based on this) • A function is a value in the language (like an integer), sometimes called a “lexically scoped closure”

  13. Functional programming Cont. • Here is a simple factorial function fun {Fact N} if N==0 then 1 else N*{Fact N-1} end end • We can use it to define combinations fun {Comb N K} {Fact N} div ({Fact K} * {Fact N-K}) end • //C++ code • int fact(int n){ • If(n==0){ • return 1; • }else { • return n*fact(n-1); • } • }

  14. Functional programming Cont. • Because Oz integers are true integers (arbitrary precision), this definition really works! • For example, {Comb 52 5} returns 2598960 (number of poker hands) • This does not work in C++ or Java since Comb will overflow (they only have integers modulo pow(2,32) ). • This shows why a language should have a simple semantics

  15. Pattern matching • Pattern matching takes apart a data structure by matching it against a corresponding shape • {Sum [1 2 3]} will try to match [1 2 3] first against nil and then against H|T • Matching [1 2 3] against nil fails (no way to make them equal) • Matching [1 2 3] against H|T succeeds and gives H=1 and T=2|3|nil • Remember that [1 2 3]=1|2|3|nil • H+{Sum T} becomes 1+{Sum [2 3]} • Final result is 1+(2+(3+0))=6

  16. Pattern matching fun {SumList L} case L of nil then 0 [] H|T then H+{SumList T} end end

  17. Higher-order programming • A function that returns a function that adds N to a number: fun {MakeAdder N} fun {$ X} N+X end end Add1={MakeAdder 1} • A function that takes a function F of two arguments and an argument N, and returns a function of one argument X that does F on N and X fun {MakeOneArg F N} fun {$ X} {F N X} end end Add1={MakeOneArg fun {$ X Y} X+Y end 1} (This Add1 function has memorized the values of F and N)

  18. Higher-order programming Cont. # higher order in python #!/usr/bin/python # Higher order in Python defmake_repeater(n): return lambda s: s * twice = make_repeater(2) print twice('word') # wordword print twice(5) #10 (Higher-order programming not in C++ but there is some libraries like FC++ Lambda which enable you to implement is)

  19. Concurrency • Concurrency is a language concept that allows to express when two computations are independent. • Concurrency should be easy to use It’s hard in the usual object-oriented languages • We will see just how easy concurrency can be • Let us add just one concept: the thread • Declarative concurrency • Message-passing concurrency • Asynchronous dataflow programming

  20. Dataflow computation • A calculation proceeds when its inputs become available thread Z=X+Y {Browse Z} end thread {Delay 1000} X=25 end thread {Delay 2000} Y=144 end • When this is executed, nothing is displayed right away • After 1000 milliseconds, X is bound Still nothing is displayed! • After 2000 milliseconds, Y is bound X+Y can proceed, and the Browse then displays 169

  21. Lazy programming and lazy evaluation • Lazy programming is a general concept of delaying the processing of a function or request until the results are needed. This concept has numerous applications, from the obvious to the obscure. Thinking in terms of lazy programming can help you rid your code of unneeded computation and restructure programs to be more problem-oriented. (http://www.ibm.com/developerworks/linux/library/l-lazyprog.html)

  22. Lazy functions • A lazy function is executed only when its result is needed funlazy {Fact N} if N==0 then 1 else N*{Fact N-1} end end F={Fact 100} % F is not needed yet Y=F+1 % F is needed • Lazy functions can be implemented with threads and WaitNeed proc {Fact N F} thread {WaitNeeded F} F=(if N==0 then 1 else N*{Fact N-1} end) end end Note that function syntax is short-hand for a procedure with one more argument that is bound to the output (“fun {Fact N}” is short-hand for “proc {Fact N F}”)

  23. State and objects

  24. Mutable state • Mutable state consists of variables that can be assigned multiple times • We have avoided them so far • Most languages use them from square one • We don’t, because they make life complicated, especially in concurrent programs! • The usual object-oriented techniques rely too much on them • Why do we need them? • Their main use is for achieving modularity • They don’t really have another use

  25. Modularity • A program is a set of building blocks (“components”) that communicate with each other • A component can have an internal memory (the mutable state) and a way to change that memory • If done right, changing the internal memory lets us update the component without changing the rest of the system • This is what we mean by modularity • Mutable state allows to change components and reconfigure the system • This is explained in detail in the textbook

  26. Object-oriented programming • Classes from First Principles • Objects from First Principles • Objects and Classes for Real • Classes as Modules • Parameterized Classes

  27. Classes from First Principles declare Counterlocal Attrs = [val]MethodTable = m(browse:MyBrowseinit:Initinc:Inc)   proc {Init M S Self}      init(Value) = M in       (S.val) := Value   end    proc {Inc M S Self}      X inc(Value)=M   in        X = @(S.val) (S.val) := X+Value   end    proc {MyBrowse M=browse S Self}      {Browse @(S.val)}   end in    Counter = {NewChunk c(methods:MethodTableattrs:Attrs)}end

  28. Objects from First Principles proc {NewObjectClassInitialMethod ?Object}   State Oin   State = {MakeRecord s Class.attrs}   {Record.forAll State proc {$ A} {NewCell _ A} end}proc {O M}      {Class.methods.{Label M} M State O}end   {O InitialMethod}   Object = Oend

  29. Objects and Classes for Real class Counter attrval   meth browse       {Browse @val}endmeth inc(Value)val := @val + Valueendmeth init(Value)val := Valueendend

  30. Classes as Modules class ListC from BaseObject   meth append(Xs Ys $)      case Xs      of nil then Ys      [] X|Xr then          X|(ListC , append(Xr Ys $))      end end   meth member(X L $)      {Member X L}    % This defined in List.oz   end    meth length(Xs $)      case Xs      of nil then 0      [] _|Xr then         (ListC , length(Xr $)) + 1      end end   meth nrev(Xs ?Ys)      case Xs      of nil then Ys = nil      [] X|Xr then Yr in ListC , nrev(Xr Yr)ListC , append(Yr [X] Ys)      end endend To create a module from the module specification one needs to create an object from the class. This is done by: declare ListM = {New ListCnoop}

  31. Parameterized Classes fun {SortClass Type}   class $ from BaseObject      meth qsort(Xs Ys)         case Xs         of nil then Ys = nil         [] P|Xr then S L in             {self partition(Xr P S L)}ListC, append({self qsort(S $)} P|{self qsort(L $)} Ys)         end end      meth partition(Xs P Ss Ls)         case Xs         of nil then Ss = nil Ls = nil         [] X|Xr then SrLr in             case Type,less(X P $) then                Ss = X|SrLr = Ls            else                Ss = Sr Ls = X|Lr            end             {self partition(Xr P SrLr)}         end endendend

  32. References • http://www.mozart-oz.org/ • http://www.ibm.com/developerworks/linux/library/l-lazyprog.html

  33. Thanks…

More Related