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

Preview:

Citation preview

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

Константин Черкасовk.cherkasoff@gmail.com

Erlang?

Scala?

Scala + Akka?

Twisted?gevent?

Tornado?

Компьютеры изменились

• 2002 – Hyper-threading

• 2005 – 2 cores

• 2008 – 4 cores

• 2010 – 8 cores

• 2011 – 16 cores

• 2013 – 4 cores in a phone :)

Зачем?

Big Data

• 2005 – Data

• 2010 – Data

•2015 – DataОбъем данных удваивается каждые 18 месяцев

Что с языками программирования?

• С – 1972Разработка ядра и окружения ОС, переносимость кода между различными архитектурами

• С++ – 1980Расширение возможностей C («C с классами»)

• Java – 1995 (работа начата в 1990)ПО для бытовых устройств, за основу взят C++

Что с языками программирования?

• Perl – 1987comp.sources.misc: «замена для awk и sed»

• Python – 1991 (работа начата в 1989)Объектно-ориентированный скриптовый язык

• Ruby – 1994«Более объектно-ориентированный, чем Python»

• Javascript – 1995«язык для склеивания» веб-ресурсов, в том числе на стороне сервера

Go

Команда Go

Rob Pike Robert GriesemerKen Thompson

• Начали работу над Go в 2007 году

• Практики с огромным опытом (Unix, Plan 9, Inferno, B, UTF-8, V8, JVM HotSpot)

• Go задуман как инструмент для решения конкретных задач; это не академическое упражнение и не чья-то диссертация

• http://golang.org/CONTRIBUTORS – 400 человек

Что такое Go

• Компилируется в машинный код

• Объектно-ориентированный

• Есть понятие интерфейса• Нет классов

• Автоматическое управление памятью, сборщик мусора

• Императивный, с С-подобным синтаксисом

Что такое Go

• Строгая статическая типизация

• Нет неявного приведения типов• Утиная типизация и интерфейсы• Вывод типов

• Развитые средства интроспекции

• Поддержка Unicode

...

Что такое Go

• Развитые средства функционального программирования:

• 1st class functions• high order functions• function literals• closures• user-defined function types

...

Что такое Go

• Встроенная поддержка конкурентного программирования:

• Go-рутины• Инструкция go• Каналы и инструкция select

Что такое Gofunc 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 Patternsyoutu.be/f6kdp27TYZs

Python vs Go

"Hello, world" на Tornado

import tornado.ioloopimport 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()

"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)}

array, slice

a := [...]string{"один", "два", "три", "четыре", "пять"}

Println(a) // [один два три четыре пять]Println(a[:2]) // [один два]Println(a[2:5]) // [три четыре пять]

map

m := map[string]int{"один": 1, "два": 2, "три": 3}

Println(m) // map[один:1 два:2 три:3]Println(m["один"], m["три"]) // 1 3

m["четыре"] = 4Println(m["четыре"]) // 4

for ... range

arr := [...]string{"один", "два", "три", "четыре", "пять"}

for i, v := range arr { Println(i, v)}

Культурные шоки

В 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

В Go нет классовв привычном нам виде

Gotype Point struct {! X float64! Y float64}

func (self Point) String() string {! return fmt.Sprintf("(%f, %f)", self.X, self.Y)}

В Go нет классовв привычном нам виде

Gotype Point struct {! X float64! Y float64}

func (self Point) String() string {! return fmt.Sprintf("(%f, %f)", self.X, self.Y)}

def __str__(self)

В Go нет исключенийв привычном нам виде

file, err := os.Open("filename.ext")if err != nil { log.Fatal(err)}// do something with the open *File f

«Ошибка» – это альтернативный результат

Error Handling and Gohttp://golang.org/doc/articles/error_handling.html

В Go нет исключенийв привычном нам виде

Для аварий – panic & recoverfunc g(i int) { if i > 3 { panic(fmt.Sprintf("Too large: %v", i)) }

Defer, Panic, and Recoverhttp://golang.org/doc/articles/defer_panic_recover.html

Текущий статус Go• Активно развивается: март 2012 – Go 1.0, май

2013 – Go 1.1, июнь 2013 – Go 1.1.1• Активное сообщество (G+, golang-nuts)

• Подробная документация и учебники

• Несколько книг, одна переведена на русский

Текущий статус Go• «Заряженная» стандартная библиотека

• Множство сторонних библиотек, коннекторы для всего (БД, серверов очередей и т.п.)

• Поддержка в Google App Engine

Текущий статус Go

• Gorilla web toolkithttp://www.gorillatoolkit.org/

• BeegoBeego is a Go Framework which is inspired from tornado and sinatrahttps://github.com/astaxie/beego

• RevelA high productivity web framework for the Go language, in the spirit of Rails and Play!http://robfig.github.io/revel/

Области применения

• Сетевые сервисы, распределенные вычисления

• Go most watched repositories https://github.com/languages/Go/most_watched

• A list of Go projectshttps://code.google.com/p/go-wiki/wiki/Projects

Полезные ссылки• Go Concurrency Patterns

http://youtu.be/f6kdp27TYZs

• Advanced Go Concurrency Patternshttp://youtu.be/QDDwwePbDtw

• Concurrency Is Not Parallelismhttp://vimeo.com/49718712

• Meet the Go Teamhttp://youtu.be/sln-gJaURzk

• Fireside Chat with the Go Teamhttp://youtu.be/p9VUCp98ay4

Полезные ссылки

• Why Python, Ruby and Javascript are Slowhttps://vimeo.com/61044810

• Scala Actors 101 - Threadless and Scalablehttp://java.dzone.com/articles/scala-threadless-concurrent

• Concurrency in Erlang & Scala: The Actor Modelhttp://savanne.be/articles/concurrency-in-erlang-scala/

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)}

Recommended