Gyimesi Gábor.  Google - 2009 november 10.  Célja: interpretált nyelvek dinamikusságának és fordított nyelvek biztonságának, teljesítményének ötvözése.

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Objective- C Bereczki Gréta Tamara
Adatbányászati technikák (VISZM185)
JavaScript.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
10. előadás (2004. április 20.) A C előfordító (folytatás) Néhány hasznos compiler opció Egy tanulságos könyvtári függvény Változó hosszúságú argumentum.
5. előadás (2005. március 22.) Függvények definíciója, deklarációja, hívása Enumerációs adattípus 1.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
Ruby nyelv. Története Yukihiro Matsumoto (szül ápr. 4.) alkotta meg, az ideális script nyelv hosszú eredménytelen keresése után. A lehetséges jelöltek.
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 2. rész – Vezérlő szerkezetek
C# tagfüggvények.
PHP Webprogramozás alapjai
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Annotációk a Java 5 nyelvben Kozsik Tamás. Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz,
Programozás I Függvények általános jellemzői
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
Operációs rendszerek gyakorlat 4. Gyakorlat Vakulya Gergely.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Programozás Az adatokról C# -ban.
Programozási Nyelvek (C++) Gyakorlat Gyak 02.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Alprogramok deklarációja, definíciója és meghívása Páll Boglárka.
1. Gyakorlat - Alapok 1. Írjon konzolprogramot, amely kiírja a “Hello ELTE” üzenetet! Használja a System.out.println() -t! 2. Írjon konzolprogramot, amely.
Készítette: Csíki Gyula
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Készítette: Lipp Marcell
A D programozási nyelv Angeli Dávid. Nagy vonalakban  C++  
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
PHP nyelv Mari Dániel.
Turbo Pascal Indítás: C:\LANGS\Turbo Pascal Turbo Pascal.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Adatbázisok gyakorlat 10. gyakorlat SQL SELECT, Összekapcsolás, Nézettáblák.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 8. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 7. gyakorlat.
Java programozási nyelv Vezérlési szerkezetek
Bevezetés Amiről ma szó lesz… Miért D? Mert a fejlesztők úgy látták, hogy a C++-on van még mit javítani. Mert a programozók a nyelvnek általában elszigetelt.
Egyenesvonalú (lineáris) adatszerkezetek
Objektum orientált programozás
Objektum orientált programozás
Egyágú elágazás Szintaxis: if (feltétel)
A Visual Basic nyelvi elemei
Power Lutár Patrícia Pellek Krisztián.  -ltLess than  -leLess than or equal to  -gtGreater than  -geGreater than or equal to  -eqEqual to  -neNot.
CUDA C/C++ programozás CUDA C bevezetés A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
Programozás I. 3. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 1. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 5. gyakorlat.
Excel programozás (makró)
Informatikai gyakorlatok 11. évfolyam
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
Script nyelvek előadás
Script nyelvek előadás
Script nyelvek előadás
Excel programozás (makró)
Programozás C# -ban Elágazások.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
A CLIPS keretrendszer
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Függvénysablonok használata
Előadás másolata:

Gyimesi Gábor

 Google november 10.  Célja: interpretált nyelvek dinamikusságának és fordított nyelvek biztonságának, teljesítményének ötvözése  Open Source, fordított  Garbage collectorral rendelkezik  Párhuzamos programozási lehetőségek  Hierarchia mentes  Ősei: C/C++/C#/Java, Pascal/Modula elemekkel Gyimesi Gábor2

 Alapvetően C stílusú szintaxis ◦ C stílusú kommentek - // /* */  Terminálójel (;) lehet rejtett ◦ “if the newline comes after a token that could end a statement, insert a semicolon” ◦ break continue fallthrough return ) }  package main //belépő main package import "fmt„ //import( // "fmt" // " math„ //) func main() { fmt.Println("Hello, 世界 ") //Hello, 世界 }  Nem használt csomagok, változók warning helyett fordítási hibát adnak  Gofmt – forrás formázásához Gyimesi Gábor3

 bool //true false  string //”stringliteral”  int8 (alias: byte), int16, int32(alias: rune), int64  uint8, uint16, uint32, uint64  float32, float64  complex64, complex128 // i  Implementációfüggő ◦ uint – 32 vagy 64 bites ◦ int – uint nagyságú ◦ intptr – pointer tárolására egész típus Gyimesi Gábor4

 Struct-ok ◦ Rekord megvalósítása ◦ type kulcsszóval ◦ Tagok elérése „.” operátorral ◦ type [név] struct { [mezőnév] [típus] [mezőnév2] [típus2] … } ◦ type Point struct { X int Y int }  Új típusok type kulcsszóval ◦ Type MyInt int var x MyInt = 1  Tömbök ◦ Érték szerint átadott gyűjtemény ◦ Pl.: x [10]int{1,2,3,4,5,6,7,8,9,10} //fix méretű ◦ 0-tól indexelődik ◦ len(x) Gyimesi Gábor5

 Referencia szerint átadott gyűjtemény  Nil slice deklaráció ◦ var z []int // == nil  Allokáció ◦ „make” kulcsszóval – p := make([]int,10) ◦ v := Int[]{1,2,3}  Slicing ◦ Részslice-ok lekérése s[lo:hi] szintaxissal ◦ p := []int{2, 3, 5, 7, 11, 13} v := p[1:4] // 3, 5, 7 w := p[:3] //2, 3, 5 x := p[4:] //11, 13 Gyimesi Gábor6

 Beépített asszociatív gyűjtemény  Allokáció „make”-kel ◦ p:=make(map[string]Point)  Műveletek: m[key], elem = m[key]; delete(m,key); elem, ok = m[key];  Map literál: ◦ var m = map[string] Point{ "Bell Labs": Point { , , }, "Google": Point { , , }, } Gyimesi Gábor7

 Var kulcsszó ◦ Var [változónév] {típus} ◦ Pl.: var x, y, z int ◦ Inicializáció: var x, y int = 1, 2 //int elhagyható ◦ var ( ToBe bool = false z complex128 = cmplx.Sqrt( i) ) ◦ Értékadás = operátorral ◦ Szimultán értékadás Pl.: a,b = 1,2  Konstans deklaráció ◦ const kulcsszóval ◦ const Pi float32 = 3.14 //float32 elhagyható ◦ const ( Big = 1 > 99 )  Rövid változó deklaráció ◦ Lokális változókhoz ◦ Csak akkor használható, ha egyik új változó ◦ := operátorral: x := true ◦ Szimultán értékadás: x, y, z := true, 1, „no” ◦ Minimum 1 új változó esetén Gyimesi Gábor8

 Deklaráció és dereferencia * operátorral  Allokáció new operátorral ◦ var i *int = new(int)  Cím lekérése & operátorral ◦ var a *int = new(int) b := &a  Függvénypointerek ◦ Változóknak értékül adhatók ◦ dist:= func(x1, y1, x2, y2 float64) float64 { return math.Sqrt(math.Pow(x1-x2,2) + math.Pow(y1-y2,2)) } dist(0,0,10,10) Gyimesi Gábor9

 Elágazás ◦ C szintaxishoz hasonló (zárójelek elhagyva) ◦ Megengedett kezdeti utasítással ◦ if v := math.Pow(x, n); v < lim { return v } else { …}  Switch ◦ Elágazáshoz hasonlóan C szintaxissal ◦ Használható vizsgált érték nélkül if-else ágak helyettesítésére ◦ switch { case t.Hour() < 12: fmt.Println("Good morning!") case t.Hour() < 17: fmt.Println("Good afternoon.") default: fmt.Println("Good evening.") } Gyimesi Gábor10

 Számlálós ciklus ◦ sum := 0 for i := 0; i < 10; i++ { sum += i }  Kezdeti értékadás elhagyható  „While” ciklus csak feltételt meghagyva ◦ sum := 1 for sum < 1000 { sum += sum }  „Forever” ◦ for { }  „Foreach” ◦ var pow = []int{1, 2, 4, 8, 16, 32, 64, 128} func main() { for i, v := range pow { fmt.Printf("2**%d = %d\n", i, v) }  Goto, Break, Continue Gyimesi Gábor11

 Func kulcsszóval  func [függvénynév] ([paraméterek]) ([visszatérési értékek]){}  Rövidíthető paraméterek ◦ func add(x int,y int) -> func add(x,y int)  Több visszatérési érték ◦ func swap(x, y string) (string, string) { return y, x } a,b := swap(„egy”,”ketto”) ◦ Csak egyes értékek eltárolásának lehetősége: _,b := swap(„egy”,”ketto”)  Elnevezhető visszatérési értékek ◦ func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum – x return } Gyimesi Gábor12

 Nincsenek osztályok  Tagfüggvények társítása struct-okhoz ◦ A csomagban definiálhatunk függvényeket átadva a tagfüggvény típusát ◦ func (v *Point) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } ◦ Átadhatjuk a típust pointerként és statikus típusként is – érték vs referencia ◦ Pointeren és statikus típuson keresztül is elérhetjük a tagfüggvényeket a „.” operátor segítségével  var v Point{2,2} var a *Point = &v func (v Point) Foo() { v.X++ } func (v *Point) Foo() { v.X++ } v.Foo() // v == {2,2} a.Foo() //v == {3,2}  Tagfüggvények bármilyen típushoz ◦ type MyFloat float64 func (f MyFloat) Abs() float64 {…} Gyimesi Gábor13

 A beágyazást részesíti előnyben a nyelv  Nincs „az-egy” kapcsolat  Többszörös öröklődés megengedett ◦ Kompozíciós megoldással  type Parent struct { name string } type Child struct { Parent //AnotherParent } Gyimesi Gábor14

 Függvényszignatúrák halmaza  Konvencionálisan –er végűek  Deklaráció ◦ type Abser interface { Abs() float64 }  Polimorfizmus ◦ var a Abser f := MyFloat(-math.Sqrt2) v := Point{3, 4} a = f //Megvalósítja az Abs műveletet a = &v //*Point is megvalósítja az Abs műveletet Gyimesi Gábor15

 Halasztható függvények  Listára menti a függvényt  Környező függvény végrehajtása után hajtódnak végre  Clean up műveletek végrehajtására  func CopyFile(dstName, srcName string) (written int64, err error) { src, err := os.Open(srcName) if err != nil { return } defer src.Close() dst, err := os.Create(dstName) if err != nil { return } defer dst.Close() return io.Copy(dst, src) } Gyimesi Gábor16

 Alapvetően a nyelv előnyben részesíti a hibakódokkal történő visszatérést  Hiba interfész ◦ type error interface { Error() string }  Panic/Recover ◦ Fatális hibák esetén használandó ◦ Panic  Megszakítja a végrehajtást és elkezd a program „pánikolni”  Lefuttatja az elhalasztott függvényeket ◦ Recover  beépített függvény amely visszaadja a vezérlést a pánikoló szálnak  Elhalasztott függvényekben érdemes meghívni Gyimesi Gábor17

 Goroutine-ok ◦ Go egyszerű szálai ◦ „go” kulcsszóval új szálon indítja el a függvényt ◦ func say(s string) { fmt.Println(s) } func main() { go say("world") //új szálon say("hello") } ◦ Szinkronizáció „sync” csomagban  wait, mutex, lock… Gyimesi Gábor18

 Goroutine-ok közötti adatküldésre  Bufferelhetőek  FIFO  Típusosak  „make” kulcsszóval példányosítjuk ◦ c := make(chan int) ◦ c := make(chan int, 2) //legfeljebb 2 elemmel – cap(c)  <- operátor elhelyezésre és kivételre ◦ Kivételkor 2. visszatérési érték – van-e még elem?  close a csatorna lezárására  Ciklusban feldolgozható  c := make(chan int, 10) go fibonacci(cap(c), c) for i := range c { fmt.Println(i) } a,b := <-c fmt.Println(a,b) Gyimesi Gábor19

 Select blokkol, amíg egy ága nem teljesül  Amint teljesül egy ág lefuttatja azt  Lehet egy default ágat definiálni, amely abban az esetben fut le, ha más feltétele nem teljesül  tick := time.Tick(1e8) boom := time.After(5e8) for { select { case <-tick: fmt.Println("tick.") case <-boom: fmt.Println("BOOM!") return default: fmt.Println(".") time.Sleep(5e7) } } Gyimesi Gábor20

Gyimesi Gábor21