• Like
Go для python-программистов
Upcoming SlideShare
Loading in...5
×

Go для python-программистов

  • 1,429 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,429
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
14
Comments
0
Likes
5

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Go для python-программистов Константин Черкасов k.cherkasoff@gmail.com
  • 2. Erlang?
  • 3. Scala?
  • 4. Scala + Akka?
  • 5. Twisted? gevent? Tornado?
  • 6. Компьютеры изменились • 2002 – Hyper-threading • 2005 – 2 cores • 2008 – 4 cores • 2010 – 8 cores • 2011 – 16 cores • 2013 – 4 cores in a phone :)
  • 7. Зачем?
  • 8. Big Data • 2005 – Data • 2010 – Data •2015 – Data Объем данных удваивается каждые 18 месяцев
  • 9. Что с языками программирования? • С – 1972 Разработка ядра и окружения ОС, переносимость кода между различными архитектурами • С++ – 1980 Расширение возможностей C («C с классами») • Java – 1995 (работа начата в 1990) ПО для бытовых устройств, за основу взят C++
  • 10. Что с языками программирования? • Perl – 1987 comp.sources.misc: «замена для awk и sed» • Python – 1991 (работа начата в 1989) Объектно-ориентированный скриптовый язык • Ruby – 1994 «Более объектно-ориентированный, чем Python» • Javascript – 1995 «язык для склеивания» веб-ресурсов, в том числе на стороне сервера
  • 11. Go
  • 12. Команда Go Rob Pike Robert GriesemerKen Thompson • Начали работу над Go в 2007 году • Практики с огромным опытом (Unix, Plan 9, Inferno, B, UTF-8, V8, JVM HotSpot) • Go задуман как инструмент для решения конкретных задач; это не академическое упражнение и не чья-то диссертация • http://golang.org/CONTRIBUTORS – 400 человек
  • 13. Что такое Go • Компилируется в машинный код • Объектно-ориентированный • Есть понятие интерфейса • Нет классов • Автоматическое управление памятью, сборщик мусора • Императивный, с С-подобным синтаксисом
  • 14. Что такое Go • Строгая статическая типизация • Нет неявного приведения типов • Утиная типизация и интерфейсы • Вывод типов • Развитые средства интроспекции • Поддержка Unicode ...
  • 15. Что такое Go • Развитые средства функционального программирования: • 1st class functions • high order functions • function literals • closures • user-defined function types ...
  • 16. Что такое Go • Встроенная поддержка конкурентного программирования: • Go-рутины • Инструкция go • Каналы и инструкция select
  • 17. Что такое Go func main() { ! go boring("boring!") ! fmt.Println("I'm listening") ! time.Sleep(2 * time.Second) ! fmt.Println("You're boring; I'm leaving.") } func boring(msg string) { ! for i := 0; ; i++ { ! ! fmt.Println(msg, i) ! ! time.Sleep(1 * time.Second) ! } } Go Concurrency Patterns youtu.be/f6kdp27TYZs
  • 18. Python vs Go
  • 19. "Hello, world" на Tornado import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") application = tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
  • 20. "Hello, world" на Go package main import "net/http" func MainHandler(resp http.ResponseWriter, _ *http.Request) { ! resp.Write([]byte("Hello, world!")) } func main() { ! http.HandleFunc("/", MainHandler) ! http.ListenAndServe(":8080", nil) }
  • 21. array, slice a := [...]string{"один", "два", "три", "четыре", "пять"} Println(a) // [один два три четыре пять] Println(a[:2]) // [один два] Println(a[2:5]) // [три четыре пять]
  • 22. map m := map[string]int{"один": 1, "два": 2, "три": 3} Println(m) // map[один:1 два:2 три:3] Println(m["один"], m["три"]) // 1 3 m["четыре"] = 4 Println(m["четыре"]) // 4
  • 23. for ... range arr := [...]string{"один", "два", "три", "четыре", "пять"} for i, v := range arr { Println(i, v) }
  • 24. Культурные шоки
  • 25. В Go нет классов в привычном нам виде class Point(object): ! def __init__(self, X, Y): ! ! self.X = X ! ! self.Y = Y ! def __str__(self): ! ! return "(%f, %f)"%(self.X, self.Y) Python
  • 26. В Go нет классов в привычном нам виде Go type Point struct { ! X float64 ! Y float64 } func (self Point) String() string { ! return fmt.Sprintf("(%f, %f)", self.X, self.Y) }
  • 27. В Go нет классов в привычном нам виде Go type Point struct { ! X float64 ! Y float64 } func (self Point) String() string { ! return fmt.Sprintf("(%f, %f)", self.X, self.Y) } def __str__(self)
  • 28. В Go нет исключений в привычном нам виде file, err := os.Open("filename.ext") if err != nil { log.Fatal(err) } // do something with the open *File f «Ошибка» – это альтернативный результат Error Handling and Go http://golang.org/doc/articles/error_handling.html
  • 29. В Go нет исключений в привычном нам виде Для аварий – panic & recover func g(i int) { if i > 3 { panic(fmt.Sprintf("Too large: %v", i)) } Defer, Panic, and Recover http://golang.org/doc/articles/defer_panic_recover.html
  • 30. Текущий статус Go • Активно развивается: март 2012 – Go 1.0, май 2013 – Go 1.1, июнь 2013 – Go 1.1.1 • Активное сообщество (G+, golang-nuts) • Подробная документация и учебники • Несколько книг, одна переведена на русский
  • 31. Текущий статус Go • «Заряженная» стандартная библиотека • Множство сторонних библиотек, коннекторы для всего (БД, серверов очередей и т.п.) • Поддержка в Google App Engine
  • 32. Текущий статус Go • Gorilla web toolkit http://www.gorillatoolkit.org/ • Beego Beego is a Go Framework which is inspired from tornado and sinatra https://github.com/astaxie/beego • Revel A high productivity web framework for the Go language, in the spirit of Rails and Play! http://robfig.github.io/revel/
  • 33. Области применения • Сетевые сервисы, распределенные вычисления • Go most watched repositories https://github.com/languages/Go/most_watched • A list of Go projects https://code.google.com/p/go-wiki/wiki/Projects
  • 34. Полезные ссылки • Go Concurrency Patterns http://youtu.be/f6kdp27TYZs • Advanced Go Concurrency Patterns http://youtu.be/QDDwwePbDtw • Concurrency Is Not Parallelism http://vimeo.com/49718712 • Meet the Go Team http://youtu.be/sln-gJaURzk • Fireside Chat with the Go Team http://youtu.be/p9VUCp98ay4
  • 35. Полезные ссылки • What Python developers need to know before migrating to Go http://blog.repustate.com/migrating-code-from-python-to-golang-what-you- need-to-know/2013/04/23/ • Parallelism For The Win! http://areyoufuckingcoding.me/2012/08/16/parallelism-for-the-win/ • Rethinking Errors: Learning from Scala and Go http://youtu.be/REOL1AV_PCg
  • 36. Полезные ссылки • Why Python, Ruby and Javascript are Slow https://vimeo.com/61044810 • Scala Actors 101 - Threadless and Scalable http://java.dzone.com/articles/scala-threadless-concurrent • Concurrency in Erlang & Scala: The Actor Model http://savanne.be/articles/concurrency-in-erlang-scala/
  • 37. package main import "fmt" type Contact struct { ! email string ! skype string ! facebook string } func main() { ! c := Contact{ ! ! email: "k.cherkasoff@gmail.com", ! ! skype: "k.cherkasov", ! ! facebook: "http://fb.com/k.cherkasoff", ! } ! fmt.Println(c) }