9. Big Data
• 2005 – Data
• 2010 – Data
•2015 – Data
Объем данных удваивается каждые 18
месяцев
10. Что с языками
программирования?
• С – 1972
Разработка ядра и окружения ОС, переносимость
кода между различными архитектурами
• С++ – 1980
Расширение возможностей C («C с классами»)
• Java – 1995 (работа начата в 1990)
ПО для бытовых устройств, за основу взят C++
11. Что с языками
программирования?
• Perl – 1987
comp.sources.misc: «замена для awk и sed»
• Python – 1991 (работа начата в 1989)
Объектно-ориентированный скриптовый язык
• Ruby – 1994
«Более объектно-ориентированный, чем Python»
• Javascript – 1995
«язык для склеивания» веб-ресурсов, в том числе
на стороне сервера
14. Команда Go
Rob Pike Robert GriesemerKen Thompson
• Начали работу над Go в 2007 году
• Практики с огромным опытом (Unix, Plan 9, Inferno, B,
UTF-8, V8, JVM HotSpot)
• Go задуман как инструмент для решения конкретных
задач; это не академическое упражнение и не чья-то
диссертация
• http://golang.org/CONTRIBUTORS – 400 человек
15. Что такое Go
• Компилируется в машинный код
• Объектно-ориентированный
• Есть понятие интерфейса
• Нет классов
• Автоматическое управление памятью,
сборщик мусора
• Императивный, с С-подобным синтаксисом
16. Что такое Go
• Строгая статическая типизация
• Нет неявного приведения типов
• Утиная типизация и интерфейсы
• Вывод типов
• Развитые средства интроспекции
• Поддержка Unicode
...
17. Что такое Go
• Развитые средства функционального
программирования:
• 1st class functions
• high order functions
• function literals
• closures
• user-defined function types
...
18. Что такое Go
• Встроенная поддержка конкурентного
программирования:
• Go-рутины
• Инструкция go
• Каналы и инструкция select
19. Что такое 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
27. В 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
28. В Go нет классов
в привычном нам виде
Go
type Point struct {
! X float64
! Y float64
}
func (self Point) String() string {
! return fmt.Sprintf("(%f, %f)", self.X, self.Y)
}
29. В 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)
30. В 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
31. В 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
32. Текущий статус Go
• Активно развивается: март 2012 – Go 1.0, май
2013 – Go 1.1, июнь 2013 – Go 1.1.1
• Активное сообщество (G+, golang-nuts)
• Подробная документация и учебники
• Несколько книг, одна переведена на русский
33. Текущий статус Go
• «Заряженная» стандартная библиотека
• Множство сторонних библиотек, коннекторы
для всего (БД, серверов очередей и т.п.)
• Поддержка в Google App Engine
34. Текущий статус 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/
35. Области применения
• Сетевые сервисы, распределенные
вычисления
• 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
36. Полезные ссылки
• 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
37. Полезные ссылки
• 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
38. Полезные ссылки
• 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/