Dylan makroer / JSE Andreas Kirkeskov Carlsen 27. april 2005.

Slides:



Advertisements
Lignende præsentationer
Forskning, formidling og andre færdigheder
Advertisements

Social media marketing: Position of the Nordic Consumer Ombudsmen EU Consumer Summit 1 and 2 April 2014 Henrik Øe Consumer Ombudsman Denmark.
Ordstilling Ordstilling er bl.a. rækkefølgen af grundled og udsagnsled i en sætning. Hvis grundleddet står før udsagnsleddet, taler vi om ligefrem ordstilling.
Velkommen til Softwarekonstruktion
Test First Development
E-bøger gennem PrioInfo - oversigt v/ Claes Olsson.
Magtteori I 7. September 2005.
Sprog, sprog og sprogere Foreningen for tosprogede småbørns vilkår Vejle 20. marts 2012 J. Normann Jørgensen,
Selve objektet versus referencen til objektet Nedarvning
The Utility of Organisational Ethnography Konklusion. Neyland.
Artikel præsentation Kenneth Pedersen DESIGN SCIENCE IN INFORMATION SYSTEMS RESEARCH Hevner, A. R., March, S. T., Jinsoo, P. and Ram, S. (2004)
09 – Arv og polymorfi i java
Arv Idéen i arv et at kunne genbruge gennem generalisering
Hex Oplæg til eksamen 28/ Dagsorden Introduktion Præsentation af spillet Vores graf MinimaxDFS/BFS Disjoint sets.
Kvalitet i almindelighed og i relation til softwareudvikling.
NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#
Niels Pein Regelopdatering Niels Pein Udpluk af nyhederne Definitioner Regler Decisions.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
Hallo... Jeg ville bare se om du var tilstede... I just wanted to see if you were there...
Folksonomier: når brugerne samarbejder Eller Folksonomier: Når samarbejde mellem brugere er indlejret i informationssystemerne.
ØVELSE 3 BIDG-E2013 · Interaktionsdesign: genrer og kontekster.
MSBuild & Team Build i C#/C++ solutions VSTS ERFA d. 25 November.
FEN Sprog1 Lidt om sprog Definition: Et sprog over et endeligt alfabet  (sigma) er en mængde af strenge dannet af tegn fra . Eksempel: Lad.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
Electric power is electric particles moving through metal, semiconductor or graphite and special fluids (electrolysis). Some kind of gas are able to conduct.
Ingeniørhøjskolen i Århus Slide 1 Newton approximation ”Oversæt” til algoritme - Step 5: Skriv kode - Step 4: Skriv pseudokode - Step 3: Specificér pre-
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
Billeder. grænser. leg. eksamen specialeafhandling 24. juni 2005 it-universitetet stabilitet. mobilitet.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Paradigmer i Programmering 1. Program for idag : Funktioner og udtryk i SML : Øvelse : Frokost – 14.00: Deklarative.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
Institut for Sprog, Kultur og Æstetik Engelsk, semester, Tekstanalyse og -historie Jens Kirk Session One: "An Introduction to the Analysis,
Intro Siden sidst: evaluering på opgaver og virtuel kursus.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Saint Ambrose High School. Cut cylinders and cones – Standard Grade If you are sitting an SQA Credit paper in Graphic Communication, you will be required.
3. time Her beskæftiger vi os med John F. Sowas forklaring af erfaringsviden. John F. Sowa.
Deadlock Definition deadlock (baglås) er en tilstand som en mængde af processer kan være i en mængde processer er i deadlock hvis alle processerne står.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
T X Makroer Andreas Kirkeskov Carlsen Macro-seminar, 10. maj 2005 E.
 Jens Bennedsen 2002Objektorienteret systemudvikling GRASP mønstre Basale ansvarsplaceringsregler.
(let ((title ’(Scheme Macros)) title) Syntaktiske transformationer og en masse parenteser.
Type analyse i FunCalc / CoreCalc Baggrund og kontekst Formål Designovervejelser → løsning /arkitektur Strategi for implementering og afprøvning Resultater.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.
Objekt-relationel DBMS1 4.5 The Object-Relational Model 9.4 User-Defined Types in SQL 9.5 Operations on Object-Relational Data Ullman: Object-Relational.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
23. juni 2015 Det Semantiske Web Mads Carlsen. 23. juni 2015 Problemer med det nuværende Internet Ingen semantiske specifikationer. Søgning giver mange.
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
6.1 Polygons Convex verse Concave. Definition of a Polygon A polygon is a figure on a plane with three or more sides that meet at a vertex.
Learning Set 3 : Lesson 1 : Slide 1 Proteins Move Based on Size lactase tyrosinase.
Omsætning af en model til en RDB Jesper Tørresø DAB1 F Marts 2008.
Underoverskrift 17 pkt bold hvid Maks. 2 linjer med respekt for evt logo Indsæt billede >Klik på billedikonet og indsæt billede Efter indsættelse >Højreklik.
WebApi service part 2 Routning og Action Simpel test-client (javascript) Session og Application data.
Gør dig parat til at stemme
Compositional Design Principles “SemiCiv”
Software Testing Software testing.
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Algoritmer og Datastrukturer 1
Simpel test-client (javascript) Session og Application data
λ-calculus and church encodings
Præsentationens transcript:

Dylan makroer / JSE Andreas Kirkeskov Carlsen 27. april 2005

Dylan makroer Hvad er Dylan makroer? Hvorfor Dylan makroer?

Dylan makroer Hvad er Dylan makroer? Hvorfor Dylan makroer? Dylan makroer er omskrivningsregler (rewrite rules) bestående af patterns og pattern-variables. Dylan makroer tillader programmører at udvide Dylan sproget, f.eks. ved at tillade nye kontrolstrukturer og definitioner.

Dylan makroer Makroer defineres ved: define macro konstant-modul-binding makro-definition

Dylan makroer ”Dylan has three kinds of macros:

Dylan makroer ”Dylan has three kinds of macros: definition macros, which extend the available set of definitions;

Dylan makroer ”Dylan has three kinds of macros: definition macros, … statement macros, which extend the available set of statements;

Dylan makroer ”Dylan has three kinds of macros: definition macros, … statement macros, … function macros, which syntactically resemble function calls but are more flexible.”

Dylan makroer Definitionsmakroer?

Dylan makroer Definitionsmakroer? Venstre-side-pattern’et skal defineres som define modifiers opt DEFINE-BODY-WORD body-fragment opt definition-tail eller define modifiers opt DEFINE-LIST-WORD list-fragment opt Konstant-modul-bindingen skal bestå af DEFINE-BODY-WORD eller DEFINE- LIST-WORD og suffix’et ”-definer”.

Dylan makroer Definitionsmakroer? Eksempel 1 : define macro named-color-definer { define named-color ?:name = ( ?red:expression, ?green:expression, ?blue:expression ) } => { *default-named-color-table*[?#”name”] := make-rgb-color( ?red / 255.0, ?green / 255.0, ?blue / ) } end macro; bruges som: define named-color silver = ( 204, 204, 204 ) og ekspanderer til *default-named-color-table*[ #”silver” ] := make-rgb-color( 0.8, 0.8, 0.8 ) 1 Fra

Dylan makroer Statementmakroer?

Dylan makroer Statementmakroer? Venstre-side-pattern’et skal defineres som BEGIN-WORD body-fragment opt end-clause Konstant-modul-bindingen kan være hvad som helst, men det er (så vidt jeg kan se) generelt det samme som BEGIN-WORD.

Dylan makroer Statementmakroer? Eksempel: define macro color-switch { color-switch ( ?test:expression ) ?:color-switch-body end color-switch } => { begin let temp = ?test; ?color-switch-body end } color-switch-body: { (?:color-list) => ?:body … } => { if (member?(temp, ?color-list)) ?body else … end if } { otherwise ?:body } => { ?body } { } => { #f } color-list: { ?:name, … } => { pair( color(?:name), … ) } { } => { empty-list } end macro; bruges som: color-switch ( color(red) ) (red green blue) => 1; otherwise 2; end color-switch; og ekspanderer til begin let temp = color(red); if (member?(temp, list(color(red), color(green), color(blue)) 1; else 2; end if; end;

Dylan makroer Funktionsmakroer?

Dylan makroer Funktionsmakroer? Venstre-side-pattern’et skal defineres som FUNCTION-WORD ( body-fragment opt ) Konstant-modul-bindingen kan være hvad som helst, men det er (så vidt jeg kan se) generelt det samme som FUNCTION-WORD.

Dylan makroer Funktionsmakroer? Eksempel: define macro color { color ( ?:name ) } => { *default-named-color-table*[?#”name”] } bruges som: color(blue) og ekspanderer til *default-named-color-table*[ #”blue” ]

Dylan makroer Dylan makroer er

Dylan makroer Dylan makroer er fuldt programmerbare (Turing-komplette)

Dylan makroer Fuldt programmerbare - Lambda-calculus kan implementeres i Dylan makroer define macro equal { equal([], []) } => { true } { equal([?:expr], []) } => { false } {equal([], [?:expr]) } => { false } {equal([?a:expr], [?b:expr])} => { equal(?a, ?b) } end macro; define macro test { test(true, ?cons:expr, ?alt:expr) } => { ?cons } { test(false, ?cons:expr, ?alt:expr) } => { ?alt } end macro; define macro lookup { lookup(?n:expr; empty) } => { Crash } { lookup(?n:expr; ?m:expr, ?denot:expr, ?r:*) } => { test(equal(?n, ?m), ?denot, lookup(?n; ?r)) } end macro; define macro eval { eval(var(?n:expr); ?r:expr) } => { lookup(?n; ?r) } { eval(lambda(?n:expr, ?b:expr); ?r:*) } => { closure(?n, ?b, ?r) } { eval(app(closure(?n1:expr, ?b1:expr, ?r1:*), closure(?n2:expr, ?b2:expr, ?r2:*)); ?r) } => { eval(?b1; ?n1, closure(?n2, ?b2, ?r2), ?r1) } { eval(app(?f:expr, ?arg:expr); ?r:*) } => { eval(app(eval(?f; ?r), eval(?arg; ?r)); ?r) } end macro; Fra

Dylan makroer Dylan makroer er fuldt programmerbare (Turing-komplette) ikke AST-manipulerende, men symbol- træs-manipulerende (a la lisp) –Kender ikke til sprogkonstruktioner Kan derfor ikke give fejlmeddelelser på macro- expansion-time, men først på compile-time

Dylan makroer Symbol-træs-manipulerende – begge de følgende eksempler er lovlige: define macro legal { legal (?test:expression) ?:body end legal } => { if (?test) ?body end if } end macro; define macro also-legal { also-legal (?test:expression) ?:body end also-legal } => { () (if) () (?test) () (?body) () } end macro; men kun den første ekspanderer til lovlig kode.

Dylan makroer Dylan makroer er fuldt programmerbare (Turing-komplette) ikke AST-manipulerende, men symbol- træs-manipulerende (a la lisp) –Kender ikke til sprogkonstruktioner Kan derfor ikke give fejlmeddelelser på macro- expansion-time, men først på compile-time hygiejniske –Dog med mulighed for at tilsidesætte dette

Dylan makroer Hygiejniske -”each named value reference in a macro expansion means the same thing as it meant at the place in the original source code from which it was copied into the macro expansion.”

JSE JSE er et makrosystem til Java baseret på Dylan makroer. Da definitionsmakroer ikke giver mening i Java- sammenhæng er disse ikke en del af JSE. Makroer kan benytte alle dele af Java-sproget

JSE På makro-ekspansionstid opbygges først et SST – et ”skeleton syntax tree”

JSE På makro-ekspansionstid opbygges først et SST – et ”skeleton syntax tree” Dette kan ses som en symbol- repræsentation af javakode i stil med quote-opbyggede træer i lisp-varianter.

JSE På makro-ekspansionstid opbygges først et SST – et ”skeleton syntax tree” Dette kan ses som en symbol- repræsentation af javakode i stil med quote-opbyggede træer i lisp-varianter. Som intern repræsentation anvendes Fragment-objekter.

JSE For at lette arbejdet med makroer er et quote-system bygget oven på: #{ } svarer til ´( ) i lisp (quasiquote) ? svarer til, i lisp (unquote og unquote-splicing)

JSE JSEs ekspansionsmekanisme er bygget op i 2 faser: Først ekspanderes og kompileres makrodefinitionerne, dernæst makroanvendelserne ved hjælp af de kompilerede makrodefinitioner.

JSE JSE tillader programmøren at glemme den abstrakte syntax og kun være opmærksom på den konkrete syntax modsat Weise og Crew’s makrosystem JSE giver fuld adgang til Java’s konstruktioner og datastrukturer modsat Brabrand/Schwartzbach’s makrosystem, som til gengæld sikrer lovlige ekspansioner