24
C Go Erlang Максим Трескин [email protected] @mtreskin 9 февраля, 2013

Взаимодействие Go и C-библиотек. Go и Erlang

  • Upload
    devday

  • View
    581

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Взаимодействие Go и C-библиотек. Go и Erlang

C ⇔ Go ⇔ ErlangМаксим Трескин

[email protected]@mtreskin

9 февраля, 2013

Page 2: Взаимодействие Go и C-библиотек. Go и Erlang

Кто такой C?

Изобретён в 1969–1972 гг. byDennis Ritchie, Ken Thompson,Brian Kernighan в AT&T Bell Labs

Page 3: Взаимодействие Go и C-библиотек. Go и Erlang

Почему нельзя без C?

• Стандартный ABI• Вообще всё работает на C• Over 109000 библиотек

Page 4: Взаимодействие Go и C-библиотек. Go и Erlang

Почему не хочется C?

• Слабая типизация• Низкий уровень• Небезопасный• Легко накосячить• Долго отлаживать

Page 5: Взаимодействие Go и C-библиотек. Go и Erlang

Если не C, то кто?

Page 6: Взаимодействие Go и C-библиотек. Go и Erlang

Go

Page 7: Взаимодействие Go и C-библиотек. Go и Erlang

Кто такой Go?

Изобретён в 2009 г. by KenThompson, Rob Pike, RobertGriesemer в Google

Page 8: Взаимодействие Go и C-библиотек. Go и Erlang

Кто такой Go?

• Строгая типизация• Memory safe• Concurrency• Интерфейсы• Reflection• Инфраструктура и stdlib

Page 9: Взаимодействие Go и C-библиотек. Go и Erlang

Пример кода на Go

Page 10: Взаимодействие Go и C-библиотек. Go и Erlang

Пример кода на Go: import

Page 11: Взаимодействие Go и C-библиотек. Go и Erlang

C ⇔ Go

Page 12: Взаимодействие Go и C-библиотек. Go и Erlang

C ⇔ Go

$ go build

Page 13: Взаимодействие Go и C-библиотек. Go и Erlang

C ⇔ Go

C.CString(string) *C.charC.GoString(*C.char) stringC.GoStringN(*C.char, C.int) stringC.GoBytes(unsafe.Pointer, C.int) []byte

Page 14: Взаимодействие Go и C-библиотек. Go и Erlang

C ⇔ Go

– CPP только в комментах– Ручной контроль памяти

+ Доступно много библиотек+ которые приятно использовать

Page 15: Взаимодействие Go и C-библиотек. Go и Erlang

And...

Page 16: Взаимодействие Go и C-библиотек. Go и Erlang

Go ⇔ Erlang

Page 17: Взаимодействие Go и C-библиотек. Go и Erlang

Erlang-node

• Port Mapper Daemon (epmd)• Distribution Protocol• External Term Format• Node

Page 18: Взаимодействие Go и C-библиотек. Go и Erlang

Go-node

• github.com/goerlang/epmd• github.com/goerlang/dist• github.com/goerlang/etf• github.com/goerlang/node

github.com/goerlang/eclus

Page 19: Взаимодействие Go и C-библиотек. Go и Erlang

Go/OTP: gen_server

Page 20: Взаимодействие Go и C-библиотек. Go и Erlang

Go/OTP: process

Page 21: Взаимодействие Go и C-библиотек. Go и Erlang

Go/OTP: create node

Page 22: Взаимодействие Go и C-библиотек. Go и Erlang

Go/OTP: RPC

Page 23: Взаимодействие Go и C-библиотек. Go и Erlang

C ⇔ Go ⇔ Erlang

• http://golang.org• http://erlang.org• https://github.com/goerlang

Page 24: Взаимодействие Go и C-библиотек. Go и Erlang

Вопросы?

C ⇔ Go ⇔ ErlangМаксим Трескин

[email protected]@mtreskin

9 февраля, 2013