Why do we need a language like go?

592 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
592
On SlideShare
0
From Embeds
0
Number of Embeds
86
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Why do we need a language like go?

  1. 1. Кирил ВладимировPython developerGo fanboyGitHub: VladimiroffTwitter: @K_VladimiroffGoogle I/O15 май 2013София
  2. 2. Малко историяKen Thompson Rob Commander Pike Robert Griesemer
  3. 3. Малко история2007 стартира работата по проекта
  4. 4. Малко история2007 стартира работата по проекта2008 стартира имплементирането на компилатора
  5. 5. Малко история2007 стартира работата по проекта2008 стартира имплементирането на компилатора2009 първи публичен релийз
  6. 6. Малко история2007 стартира работата по проекта2008 стартира имплементирането на компилатора2009 първи публичен релийз2010 обявен за език на годината от Tiobe
  7. 7. Малко история2007 стартира работата по проекта2008 стартира имплементирането на компилатора2009 първи публичен релийз2010 обявен за език на годината от Tiobe2011 се използва в production среда от Google
  8. 8. Малко история2007 стартира работата по проекта2008 стартира имплементирането на компилатора2009 първи публичен релийз2010 обявен за език на годината от Tiobe2011 се използва в production среда от Google2012 официален релийз на 1.0
  9. 9. Малко история2007 стартира работата по проекта2008 стартира имплементирането на компилатора2009 първи публичен релийз2010 обявен за език на годината от Tiobe2011 се използва в production среда от Google2012 официален релийз на 1.02013 официален резлий на 1.1
  10. 10. C for the 21stcentury
  11. 11. C for the 21stcenturyC е на 41 години
  12. 12. C for the 21stcenturyC е на 41 годиниХардуерът се променя непрекъсно
  13. 13. C for the 21stcenturyC е на 41 годиниХардуерът се променя непрекъсноПроблемите, които решаваме също
  14. 14. Три свята
  15. 15. Три святаC/C++: Бързо изпълнение, за сметка бавна разработка, бавна компилация ине особено тривиален контрол над зависимостите
  16. 16. Три святаC/C++: Бързо изпълнение, за сметка бавна разработка, бавна компилация ине особено тривиален контрол над зависимоститеJava/C#: По-ефективен процес на разработка, компилация и контрол надзависимостите, за сметка на изпълнение
  17. 17. Три святаC/C++: Бързо изпълнение, за сметка бавна разработка, бавна компилация ине особено тривиален контрол над зависимоститеJava/C#: По-ефективен процес на разработка, компилация и контрол надзависимостите, за сметка на изпълнениеPython/Ruby: Изключително ефективен процес на разработка, без стъпка накомпилация, но изключително бавно изпълнение
  18. 18. Три святаC/C++: Бързо изпълнение, за сметка бавна разработка, бавна компилация ине особено тривиален контрол над зависимоститеJava/C#: По-ефективен процес на разработка, компилация и контрол надзависимостите, за сметка на изпълнениеPython/Ruby: Изключително ефективен процес на разработка, без стъпка накомпилация, но изключително бавно изпълнение*: Трудна паралелизация и ефективност в мултипроцесорни системи
  19. 19. РезултатътЕзик с отворен код от ниско ниво
  20. 20. РезултатътЕзик с отворен код от ниско нивоC-подобен синтаксис
  21. 21. РезултатътЕзик с отворен код от ниско нивоC-подобен синтаксисpackage mainimport ("fmt""math")func pow(x, n, lim float64) float64 {if v := math.Pow(x, n); v < lim {return v} else {fmt.Printf("%g >= %gn", v, lim)}return lim}func main() {fmt.Println(pow(3, 2, 10))}
  22. 22. РезултатътЕзик с отворен код от ниско нивоC-подобен синтаксисДълбоко залегнала идея за конкурентност
  23. 23. РезултатътЕзик с отворен код от ниско нивоC-подобен синтаксисДълбоко залегнала идея за конкурентностВграден, бърз и ефективен garbage collector
  24. 24. РезултатътЕзик с отворен код от ниско нивоC-подобен синтаксисДълбоко залегнала идея за конкурентностВграден, бърз и ефективен garbage collectorБезумно бърза компилация
  25. 25. РезултатътЕзик с отворен код от ниско нивоC-подобен синтаксисДълбоко залегнала идея за конкурентностВграден, бърз и ефективен garbage collectorБезумно бърза компилацияСъздаден да scale-ва
  26. 26. РезултатътЕзик с отворен код от ниско нивоC-подобен синтаксисДълбоко залегнала идея за конкурентностВграден, бърз и ефективен garbage collectorБезумно бърза компилацияСъздаден да scale-ваИзключително опростен
  27. 27. РезултатътЕзик с отворен код от ниско нивоC-подобен синтаксисДълбоко залегнала идея за конкурентностВграден, бърз и ефективен garbage collectorБезумно бърза компилацияСъздаден да scale-ваИзключително опростенЗабавен
  28. 28. РезултатътЕзик с отворен код от ниско нивоC-подобен синтаксисДълбоко залегнала идея за конкурентностВграден, бърз и ефективен garbage collectorБезумно бърза компилацияСъздаден да scale-ваИзключително опростенЗабавен … на моменти скучен
  29. 29. Epic features are epic
  30. 30. Модулната системавсичко е в пакетв йерархия санаправени са като хоратаimport "log”import googlelog "google/base/go/log"
  31. 31. НЕстандартни пакетиКолкото и да е пълна стандартната библиотека,все ще ни се наложи нещо от вънgo get github.com/Vladimiroff/vec2dimport “github.com/Vladimiroff/vec2d”var vector vec2d.Vector
  32. 32. Как да започнемmkdir ~/goexport GOPATH=~/goexport PATH=$PATH:$GOROOT/bingo/├── bin│ └── warcluster├── pkg│ └── linux_amd64│ ├── code.google.com│ ├── github.com│ └── warcluster└── src├── github.com│ ├── fzzy│ │ └── sockjs-go│ ├── garyburd│ │ └── redigo│ └── Vladimiroff│ └── vec2d└── warcluster
  33. 33. Обектният моделОбектно-ориентиран, ама не точно...
  34. 34. Обектният моделComposition not inheritance!
  35. 35. Обектният моделбез йерархия
  36. 36. Обектният моделinterfaces done right
  37. 37. Интерфейсиtype Reader interface {Read(b []byte) (n int, err error)}type Writer interface {Write(b []byte) (n int, err error)}type ReadWriter interface {ReaderWriter}
  38. 38. Интерфейсиtype Reader interface {Read(b []byte) (n int, err error)}type Writer interface {Write(b []byte) (n int, err error)}type ReadWriter interface {ReaderWriter}If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck.
  39. 39. Обектният моделв този ред на мисли, няма методиtype ByteSlice []bytefunc Append(slice *ByteSlice, data []byte) []byte {// ...}
  40. 40. Обектният моделв този ред на мисли, няма методиtype ByteSlice []bytefunc (self *ByteSlice) Append(data []byte) []byte {// ...}ByteSlice.Append(data)
  41. 41. Toolsrunbuildgodocgofixgetgofmttool...install
  42. 42. Стандартната библиотекаarchive tar zip bufio builtin bytes compress bzip2 flate gzip lzw zlibcontainer heap list ring crypto aes cipher des dsa ecdsa elliptichmac md5 rand rc4 rsa sha1 sha256 sha512 subtle tls x509 pkixdatabase sql driver debug dwarf elf gosym macho pe encodingascii85 asn1 base32 base64 binary csv gob hex json pem xmlerrors expvar flag fmt go ast build doc format parser printerscanner token hash adler32 crc32 crc64 fnv html template imagecolor draw gif jpeg png index suffixarray io ioutil log syslog math bigcmplx rand mime multipart net http cgi cookiejar fcgi httptesthttputil pprof mail rpc jsonrpc smtp textproto url os exec signaluser path filepath reflect regexp syntax runtime cgo debug pprofrace sort strconv strings sync atomic syscall testing iotest quick textscanner tabwriter template parse time unicode utf16 utf8 unsafe
  43. 43. Error handlingresult, err := run()няма изключенияtype error interface {Error() string}
  44. 44. Да събудим perl-джииот край време ни се обяснява какрегулярните изрази са бавни
  45. 45. Да събудим perl-джииот край време ни се обяснява какрегулярните изрази са бавниRegular Expression Matching Can Be Simple And Fast(but is slow in Java, Perl, PHP, Python, Ruby, ...)Russ Cox, 2007
  46. 46. Да събудим perl-джииот край време ни се обяснява какрегулярните изрази са бавниRegular Expression Matching Can Be Simple And Fast(but is slow in Java, Perl, PHP, Python, Ruby, ...)Russ Cox, 2007Fun fact: Russ Cox става core-developer на Go, през 2009
  47. 47. Concurrency
  48. 48. Concurrencyзакърмено с тази идея в builtins
  49. 49. Concurrencyзакърмено с тази идея в builtinsМного нишки == много проблемиGoroutines!doSomething()doAnototherThing()go doYetAnorherThingButinGoroutine()doOneMoreThing()
  50. 50. Channels
  51. 51. Channelsfunc makeCakeAndSend(cs chan string) {for i := 1; i<=3; i++ {cakeName := "Strawberry Cake " + strconv.Itoa(i)fmt.Println("Making a cake and sending ...", cakeName)cs <- cakeName //send a strawberry cake}}func receiveCakeAndPack(cs chan string) {for i := 1; i<=3; i++ {s := <-cs //get whatever cake is on the channelfmt.Println("Packing received cake: ", s)}}func main() {cs := make(chan string)go makeCakeAndSend(cs)go receiveCakeAndPack(cs)time.Sleep(4 * 1e9)}
  52. 52. Научените уроци
  53. 53. Научените уроциunused variables unused modules
  54. 54. Научените уроциunused variables unused modulespublic and private
  55. 55. Научените уроциunused variables unused modulespublic and privateподредба в maps
  56. 56. Научените уроциunused variables unused modulespublic and privateподредба в mapsфеноменална консистентност
  57. 57. Научените уроциunused variables unused modulespublic and privateподредба в mapsфеноменална консистентностбез имплицитни кастове
  58. 58. Научените уроциunused variables unused modulespublic and privateподредба в mapsфеноменална консистентностбез имплицитни кастовеUTF-8 FTW!
  59. 59.
  60. 60. http://tour.golang.org/въпроси?

×