Язык Go для Perl-программистов v1.1. Александр Орловский....
Transcript of Язык Go для Perl-программистов v1.1. Александр Орловский....
Go для Perl программистов v 1.1
июль 2013 г.
Saint Perl 3, 18 декабря 2011 года
http://event.perlrussia.org/saintperl3/talk/157
Введение в язык программирования Go с интересными примерами.http://www.slideshare.net/andy.sh/go-perl(132 слайда)
Мотивация
– Кругозор– Тренды– XXI век
– Why Python, Ruby, and Javascript are Slow– PARALLELISM FOR THE WIN!– Why Go– The Case For Go– Научится чему-то новому и интересному
Интересное
– ООП– реализация конкурентного программированию– подход к работе с зависимостями– подход к обработке ошибок– стандартная библиотека– философия разработки
Что такое Go
– "типизированный"* компилируемый язык программирования ) – с 2007, 2009 г. – оф. анонс– Open Source– team: Rob Pike, Ken Thompson, Russ Cox– современные потребности (эффективность разработки, для многопроцессорных, распределенных систем)– философия UNIX/C– less is more
21st Century C++
Diff Dec 2011 .. Jul 2013
– изменения в синтаксисе/api– В 2012 вышла стабильная версия Go 1.0– В 2013 вышла версия Go 1.1– стабильное API– выросшее коммьюнити– первая книга, переведенная на русский– больше пользователей (Canonical, ...)– поддержка Google App Engine– русская группа Go разработчиков
Go vs Perl – общее
- сборщик мусора- go doc (еще проще чем POD), go test- utf8- обратная совместимость (go fix)- ООП- multiple function return values- правильная область видимости (замыкания)- синтаксис (ruby/js, pascal & C)- дух (душок? :) старой школы
– типизированный, (кросс-)компиляция– code parse, spec, поддержка IDE– code style (go fmt)– regexp-ы (RE2)– CPAN vs стандартная библиотека + VCS– эффективность использования CPU/RAM – конкурентное программирование– философия
Go vs Perl различия
Что еще предлагает Go
– инструментарий: profiler, gdb, race detector– fast (cross-)compilation– GOMAXPROC– go fmt (форматирование и рефакторинг)– cgo,– отсутствие исключений– интерфейсы*link 10k problem*– решение 10K проблемы (100K-1000?K)
Perl vs Go
Hello World
package mainimport "fmt"func main() { fmt.Println("hello world")}
ООП: Интерфейсы - 1type geometry interface { area() float64 perim() float64}type square struct { width, height float64}type circle struct { radius float64}
ООП: Интерфейсы - 2
func (s square) area() float64 { return s.width * s.height}func (s square) perim() float64 { return 2*s.width + 2*s.height}
ООП: Интерфейсы - 3
func (c circle) area() float64 { return math.Pi * c.radius * c.radius}func (c circle) perim() float64 { return 2 * math.Pi * c.radius}
ООП: Интерфейсы - 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);}
Аналогия из мира UNIX:
Goroutine – фоновый процесс> go command() --> command &
Channel – это PIPE> echo "hello" | reverse
Channels in Go
Конкурентное программирование: Goroutines и Channels
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 := <-textChannelfmt.Println(string)
Goroutines & Channleshttp://play.golang.org/p/Qi-9oERKHufunc 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}
Go киллер фича
Поддержка конкурентного программирования без мутексов, каллбеков, тредов и форков
Сложно объяснить за 5 минут
Concurrency vs ParallelismGo Concurrency PatternsAdvanced Go Concurrency Patterns
1) совсем простойgithub.com/nordicdyno/websocket-golang-chat
демо: http://tinyurl.com/nbrnjw9
2) продвинутыйhttps://github.com/kobeld/gochatting
демо: http://tinyurl.com/oevjpr4
Live Demo
Success stories
– How We Went from 30 Servers to 2: Go– Youtube (vitess), dl.google– Canonical (Ubuntu)– Heroku– Tumblr– Disqus– Activestatecode.google.com/p/go-wiki/wiki/GoUsers
Попробовать Gohttp://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
Что еще почитать/посмотретьGoogle: go lang <key words>выступления Rob Pike, Andrew Gerrand, Russ Cox.
CSP book
OSCON 2010: Rob Pike, "Public Static Void"
Go make programming fun again
– (конкурентный) код может быть эффективным и простым
– типизация – полезная вещь
– можно программировать без наследования, ексепшенов
Критика Go
– отсутствие генериков– пакетный менеджер– обработка ошибок– наличие библиотек– встраивание– низкоуровневый язык
Вопросы?