Download presentation
Presentation is loading. Please wait.
Published byJeff Syers Modified over 10 years ago
1
A Small Composition Language 11. Piccola
2
© 2003, Oscar Nierstrasz PS — Piccola 1.2 Applications = Components + Scripts Piccola layers Forms + Agents + Channels Wrapping components Status: semantics, types … Roadmap
3
© 2003, Oscar Nierstrasz PS — Piccola 1.3 Applications = Components + Scripts Piccola layers Forms + Agents + Channels Wrapping components Status: semantics, types … Roadmap
4
© 2003, Oscar Nierstrasz PS — Piccola 1.4 Applications = Components + Scripts Components both import and export services Scripts plug components together
5
© 2003, Oscar Nierstrasz PS — Piccola 1.5 Towards a Composition Language Scripting languages Configure applications from components Coordination languages Configure applications from distributed services ADLs Specify architectural styles Glue languages Adapt components
6
© 2003, Oscar Nierstrasz PS — Piccola 1.6 Applications = Components + Scripts Piccola layers Forms + Agents + Channels Wrapping components Status: semantics, types … Roadmap
7
© 2003, Oscar Nierstrasz PS — Piccola 1.7 Piccola agents compose and coordinate external components Piccola — A Small Composition Language
8
© 2003, Oscar Nierstrasz PS — Piccola 1.8 Piccola Layers Applications components + scripts Compositional styles streams, events, GUIs,... Standard libraries basic coordination abstractions, built-in types Piccola operator syntax, introspection, component wrappers Piccola-calculus forms, agents, channels, services
9
© 2003, Oscar Nierstrasz PS — Piccola 1.9 Applications = Components + Scripts Piccola layers Forms + Agents + Channels Wrapping components Status: semantics, types … Roadmap
10
© 2003, Oscar Nierstrasz PS — Piccola 1.10 Forms + Agents + Channels Forms embody structure —immutable, extensible records —they unify components, services and namespaces Agents embody behaviour —concurrently executing scripts —they unify concurrency and composition Channels embody state —mailboxes for communicating agents —unify synchronization and communication.
11
© 2003, Oscar Nierstrasz PS — Piccola 1.11 A form consists of a sequence of bindings: A script composes components by invoking services High-level connectors hide details of object wiring. Piccola in a Nutshell helloForm =# a form text = "hello world " # a binding do : println text# a service helloForm =# a form text = "hello world " # a binding do : println text# a service makeFrame title = "AWT Demo " component = Button.new(helloForm) ? ActionPerformed helloForm.do
12
© 2003, Oscar Nierstrasz PS — Piccola 1.12 Hello World
13
© 2003, Oscar Nierstrasz PS — Piccola 1.13 Piccola Syntax Values are bound with “=”, services with “:” a = 1# binding b = (x=1, y=2)# nested binding c = (b, z=3)# extension d = c.z# projection f: a# service (no arg) println f()# application (empty form) g u: u.x + u.y# service println g(b)# application h u v: u + v# curried service println (h 1 2)# curried application a = 1# binding b = (x=1, y=2)# nested binding c = (b, z=3)# extension d = c.z# projection f: a# service (no arg) println f()# application (empty form) g u: u.x + u.y# service println g(b)# application h u v: u + v# curried service println (h 1 2)# curried application 133133 133133
14
© 2003, Oscar Nierstrasz PS — Piccola 1.14 Indentation Complex forms can be expressed by multiple indented lines b =# nested form x = 1 y = 2 println# invoke println with arg… g# invoke g with arg … b# argument to g y=b.x# extended with new binding b =# nested form x = 1 y = 2 println# invoke println with arg… g# invoke g with arg … b# argument to g y=b.x# extended with new binding Cf. Haskell and Python 22 22
15
© 2003, Oscar Nierstrasz PS — Piccola 1.15 Fixpoints Recursive services and forms are specified with the def keyword def fib n:# naïve fibonacci if n<=2 then: 1 else: fib(n-1) + fib(n-2) def fib n:# naïve fibonacci if n<=2 then: 1 else: fib(n-1) + fib(n-2) Note that if is a curried service …
16
© 2003, Oscar Nierstrasz PS — Piccola 1.16 Control structures Control structures are defined as standard Piccola services if bool cases: 'cases=(then:(),else:(),cases) bool.select(true=cases.then, false=cases.else)() if bool cases: 'cases=(then:(),else:(),cases) bool.select(true=cases.then, false=cases.else)()
17
© 2003, Oscar Nierstrasz PS — Piccola 1.17 Local bindings and defaults Bindings are made private with the ' operator Defaults are defined by extension if bool cases: 'default =# define defaults then:() else:() 'cases = (default, cases)# set defaults 'doit = bool.select# select service true = cases.then false = cases.else doit()# invoke it if bool cases: 'default =# define defaults then:() else:() 'cases = (default, cases)# set defaults 'doit = bool.select# select service true = cases.then false = cases.else doit()# invoke it
18
© 2003, Oscar Nierstrasz PS — Piccola 1.18 Agents and Channels You can start a concurrent agent by invoking run, passing it a form with a do service. A channel is a mailbox for communicating with agents: run do: … # do something time-consuming run do: … # do something time-consuming c = newChannel()# create a channel run (do: println c.receive())# start an agent c.send("hello!")# send it a message c = newChannel()# create a channel run (do: println c.receive())# start an agent c.send("hello!")# send it a message hello!
19
© 2003, Oscar Nierstrasz PS — Piccola 1.19 Infix and prefix operators Services may be defined as infix or prefix operators: newVar X: 'c = newChannel() 'c.send(X) *_: 'val=c.receive() 'c.send(val) val _<-_ X: 'val=c.receive() 'c.send(X) X newVar X: 'c = newChannel() 'c.send(X) *_: 'val=c.receive() 'c.send(val) val _<-_ X: 'val=c.receive() 'c.send(X) X x = newVar(1) println (*x) 1 println (x<-2) 2 x = newVar(1) println (*x) 1 println (x<-2) 2 NB: Without agents and channels, Piccola is purely functional
20
© 2003, Oscar Nierstrasz PS — Piccola 1.20 Example: Futures Agents and channels can be used to define common coordination abstractions, like futures, semaphores, readers/writers synchronization policies and so on … A “future” is a ticket for a value that is still being computed: future task: 'result = newChannel() 'run(do: result.send(task.do())) result.receive future task: 'result = newChannel() 'run(do: result.send(task.do())) result.receive f12 = future(do: fib(12)) println f12() 144 f12 = future(do: fib(12)) println f12() 144
21
© 2003, Oscar Nierstrasz PS — Piccola 1.21 Explicit namespaces Everything is a form, including the current namespace, known as root. Is just sugar for: 'x=1 root=(root,x=1)
22
© 2003, Oscar Nierstrasz PS — Piccola 1.22 Reflection Piccola provides various built-in services to inspect and manipulate forms countLabels f: 'count = newVar(0) 'forEachLabel# a standard service form = f do L: count <- 1 + *count *count countLabels f: 'count = newVar(0) 'forEachLabel# a standard service form = f do L: count <- 1 + *count *count println (countLabels root) 75 println (countLabels root) 75
23
© 2003, Oscar Nierstrasz PS — Piccola 1.23 Applications = Components + Scripts Piccola layers Forms + Agents + Channels Wrapping components Status: semantics, types … Roadmap
24
© 2003, Oscar Nierstrasz PS — Piccola 1.24 Language bridging Piccola does not provide booleans, numbers or strings — instead, these are forms that wrap Host language objects as components —Host objects are automatically wrapped as forms when imported to Piccola, and unwrapped when Host services are invoked —Special wrappers may be registered to adapt the interfaces of selected components
25
© 2003, Oscar Nierstrasz PS — Piccola 1.25 Wrapping AWT components Java AWT Frames are automatically wrapped to add a ? connector: def wrapComponent X:... _?_ aHandler aClosure:... wrapper.frame X: wrapComponent X... registerWrapper "java.awt.Frame" wrapper.frame def wrapComponent X:... _?_ aHandler aClosure:... wrapper.frame X: wrapComponent X... registerWrapper "java.awt.Frame" wrapper.frame
26
© 2003, Oscar Nierstrasz PS — Piccola 1.26 Applications = Components + Scripts Piccola layers Forms + Agents + Channels Wrapping components Status: semantics, types … Roadmap
27
© 2003, Oscar Nierstrasz PS — Piccola 1.27 Other features Module system based on explicit namespaces Anonymous services (lambdas) Dynamic scoping on demand A simple testing framework Lists, Sets and Maps
28
© 2003, Oscar Nierstrasz PS — Piccola 1.28 Piccola Semantics The semantics of Piccola is defined using a process calculus with first-class namespaces
29
© 2003, Oscar Nierstrasz PS — Piccola 1.29 How forms support composition
30
© 2003, Oscar Nierstrasz PS — Piccola 1.30 Results so far Piccola implementations for Java and Squeak —Sophisticated language bridging —Efficient partial evaluation —Various experimental composition styles Formal semantics —π calculus with first-class namespaces —Limited reasoning about styles and composition Publications and software: www.iam.unibe.ch/~scgwww.iam.unibe.ch/~scg
31
© 2003, Oscar Nierstrasz PS — Piccola 1.31 Explicit components, connectors & styles Type-checking provided and required services Reasoning about styles and compositions Adapting/reengineering existing services What’s missing?
32
© 2003, Oscar Nierstrasz PS — Piccola 1.32 Dynamic composition of ubiquitous services Service discovery and negotiation Reconfiguration validation and run-time monitoring New, fine-grained models of components, composition and evolution Component models for mobile, pervasive and embedded systems The future of composition?
33
© 2003, Oscar Nierstrasz PS — Piccola 1.33 License > http://creativecommons.org/licenses/by-sa/2.5/ Attribution-ShareAlike 2.5 You are free: to copy, distribute, display, and perform the work to make derivative works to make commercial use of the work Under the following conditions: Attribution. You must attribute the work in the manner specified by the author or licensor. Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. For any reuse or distribution, you must make clear to others the license terms of this work. Any of these conditions can be waived if you get permission from the copyright holder. Your fair use and other rights are in no way affected by the above. Attribution-ShareAlike 2.5 You are free: to copy, distribute, display, and perform the work to make derivative works to make commercial use of the work Under the following conditions: Attribution. You must attribute the work in the manner specified by the author or licensor. Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. For any reuse or distribution, you must make clear to others the license terms of this work. Any of these conditions can be waived if you get permission from the copyright holder. Your fair use and other rights are in no way affected by the above.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.