SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
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 main
import "fmt"
func main() {
fmt.Println("hello world")
}
ООП: Интерфейсы - 1
type 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 := <-textChannel
fmt.Println(string)
Goroutines & Channles
http://play.golang.org/p/Qi-9oERKHu
func 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 Parallelism
Go Concurrency Patterns
Advanced 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
– Activestate
code.google.com/p/go-wiki/wiki/GoUsers
Попробовать Go
http://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
– отсутствие генериков
– пакетный менеджер
– обработка ошибок
– наличие библиотек
– встраивание
– низкоуровневый язык
Вопросы?

Weitere ähnliche Inhalte

Was ist angesagt?

Лекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIЛекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIAlexey Paznikov
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...corehard_by
 
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"Nikolay Grebenshikov
 
Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...
Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...
Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...Nikolay Grebenshikov
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
ekb.py - PyCon.ru
ekb.py - PyCon.ruekb.py - PyCon.ru
ekb.py - PyCon.ruit-people
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Nikolay Grebenshikov
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey Paznikov
 
Скрытые закономерности в разработке ПО
Скрытые закономерности в разработке ПОСкрытые закономерности в разработке ПО
Скрытые закономерности в разработке ПОAlex Yakyma
 
Языки программирования
Языки программированияЯзыки программирования
Языки программированияDmitri Soshnikov
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
07 - Hadoop. Решение задач с помощью MapReduce
07 - Hadoop. Решение задач с помощью MapReduce07 - Hadoop. Решение задач с помощью MapReduce
07 - Hadoop. Решение задач с помощью MapReduceRoman Brovko
 
20080316 efficientalgorithms kulikov_lecture18
20080316 efficientalgorithms kulikov_lecture1820080316 efficientalgorithms kulikov_lecture18
20080316 efficientalgorithms kulikov_lecture18Computer Science Club
 
Etap overview rus
Etap overview rusEtap overview rus
Etap overview rusyaevents
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...Nikolay Grebenshikov
 

Was ist angesagt? (19)

Лекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPIЛекция 4. Производные типы данных в стандарте MPI
Лекция 4. Производные типы данных в стандарте MPI
 
Dynamic memory
Dynamic memoryDynamic memory
Dynamic memory
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
 
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
Лекция №16. Поиск подстрок. Предмет "Структуры и алгоритмы обработки данных"
 
Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...
Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...
Лекция №14. Графы: кратчайшие пути и максимальные потоки. Предмет "Структуры ...
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
ekb.py - PyCon.ru
ekb.py - PyCon.ruekb.py - PyCon.ru
ekb.py - PyCon.ru
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
Лекция №15. Методы программирования. Предмет "Структуры и алгоритмы обработки...
 
Unity DOTS RTS Case Study
Unity DOTS RTS Case StudyUnity DOTS RTS Case Study
Unity DOTS RTS Case Study
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
 
Скрытые закономерности в разработке ПО
Скрытые закономерности в разработке ПОСкрытые закономерности в разработке ПО
Скрытые закономерности в разработке ПО
 
Языки программирования
Языки программированияЯзыки программирования
Языки программирования
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
07 - Hadoop. Решение задач с помощью MapReduce
07 - Hadoop. Решение задач с помощью MapReduce07 - Hadoop. Решение задач с помощью MapReduce
07 - Hadoop. Решение задач с помощью MapReduce
 
20080316 efficientalgorithms kulikov_lecture18
20080316 efficientalgorithms kulikov_lecture1820080316 efficientalgorithms kulikov_lecture18
20080316 efficientalgorithms kulikov_lecture18
 
Etap overview rus
Etap overview rusEtap overview rus
Etap overview rus
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
Лекция №12. Графы: представление, обходы, топологическая сортировка. Предмет ...
 

Andere mochten auch

Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовAndrew Shitov
 
Предложение Бизнес-инкубатор - eGov Camp
Предложение Бизнес-инкубатор - eGov CampПредложение Бизнес-инкубатор - eGov Camp
Предложение Бизнес-инкубатор - eGov CampБизнес-инкубатор
 
Potensi Strategi&Pendekatan Mengoptimum P&P
Potensi Strategi&Pendekatan Mengoptimum P&PPotensi Strategi&Pendekatan Mengoptimum P&P
Potensi Strategi&Pendekatan Mengoptimum P&Pprofmadyadrhjsuaidi
 
SegurançA InformáTica E Na Internet
SegurançA InformáTica E Na InternetSegurançA InformáTica E Na Internet
SegurançA InformáTica E Na Internetmcmq
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени. beshkenadze
 
Fast queue – как мы сделали свою очередь на perl и redis
Fast queue – как мы сделали свою очередь на perl и redisFast queue – как мы сделали свою очередь на perl и redis
Fast queue – как мы сделали свою очередь на perl и redisMoscow.pm
 
Building and Customizing CoreOS
Building and Customizing CoreOSBuilding and Customizing CoreOS
Building and Customizing CoreOS雄也 日下部
 

Andere mochten auch (8)

Язык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистовЯзык программирования Go для Perl-программистов
Язык программирования Go для Perl-программистов
 
Предложение Бизнес-инкубатор - eGov Camp
Предложение Бизнес-инкубатор - eGov CampПредложение Бизнес-инкубатор - eGov Camp
Предложение Бизнес-инкубатор - eGov Camp
 
Potensi Strategi&Pendekatan Mengoptimum P&P
Potensi Strategi&Pendekatan Mengoptimum P&PPotensi Strategi&Pendekatan Mengoptimum P&P
Potensi Strategi&Pendekatan Mengoptimum P&P
 
SegurançA InformáTica E Na Internet
SegurançA InformáTica E Na InternetSegurançA InformáTica E Na Internet
SegurançA InformáTica E Na Internet
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
Fast queue – как мы сделали свою очередь на perl и redis
Fast queue – как мы сделали свою очередь на perl и redisFast queue – как мы сделали свою очередь на perl и redis
Fast queue – как мы сделали свою очередь на perl и redis
 
Building and Customizing CoreOS
Building and Customizing CoreOSBuilding and Customizing CoreOS
Building and Customizing CoreOS
 
Niñogriego06
Niñogriego06Niñogriego06
Niñogriego06
 

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

Go для python-программистов
Go для python-программистовGo для python-программистов
Go для python-программистовKonstantin Cherkasov
 
implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)Ruslan Shevchenko
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Flame graph: новый взгляд на старое профилирование
Flame graph: новый взгляд на старое профилированиеFlame graph: новый взгляд на старое профилирование
Flame graph: новый взгляд на старое профилированиеКирилл Борисов
 
Common Lisp как второй язык
Common Lisp как второй языкCommon Lisp как второй язык
Common Lisp как второй языкValeriy Zamarayev
 
2009 10-31 есть ли жизнь после mpi
2009 10-31 есть ли жизнь после mpi2009 10-31 есть ли жизнь после mpi
2009 10-31 есть ли жизнь после mpiMichael Karpov
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и DjangoTaras Lyapun
 
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)ScalaNsk
 
Linux basics. Занятие 3.
Linux basics. Занятие 3. Linux basics. Занятие 3.
Linux basics. Занятие 3. Vikentsi Lapa
 
Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodNikita Baksalyar
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
 
Стандарт MPI (Message Passing Interface)
Стандарт MPI (Message Passing Interface)Стандарт MPI (Message Passing Interface)
Стандарт MPI (Message Passing Interface)Mikhail Kurnosov
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelMikhail Kurnosov
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3it-people
 
экспертные системы
экспертные системыэкспертные системы
экспертные системыsokol_klinik
 

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

Go для python-программистов
Go для python-программистовGo для python-программистов
Go для python-программистов
 
implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
09 - Hadoop. Pig
09 - Hadoop. Pig09 - Hadoop. Pig
09 - Hadoop. Pig
 
Flame graph: новый взгляд на старое профилирование
Flame graph: новый взгляд на старое профилированиеFlame graph: новый взгляд на старое профилирование
Flame graph: новый взгляд на старое профилирование
 
Common Lisp как второй язык
Common Lisp как второй языкCommon Lisp как второй язык
Common Lisp как второй язык
 
2009 10-31 есть ли жизнь после mpi
2009 10-31 есть ли жизнь после mpi2009 10-31 есть ли жизнь после mpi
2009 10-31 есть ли жизнь после mpi
 
Введение в Python и Django
Введение в Python и DjangoВведение в Python и Django
Введение в Python и Django
 
Data analysis in R
Data analysis in RData analysis in R
Data analysis in R
 
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
Павел Павлов - Scala для Java программистов (JavaDay Nsk 28.11.2013)
 
Linux basics. Занятие 3.
Linux basics. Занятие 3. Linux basics. Занятие 3.
Linux basics. Занятие 3.
 
Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny Novgorod
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
2014-11-01 02 Иван Зезюля. To go или не to go
2014-11-01 02 Иван Зезюля. To go или не to go2014-11-01 02 Иван Зезюля. To go или не to go
2014-11-01 02 Иван Зезюля. To go или не to go
 
Ngs 2 0_0
Ngs 2 0_0Ngs 2 0_0
Ngs 2 0_0
 
Стандарт MPI (Message Passing Interface)
Стандарт MPI (Message Passing Interface)Стандарт MPI (Message Passing Interface)
Стандарт MPI (Message Passing Interface)
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray Chapel
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3
 
экспертные системы
экспертные системыэкспертные системы
экспертные системы
 

Mehr von Moscow.pm

О работе с документами .xls, .xlsx, .rtf
О работе с документами .xls, .xlsx, .rtfО работе с документами .xls, .xlsx, .rtf
О работе с документами .xls, .xlsx, .rtfMoscow.pm
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Moscow.pm
 
Разработка документации для RESTful API: как убить трёх зайцев одним. Moscow....
Разработка документации для RESTful API: как убить трёх зайцев одним. Moscow....Разработка документации для RESTful API: как убить трёх зайцев одним. Moscow....
Разработка документации для RESTful API: как убить трёх зайцев одним. Moscow....Moscow.pm
 
Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 ...
Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 ...Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 ...
Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 ...Moscow.pm
 
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...Moscow.pm
 
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Moscow.pm
 
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Moscow.pm
 
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...Moscow.pm
 
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Moscow.pm
 

Mehr von Moscow.pm (10)

О работе с документами .xls, .xlsx, .rtf
О работе с документами .xls, .xlsx, .rtfО работе с документами .xls, .xlsx, .rtf
О работе с документами .xls, .xlsx, .rtf
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
 
Разработка документации для RESTful API: как убить трёх зайцев одним. Moscow....
Разработка документации для RESTful API: как убить трёх зайцев одним. Moscow....Разработка документации для RESTful API: как убить трёх зайцев одним. Moscow....
Разработка документации для RESTful API: как убить трёх зайцев одним. Moscow....
 
Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 ...
Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 ...Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 ...
Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 ...
 
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...
 
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013
 
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Не верь никому или разработка эффективных приложений (Как писать по настоящем...
Не верь никому или разработка эффективных приложений (Как писать по настоящем...
 
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...
 
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
 

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

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