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

29
Go для Perl программистов v 1.1 июль 2013 г.

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

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

Go для Perl программистов v 1.1

июль 2013 г.

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

Saint Perl 3, 18 декабря 2011 года

http://event.perlrussia.org/saintperl3/talk/157

Введение в язык программирования Go с интересными примерами.http://www.slideshare.net/andy.sh/go-perl(132 слайда)

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

Мотивация

– Кругозор– Тренды– XXI век

– Why Python, Ruby, and Javascript are Slow– PARALLELISM FOR THE WIN!– Why Go– The Case For Go– Научится чему-то новому и интересному

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

Интересное

– ООП– реализация конкурентного программированию– подход к работе с зависимостями– подход к обработке ошибок– стандартная библиотека– философия разработки

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

Что такое Go

– "типизированный"* компилируемый язык программирования ) – с 2007, 2009 г. – оф. анонс– Open Source– team: Rob Pike, Ken Thompson, Russ Cox– современные потребности (эффективность разработки, для многопроцессорных, распределенных систем)– философия UNIX/C– less is more

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

21st Century C++

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

Diff Dec 2011 .. Jul 2013

– изменения в синтаксисе/api– В 2012 вышла стабильная версия Go 1.0– В 2013 вышла версия Go 1.1– стабильное API– выросшее коммьюнити– первая книга, переведенная на русский– больше пользователей (Canonical, ...)– поддержка Google App Engine– русская группа Go разработчиков

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

Go vs Perl – общее

- сборщик мусора- go doc (еще проще чем POD), go test- utf8- обратная совместимость (go fix)- ООП- multiple function return values- правильная область видимости (замыкания)- синтаксис (ruby/js, pascal & C)- дух (душок? :) старой школы

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

– типизированный, (кросс-)компиляция– code parse, spec, поддержка IDE– code style (go fmt)– regexp-ы (RE2)– CPAN vs стандартная библиотека + VCS– эффективность использования CPU/RAM – конкурентное программирование– философия

Go vs Perl различия

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

Что еще предлагает Go

– инструментарий: profiler, gdb, race detector– fast (cross-)compilation– GOMAXPROC– go fmt (форматирование и рефакторинг)– cgo,– отсутствие исключений– интерфейсы*link 10k problem*– решение 10K проблемы (100K-1000?K)

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

Perl vs Go

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

Hello World

package mainimport "fmt"func main() { fmt.Println("hello world")}

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

ООП: Интерфейсы - 1type geometry interface { area() float64 perim() float64}type square struct { width, height float64}type circle struct { radius float64}

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

ООП: Интерфейсы - 2

func (s square) area() float64 { return s.width * s.height}func (s square) perim() float64 { return 2*s.width + 2*s.height}

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

ООП: Интерфейсы - 3

func (c circle) area() float64 { return math.Pi * c.radius * c.radius}func (c circle) perim() float64 { return 2 * math.Pi * c.radius}

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

ООП: Интерфейсы - 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);}

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

Аналогия из мира UNIX:

Goroutine – фоновый процесс> go command() --> command &

Channel – это PIPE> echo "hello" | reverse

Channels in Go

Конкурентное программирование: Goroutines и Channels

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

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)

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

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}

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

Go киллер фича

Поддержка конкурентного программирования без мутексов, каллбеков, тредов и форков

Сложно объяснить за 5 минут

Concurrency vs ParallelismGo Concurrency PatternsAdvanced Go Concurrency Patterns

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

1) совсем простойgithub.com/nordicdyno/websocket-golang-chat

демо: http://tinyurl.com/nbrnjw9

2) продвинутыйhttps://github.com/kobeld/gochatting

демо: http://tinyurl.com/oevjpr4

Live Demo

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

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

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

Что еще почитать/посмотретьGoogle: go lang <key words>выступления Rob Pike, Andrew Gerrand, Russ Cox.

CSP book

OSCON 2010: Rob Pike, "Public Static Void"

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

Go make programming fun again

– (конкурентный) код может быть эффективным и простым

– типизация – полезная вещь

– можно программировать без наследования, ексепшенов

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

Критика Go

– отсутствие генериков– пакетный менеджер– обработка ошибок– наличие библиотек– встраивание– низкоуровневый язык

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

Вопросы?