Go (програмски језик) — разлика између измена

Садржај обрисан Садржај додат
Autobot (разговор | доприноси)
м Dodavanje datuma u šablone za održavanje i/ili sredjivanje referenci
++ референце
Ред 28:
== Историја ==
 
Језик је настао као експеримент тројице Гуглових запослених—Роберт Грисемер, Роб Пајк и Кен Томпсон. Идеја је била да се дизајнира нови језик за системско програмирање који би решио главне проблеме постојећих језика у тој групи а притом задржао њихове позитивне особине.<ref>{{cite web |url=http://www.stanford.edu/class/ee380/Abstracts/100428.html |title=Another Go at Language Design |last=Пајк |first=Роб |date=28 April 2010 |work=Stanford EE Computer Systems Colloquium |publisher=[[Stanford University]]}} [https://www.youtube.com/watch?v=7VcArS4Wpqk Видео снимак доступан].</ref> Нови језик би имао следеће особине:
 
* био би [[статичка компилација|статички компилиран]] и могао би да се се користи за велике системе (као [[Java]] и [[C++]]),
Ред 35:
* подржавао би програмирање у мрежи и вишеструко процесирање <!-- овде проверити да ли је добар превод -->
 
У интервјуима, сва тројица дизајнера су изразила да нису љубитељи сложености [[C++]]-а, и да је то била главна мотивација за дизајнирање новог језика.<ref>{{cite web|url=http://www.drdobbs.com/open-source/interview-with-ken-thompson/229502480|title=Dr. Dobb's: Interview with Ken Thompson|author=Ендрју Бинсток|date=18-05-2011|accessdate=10 април 2016}}</ref><ref>{{cite web|url=http://commandcenter.blogspot.mx/2012/06/less-is-exponentially-more.html|title=Less is exponentially more |year=2012 |last=Пајк |first=Роб}}</ref><ref>{{cite web|url=https://sourcegraph.com/blog/live/gophercon2015/123645585015|title=The Evolution of Go |year=2015 |author=Роберт Грисемер}}</ref>
 
 
== Дизајн језика ==
Линија 43 ⟶ 44:
Кратак преглед особина које карактеришу Гоу:
 
* Синтакса и окружење које прихвата идеје које се чешће срећу у [[динамички програмски језик|динамичким језицима]].<ref name=go_video_2009>{{cite web|last=Пајк|first=Роб|title=The Go Programming Language|url=http://www.youtube.com/watch?v=rKnDgT73v8s&feature=related|publisher=YouTube|accessdate=10 април 2016}}</ref>
** Опциона скраћена декларација и иницијализација променљивих кроз локално закључивање типова података ({{јез-енг|local type inference}}; <code>i := 0</code> уместо <code>int i = 0;</code>).
** Брза компилација програма у извршну датотеку.<ref name="techtalk-compiling">{{cite video |people= Роб Пајк |date= 10 новембар 2009 |title= The Go Programming Language |url= http://www.youtube.com/watch?v=rKnDgT73v8s#t=8m53 |format= flv |medium= Техничка презентација |publisher= Гугл |time= 8:53}}</ref>
** Једноставно управљање пакетима (<code>go get</code>)<ref>[http://golang.org/cmd/go/#hdr-Download_and_install_packages_and_dependencies Download and install packages and dependencies - go - The Go Programming Language]; видети [http://godoc.org godoc.org] за адресе и документацију појединих пакета</ref>, као и једноставна и читљива документација пакета на интернету<ref>{{cite web|url=http://godoc.org|title=GoDoc|work=godoc.org}}</ref>.
* Јединствени приступи проблемима:
** Уграђене функционалности за конкурентно програмирање: лаки процеси (корутине - -{goroutines}-), канали за ток података између процеса, и <code>select</code> кључна реч за управљање каналима.
** Систем интерфејса и уграђивања типова уместо уместо виртуалног и невиртуалног наслеђивања.
** Скуп алата који производи статички линковане извршне датотеке које не зависе од спољашњих библиотека.
* Тежња ка једноставности језика - спецификација је довољно кратка да програмери могу целу да је запамте. Ово је могуће захваљујући избацивању функционалности које се често срећу у другим језицима.<ref>Роб Пајк на [[подкаст]]у ''[http://5by5.tv/changelog/100 The Changelog]''</ref>
* Изворне датотеке са кодом су увек кодиране као [[UTF-8]], што омогућује локализовање коментара и документације, али и имена типова, функција, променљивих и константи.
 
Линија 79 ⟶ 80:
=== Типови података ===
 
Гоу има одређен број уграђених типова података, укључујући [[Булов тип података]], нумеричке типове (<code>byte</code>, <code>rune</code>, <code>int</code>, <code>float</code>, <code>complex</code>), и [[ниска|ниске]]. Ниске су непроменљиве, а помоћу уграђених оператора и кључних речи могуће је спајање, поређење и кодирање из и у [[UTF-8]]<ref>Роб Пајк, [http://blog.golang.org/strings Strings, bytes, runes and characters in Go], 23 октобар 2013</ref>. Сложени типови ({{јез-енг|record type}}) се могу дефинисати уз помоћ кључне речи <code>struct</code>.
 
Типом податка <code>T</code> и бројем елемената <code>n</code> се дефинише '''[[Низ (структура података)|низ]]''' означен са <code>[n]T</code>; пошто је број елемената део типа податка, низови којима су типови елемената исти али им је број елемената различит, су различитог типа.
 
[[Динамички низ]]ови се зову '''одсечци''' {{јез-енг|slice}}; за тип податка <code>T</code>, одсечак се означава са <code>[]T</code>. Ови низови имају дужину и капацитет којим се означава када треба заузети нови део меморије за проширење одсечка. Неколико одсечака може да дели одређени меморијски простор.<ref>Ендрју Џиренд, [http://blog.golang.org/go-slices-usage-and-internals Go Slices: usage and internals]</ref><ref>Гоу Аутори, [http://golang.org/doc/effective_go.html#slices Effective Go: Slices]</ref>
 
За пар типова података <code>K, V</code>, тип <code>map[K]V</code> означава тип '''мапе''' ([[хеш табела]]) која мапира кључеве типа <code>K</code> на вредности типа <code>V</code>. Хеш табеле су уграђене у језик, имају посебну синтаксу, и над њима се операције врше уграђеним функцијама.
Линија 99 ⟶ 100:
</syntaxhighlight>
 
Са овом дефиницијом типа <code>ipv4addr(x)</code> интерпретира <code>uint32</code> вредност у ИП адресу. Просто додељивање вредности <code>x</code> променљивој чији је тип <code>ipv4addr</code> није могуће јер, иако имају исту структуру у меморији, нису исти типови.<ref>{{cite web|url=http://golang.org/ref/spec#Calls|title=The Go Programming Language Specification|work=golang.org}}</ref>
 
Константни изрази могу имати или немати типове; ако немају тип податка, он им се додељује када се њихова вредност додели некој променљивој, под условом да је конверзија могућа током компилације.