Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013

1,012 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,012
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
8
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Язык Go для Perl-программистов v1.1. Александр Орловский. Moscow.pm 4 июля 2013

  1. 1. Go для Perl программистов v 1.1 июль 2013 г.
  2. 2. Saint Perl 3, 18 декабря 2011 года http://event.perlrussia.org/saintperl3/talk/157 Введение в язык программирования Go с интересными примерами. http://www.slideshare.net/andy.sh/go-perl (132 слайда)
  3. 3. Мотивация – Кругозор – Тренды – XXI век – Why Python, Ruby, and Javascript are Slow – PARALLELISM FOR THE WIN! – Why Go – The Case For Go – Научится чему-то новому и интересному
  4. 4. Интересное – ООП – реализация конкурентного программированию – подход к работе с зависимостями – подход к обработке ошибок – стандартная библиотека – философия разработки
  5. 5. Что такое Go – "типизированный"* компилируемый язык программирования ) – с 2007, 2009 г. – оф. анонс – Open Source – team: Rob Pike, Ken Thompson, Russ Cox – современные потребности (эффективность разработки, для многопроцессорных, распределенных систем) – философия UNIX/C – less is more
  6. 6. 21st Century C++
  7. 7. Diff Dec 2011 .. Jul 2013 – изменения в синтаксисе/api – В 2012 вышла стабильная версия Go 1.0 – В 2013 вышла версия Go 1.1 – стабильное API – выросшее коммьюнити – первая книга, переведенная на русский – больше пользователей (Canonical, ...) – поддержка Google App Engine – русская группа Go разработчиков
  8. 8. Go vs Perl – общее - сборщик мусора - go doc (еще проще чем POD), go test - utf8 - обратная совместимость (go fix) - ООП - multiple function return values - правильная область видимости (замыкания) - синтаксис (ruby/js, pascal & C) - дух (душок? :) старой школы
  9. 9. – типизированный, (кросс-)компиляция – code parse, spec, поддержка IDE – code style (go fmt) – regexp-ы (RE2) – CPAN vs стандартная библиотека + VCS – эффективность использования CPU/RAM – конкурентное программирование – философия Go vs Perl различия
  10. 10. Что еще предлагает Go – инструментарий: profiler, gdb, race detector – fast (cross-)compilation – GOMAXPROC – go fmt (форматирование и рефакторинг) – cgo, – отсутствие исключений – интерфейсы *link 10k problem* – решение 10K проблемы (100K-1000?K)
  11. 11. Perl vs Go
  12. 12. Hello World package main import "fmt" func main() { fmt.Println("hello world") }
  13. 13. ООП: Интерфейсы - 1 type geometry interface { area() float64 perim() float64 } type square struct { width, height float64 } type circle struct { radius float64 }
  14. 14. ООП: Интерфейсы - 2 func (s square) area() float64 { return s.width * s.height } func (s square) perim() float64 { return 2*s.width + 2*s.height }
  15. 15. ООП: Интерфейсы - 3 func (c circle) area() float64 { return math.Pi * c.radius * c.radius } func (c circle) perim() float64 { return 2 * math.Pi * c.radius }
  16. 16. ООП: Интерфейсы - 4 func measure(g geometry) { fmt.Println(g) fmt.Println(g.area()) fmt.Println(g.perim()) } func main() { s := square{width: 3, height: 4} c := circle{radius: 5} measure(s); measure(c); }
  17. 17. Аналогия из мира UNIX: Goroutine – фоновый процесс > go command() --> command & Channel – это PIPE > echo "hello" | reverse Channels in Go Конкурентное программирование: Goroutines и Channels
  18. 18. echo "hello" | rev(erse) http://play.golang.org/p/EJhZtE71RM textChannel := make(chan string) go func(s string) { runes := []rune(s) for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 { runes[i], runes[j] = runes[j], runes[i] } textChannel <- string(runes) }("hello") string := <-textChannel fmt.Println(string)
  19. 19. Goroutines & Channles http://play.golang.org/p/Qi-9oERKHu func worker(done chan bool) { fmt.Print("working..."); time.Sleep(time.Second) fmt.Println("done") done <- true } func main() { done := make(chan bool, 1) go worker(done) <-done }
  20. 20. Go киллер фича Поддержка конкурентного программирования без мутексов, каллбеков, тредов и форков Сложно объяснить за 5 минут Concurrency vs Parallelism Go Concurrency Patterns Advanced Go Concurrency Patterns
  21. 21. 1) совсем простой github.com/nordicdyno/websocket-golang-chat демо: http://tinyurl.com/nbrnjw9 2) продвинутый https://github.com/kobeld/gochatting демо: http://tinyurl.com/oevjpr4 Live Demo
  22. 22. Success stories – How We Went from 30 Servers to 2: Go – Youtube (vitess), dl.google – Canonical (Ubuntu) – Heroku – Tumblr – Disqus – Activestate code.google.com/p/go-wiki/wiki/GoUsers
  23. 23. Попробовать Go http://tour.golang.org/ GoLang Russian group (3-й митап 06.07.2013) Научиться Go ● Writing, building, installing, and testing Go code (YouTube 5 минутное видео) ● http://blog.golang.org/ ● How to Learn Go ● Resources for new Go programmers ● http://golang.org/ref/spec
  24. 24. Что еще почитать/посмотреть Google: go lang <key words> выступления Rob Pike, Andrew Gerrand, Russ Cox. CSP book OSCON 2010: Rob Pike, "Public Static Void"
  25. 25. Go make programming fun again – (конкурентный) код может быть эффективным и простым – типизация – полезная вещь – можно программировать без наследования, ексепшенов
  26. 26. Критика Go – отсутствие генериков – пакетный менеджер – обработка ошибок – наличие библиотек – встраивание – низкоуровневый язык
  27. 27. Вопросы?

×