Η γλώσσα Fortress. Γιώργος Κορφιάτης. Ερευνητικά Θέματα Υλοποίησης Γλωσσών Προγραμματισμού, Εργαστήριο Λογισμικού, ΕΜΠ ...

Σχετικά έγγραφα
Εισαγωγή στην Γλώσσα Προγραμματισμού Python. 12/10/16 1

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Συναρτησιακός Προγραμματισμός 2008 Λύσεις στο Δεύτερο Φύλλο Ασκήσεων

ΚΥΡΙΑ ΜΟΝΤΕΛΑ ΓΛΩΣΣΩΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Java sessions. Part 1 - Βασικά έννοιες - μέθοδοι

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Εισαγωγή στον Αντικειμενοστρέφή Προγραμματισμό Διάλεξη #12

Πληρουορική Γ Γσμμασίοσ

Βασικά Στοιχεία της Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Υπάρχουσες κλάσεις και αντικείμενα στην Java Strings Wrapper Classes Δομές

Αρχές Τεχνολογίας Λογισμικού Εργαστήριο

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Το πρόγραμμα HelloWorld.java. HelloWorld. Κλάσεις και Αντικείμενα (2) Ορισμός μιας Κλάσης (1) Παύλος Εφραιμίδης pefraimi <at> ee.duth.

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Wrapper Classes, Abstract Classes and Interfaces

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Βασικά Στοιχεία της Java

Βασικές Ασκήσεις από τα Εργαστήρια της PYTHON (εβδομάδα 6 & 7) Πέμπτη ΠΚ2 11:15, 13:15, 15:15, 17:15 και 19:15

Εισαγωγή στην επιστήμη των υπολογιστών

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

Παύλος Εφραιµίδης. Java. Κληρονοµικότητα

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

class object Database Database Item Item [sub-typing and polymorphism] MusicCD Video MusicCD Video

Λογισµικό (Software SW) Γλώσσες

Τι σημαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγμα επισημειώσεων τύπων στην ML. Επισημειώσεις τύπων (type annotations) f : A B σημαίνει:

Γλώσσες προγραµµατισµού. Ανάπτυξη Συστηµάτων Λογισµικού

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

Outline. 4 Object-Oriented Programming

Γλωσσική Τεχνολογία. Object-Orientation in Python

Κεφάλαιο 3.1, : Συναρτήσεις I. (Διάλεξη 11)

(Διαφάνειες Νίκου Βιδάκη)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Η γλώσσα ML σε βάθος. Γλώσσες Προγραμματισμού Ι. Διδάσκοντες: Νικόλαος Παπασπύρου, Κωστής Σαγώνας

Μεταγλωττιστές. Γιώργος Δημητρίου. Μάθημα 8 ο. Πανεπιστήμιο Θεσσαλίας - Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Αντικειμενοστραφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και αντικείμενα στην Java Strings Πίνακες

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

Εργαστήριο 6 Ασκήσεις: To Εργαλείo Ωφελιμότητας Awk Προγραμματισμός Κελύφους Bash

Αντικειμενοστρεφής Προγραμματισμός

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

Γραφικά υπολογιστών Εργαστήριο 1 Εισαγωγή στην Python

Runtime Checking (1/3) Runtime Checking (2/3) Runtime Checking (3/3) ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο

Εισαγωγή στον Προγραμματισμό

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Μεθόδων Επίλυσης Προβλημάτων

HelloWorld. Παύλος Εφραιμίδης. Java Το πρόγραμμα HelloWorld 1

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Αντικειμενοστρεφής Προγραμματισμός

Σημειωματάριο Δευτέρας 9 Οκτ. 2017

Πληροφορική 2. Γλώσσες Προγραμματισμού

JAVASCRIPT 1. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Π. Αγγελάτος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Οντοκεντρικός Προγραμματισμός

Αναδρομή Ανάλυση Αλγορίθμων

Η γλώσσα ML σε βάθος. Τι σημαίνουν οι τύποι συναρτήσεων στην ML. Παράδειγμα επισημειώσεων τύπων στην ML. Επισημειώσεις τύπων (type annotations)

Πολλές φορές έχουμε πολλές μεταβλητές του ίδιου τύπου που συσχετίζονται και θέλουμε να τις βάλουμε μαζί.

Προγραμματισμός Αναδρομή

Προγραμματισμός Αναδρομή

Συναρτήσεις και διαδικασίες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΕΠΛ 012. JavaScripts

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Αφαίρεση στον FP. Πολυμορφισμός Συναρτήσεις υψηλότερης τάξης Οκνηρός και Άπληστος Υπολογισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

HY340, 2009 Α. Σαββίδης Slide 2 / 143. HY340, 2009 Α. Σαββίδης Slide 3 / 143. HY340, 2009 Α. Σαββίδης Slide 4 / 143

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Υπολογιστικά Συστήματα

ιαφάνειες παρουσίασης #3

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

1 ο ΕΡΓΑΣΤΗΡΙΟ ΣΗΜΑΤΑ & ΣΥΣΤΗΜΑΤΑ

Οντοκεντρικός Προγραμματισμός

Παράλληλη Επεξεργασία

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

Εισαγωγή σε αντικειμενοστραφή concepts. Και λίγη C#

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναδροµικές Συναρτήσεις Χειµερινό Εξάµηνο 2014

Οντοκεντρικός Προγραμματισμός

Πανεπιστήμιο Πελοποννήσου. Σχολή Θετικών Επιστημών & Τεχνολογίας. Τμήμα Επιστήμης & Τεχνολογίας Υπολογιστών. Προγραμματισμός Ι Εργαστήριο

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Άσκηση 1 (α) Να διατυπώσετε την πιο κάτω λογική έκφραση στη Visual Basic κάνοντας χρήση μεταβλητών:

Αντικειμενοστραφής Προγραμματισμός

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 9ο Γλώσσες Προγραμματισμού

11. Συναρτήσεις (Μέρος Ι)

Εισαγωγή στο Συναρτησιακό Προγραμματισμό

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός PASCAL

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

3. Εκφράσεις και έλεγχος ροής

Transcript:

Η γλώσσα Fortress Γιώργος Κορφιάτης Εργαστήριο Λογισμικού, ΕΜΠ Ερευνητικά Θέματα Υλοποίησης Γλωσσών Προγραμματισμού, 2009-10

Η γλώσσα Fortress Νέα γλώσσα από τη Sun Για υπολογισμούς υψηλής απόδοσης Προγραμματισμός σε υψηλό επίπεδο Γενικής χρήσης, έμφαση σε επιστημονικές εφαρμογές (εξού όνομα που θυμίζει Fortran...) http://projectfortress.sun.com

Βασικά χαρακτηριστικά Ευρεία υποστήριξη παραλληλισμού (implicit) Σύνταξη βασισμένη στα μαθηματικά Μαθηματικές έννοιες (διανύσματα, πίνακες, σύνολα, ) Στατικό typing με type inference Αντικείμενα και traits Στοιχεία συναρτησιακού προγραμματισμού Επεκτασιμότητα

Ένα πρώτο παράδειγμα component Factorial export Executable factorial(n: Z32) = if 0 n 1 then 1 elif n > 1 then n ( factorial(n 1) ) else fail Non-negative integer expected. run() = println(factorial 5)

Σύνταξη sum : RR64 : = 0 f o r k< 1: n do a [ k ] := (1 alpha ) b [ k ] sum += c [ k ] x^k sum: R64 := 0 for k 1 : n do a k := (1 α)b k sum += c k x k ελληνικοί κ.α χαρακτήρες unicode δείκτες, εκθέτες μεταβλητές σε πλάγια συμπαράθεση όρων (juxtaposition) υπερφορτωμένη (πολλαπλασιασμός αριθμών, εφαρμογή συνάρτησης σε όρισμα, string concatenation) 1:n γεννήτρια τιμών από 1 ως n

Σύνταξη sum : RR64 : = 0 f o r k< 1: n do a [ k ] := (1 alpha ) b [ k ] sum += c [ k ] x^k sum: R64 := 0 for k 1 : n do a k := (1 α)b k sum += c k x k ελληνικοί κ.α χαρακτήρες unicode δείκτες, εκθέτες μεταβλητές σε πλάγια συμπαράθεση όρων (juxtaposition) υπερφορτωμένη (πολλαπλασιασμός αριθμών, εφαρμογή συνάρτησης σε όρισμα, string concatenation) 1:n γεννήτρια τιμών από 1 ως n

Παραλληλία Το πρόγραμμα έχει έμμεσα παραλληλία όπου είναι δυνατόν Πρέπει ρητά να σειριοποιηθεί όπου χρειάζεται πχ. ορίσματα συναρτήσεων αποτιμώνται παράλληλα το ίδιο και για το for loop for i 1 : 5 do print (i ) print (i ) Output 5 1 5 1 4 4 2 2 3 3 for i sequential(1 : 5) do print (i ) print (i ) Output 1 1 2 2 3 3 4 4 5 5

Παραλληλία Το πρόγραμμα έχει έμμεσα παραλληλία όπου είναι δυνατόν Πρέπει ρητά να σειριοποιηθεί όπου χρειάζεται πχ. ορίσματα συναρτήσεων αποτιμώνται παράλληλα το ίδιο και για το for loop for i 1 : 5 do print (i ) print (i ) Output 5 1 5 1 4 4 2 2 3 3 for i sequential(1 : 5) do print (i ) print (i ) Output 1 1 2 2 3 3 4 4 5 5

Παραλληλία Το πρόγραμμα έχει έμμεσα παραλληλία όπου είναι δυνατόν Πρέπει ρητά να σειριοποιηθεί όπου χρειάζεται πχ. ορίσματα συναρτήσεων αποτιμώνται παράλληλα το ίδιο και για το for loop for i 1 : 5 do print (i ) print (i ) Output 5 1 5 1 4 4 2 2 3 3 for i sequential(1 : 5) do print (i ) print (i ) Output 1 1 2 2 3 3 4 4 5 5

Παραλληλία Η υλοποίηση αποφασίζει αν θα αποτιμήσει μία έκφραση παράλληλα ή σειριακά...ανάλογα με τους διαθέσιμους πόρους Προσέγγιση work stealing, όπως στη Cilk fib(n: Z32): Z32 = case n of 0 0 1 1 else fib(n 1) + fib(n 2)

Παραλληλία Η υλοποίηση αποφασίζει αν θα αποτιμήσει μία έκφραση παράλληλα ή σειριακά...ανάλογα με τους διαθέσιμους πόρους Προσέγγιση work stealing, όπως στη Cilk fib(n: Z32): Z32 = case n of 0 0 1 1 else fib(n 1) + fib(n 2)

Παραλληλία Transactional memory με ατομικές εκφράσεις factorial(n: Z32) = do var result: Z32 = 1 for i 1 : n do atomic result := result i result

Λίστες trait List E exts { AnyList, LexicographicOrder List E, E } getter extractleft(): Maybe [ (E, List E ) ] getter extractright(): Maybe [ (List E, E) ] getter reverse(): List E opr ( self, other: List E ) : List E addleft(e : E): List E addright(e : E): List E take(n: Z32): List E split(): ( List E, List E ) zip F ( other: List F ) : Generator [ (E, F) ] filter(p: E Boolean): List E

import List.{...} Παράλληλη προσπέλαση λίστας nohello ( xs: List String ) : List String = case xs of 0 xs 1 if xs 0 = Hello then String else xs else (ys, zs) = xs.split() nohello(ys) nohello(zs) strings = String Hello, there, how, are, you,? run() = println (nohello strings)

Παράλληλη προσπέλαση λίστας nohello ( xs: List String ) : List String = do r : List String := String for x xs do if x Hello then atomic r = String x r Output < are, how, there, you,? >

Σειριοποίηση της προσπέλασης nohello ( xs: List String ) : List String = do r : List String := String for x seq(xs), x Hello do r = String x r Output < there, how, are, you,? >

List Comprehension nohello ( xs: List String ) : List String = String x x xs, x Hello

Κατανομή δεδομένων χρήσιμο σε μεγάλα μηχανήματα για καλύτερη απόδοση ιεραρχία από regions δεδομένων υπολογισμός έχει φθηνή πρόσβαση σε κοντινά regions κατανομή παρέχεται αυτόματα από constructors της γλώσσας όπως generators

Contracts component Fibonacci export Executable fib(n: Z32): Z32 requires { n 0 } = case n of 0 0 1 1 else fib(n 1) + fib(n 2) run() = println ( fib ( 1) ) Η συνθήκη αποτιμάται πριν την κλήση F o r tress e r r o r appears below. / Fibonacci. f s s :3:31~37: C a l l e r V i o l a t i o n

Contracts component Fibonacci export Executable fib(n: Z32): Z32 requires { n 0 } = case n of 0 0 1 1 else fib(n 1) + fib(n 2) run() = println ( fib ( 1) ) Η συνθήκη αποτιμάται πριν την κλήση F o r tress e r r o r appears below. / Fibonacci. f s s :3:31~37: C a l l e r V i o l a t i o n

Traits Κάτι σαν τα interfaces στη Java Μπορεί να είναι πολυμορφικό (generic) Πολλαπλή κληρονομικότητα Μπορεί να περιέχει ορισμούς μεθόδων Δεν περιέχει πεδία trait List E exts { AnyList, LexicographicOrder List E, E } excludes { Number, HasRank, String } getter extractleft(): Maybe [ ] (E, List E ) getter reverse(): List E =...

Traits Κάτι σαν τα interfaces στη Java Μπορεί να είναι πολυμορφικό (generic) Πολλαπλή κληρονομικότητα Μπορεί να περιέχει ορισμούς μεθόδων Δεν περιέχει πεδία trait List E exts { AnyList, LexicographicOrder List E, E } excludes { Number, HasRank, String } getter extractleft(): Maybe [ ] (E, List E ) getter reverse(): List E =...

Αντικείμενα Κάτι σαν τις κλάσεις στη Java Μπορεί να είναι πολυμορφικό (generic) Πολλαπλή κληρονομικότητα Περιέχει ορισμούς μεθόδων και πεδία Δεν μπορεί να επεκταθεί (ext) object ArrayList E ( underlying, firstused, canextleft, firstunused, canextright) exts { List E, DelegatedIndexed E, Z32 } getter size(): Z32 = self getter extractleft(): Maybe [ (E, ArrayList E ) ] =...

Αντικείμενα Κάτι σαν τις κλάσεις στη Java Μπορεί να είναι πολυμορφικό (generic) Πολλαπλή κληρονομικότητα Περιέχει ορισμούς μεθόδων και πεδία Δεν μπορεί να επεκταθεί (ext) object ArrayList E ( underlying, firstused, canextleft, firstunused, canextright) exts { List E, DelegatedIndexed E, Z32 } getter size(): Z32 = self getter extractleft(): Maybe [ (E, ArrayList E ) ] =...

Ιεραρχία τύπων trait Ast comprises { Type, Expr } getter asstring(): String trait Type exts Ast comprises { StringType, IntegerType } excludes Expr object StringType exts Type object IntegerType exts Type trait Expr exts Ast comprises { Val, BinOpApp } excludes Type trait Val exts Expr comprises { Str, Num } getter asvalue(): Object object Str(string: String) exts Val getter asstring() = string getter asvalue() = string

Ιεραρχία τύπων

Growing a language... Μικρός πυρήνας της γλώσσας Εκτεταμένες βιβλιοθήκες Πολλοί τύποι και constructs (for) ορίζονται σε βιβλιοθήκη trait Z32 exts { Z64, Integral Z32 } comprises { Int, IntLiteral } getter zero(): Z32 = 0 getter one(): Z32 = 1 getter minimum(): Z32 = 2147483647 1 opr self : Z32 = if self 0 then self else self...

Growing a language... Απαιτεί πολύ εκφραστικό σύστημα τύπων Συγγραφείς βιβλιοθηκών έχουν πρόσβαση στο AST Ανάλυση προγράμματος, βελτιστοποιήσεις ενθαρρύνει συνεργατικότητα και συγγραφή εξειδικευμένων βιβλιοθηκών