Cén fáth go bhfuil Go dona do Ríomhchláraitheoirí Neamhchliste

Scríobhadh an t-alt mar fhreagra ar alt a foilsíodh roimhe seo alt antipodean.

Cén fáth go bhfuil Go dona do Ríomhchláraitheoirí Neamhchliste

Le dhá bhliain anuas tá mé ag baint úsáide as Go chun freastalaí RADIUS speisialaithe a chur i bhfeidhm le córas billeála forbartha. Ar an mbealach, tá mé ag foghlaim intricacies na teanga féin. Tá na cláir féin an-simplí agus ní hé cuspóir an ailt seo iad, ach tá cúpla focal mar chosaint tuillte ag an taithí ar Go féin a úsáid. Tá Go ag éirí mar theanga phríomhshrutha atá ag éirí níos príomhshrutha le haghaidh cód tromchúiseach inscálaithe. Chruthaigh Google an teanga, áit a n-úsáidtear go gníomhach í. Bunlíne, is dóigh liom go hionraic go bhfuil dearadh na teanga Go dona do ríomhchláraitheoirí UNintelligent.

Deartha do ríomhchláraitheoirí lag?

An lag labhairt ar fhadhbanna. An chaint láidir faoi smaointe agus aislingí...

Tá Go an-éasca le foghlaim, chomh héasca sin gur féidir leat an cód a léamh gan oiliúint ar bith, nach mór. Úsáidtear an ghné seo den teanga i go leor cuideachtaí domhanda nuair a léitear an cód le chéile le speisialtóirí neamh-lárnach (bainisteoirí, custaiméirí, etc.). Tá sé seo an-áisiúil le haghaidh modheolaíochtaí cosúil le Forbairt Tiomanta ag Dearadh.
Tosaíonn Fiú ríomhchláraitheoirí novice a thabhairt ar aird go leor cód réasúnta tar éis seachtain nó dhó. Is é an leabhar a ndearna mé staidéar air ná “Go Programming” (le Mark Summerfield). Tá an leabhar an-mhaith, baineann sé le go leor nuances na teanga. Tar éis teangacha casta gan ghá mar Java, PHP, tá an easpa draíochta athnuachan. Ach luath nó mall, tá smaoineamh ag go leor ríomhchláraitheoirí teoranta sean-mhodhanna a úsáid i réimse nua. An bhfuil sé seo riachtanach i ndáiríre?

Chruthaigh Rob Pike (príomh-idé-eolaí na teanga) an teanga Go mar theanga thionsclaíoch atá éasca le tuiscint agus éifeachtach le húsáid. Tá an teanga deartha le haghaidh táirgiúlacht uasta i bhfoirne móra agus níl aon amhras faoi. Go leor ríomhchláraitheoirí novice gearán go bhfuil go leor gnéithe go bhfuil siad in easnamh. Ba chinneadh comhfhiosach ó dhearthóirí na teanga an fonn seo ar shimplíocht, agus chun a thuiscint go hiomlán cén fáth go raibh gá leis, ní mór dúinn spreagadh na bhforbróirí a thuiscint agus cad a bhí siad ag iarraidh a bhaint amach i Go.

Mar sin cén fáth a ndearnadh é chomh simplí sin? Seo cúpla sliocht ó Rob Pike:

Is é an príomhphointe anseo ná nach taighdeoirí iad ár ríomhchláraitheoirí. Tá siad, mar riail, sách óg, teacht chugainn tar éis staidéar a dhéanamh, b'fhéidir staidéar siad Java, nó C/C++, nó Python. Ní féidir leo teanga iontach a thuiscint, ach ag an am céanna ba mhaith linn iad a chruthú bogearraí maith. Sin é an fáth gur chóir go mbeadh an teanga éasca le tuiscint agus le foghlaim.

Ba chóir go mbeadh sé eolach, go garbh cosúil le C. Cuireann ríomhchláraitheoirí atá ag obair le Google tús lena ngairmeacha beatha go luath agus is mó a bhíonn eolach ar theangacha nós imeachta, go háirithe ar an teaghlach C. Ciallaíonn an gá atá le táirgiúlacht tapa i dteanga nua ríomhchlárúcháin nár cheart don teanga a bheith ró-radacach.

Focail ciallmhar, nach bhfuil?

Déantáin na Simplíochta

Is coinníoll riachtanach é simplíocht le haghaidh áilleacht. Lev Tolstoy.

Tá sé simplí a choinneáil ar cheann de na spriocanna is tábhachtaí in aon dearadh. Mar is eol duit, ní tionscadal foirfe é nach bhfuil aon rud le cur leis, ach ceann nach bhfuil aon rud le baint as. Creideann go leor daoine go bhfuil gá le huirlis chasta chun fadhbanna casta a réiteach (nó fiú a chur in iúl). Mar sin féin, níl sé. Glacaimis an teanga PERL mar shampla. Chreid idé-eolaithe teanga gur chóir go mbeadh trí bhealach éagsúla ar a laghad ag ríomhchláraitheoir fadhb amháin a réiteach. Ghlac idé-eolaithe na teanga Go bealach eile; shocraigh siad gur leor bealach amháin, ach bealach an-mhaith, leis an sprioc a bhaint amach. Tá bunús tromchúiseach ag an gcur chuige seo: is é an t-aon bhealach níos éasca a fhoghlaim agus níos deacra dearmad a dhéanamh.

Gearánann go leor imirceach nach bhfuil astarraingtí galánta sa teanga. Sea, tá sé seo fíor, ach seo ceann de phríomhbhuntáistí na teanga. Tá íosmhéid draíocht sa teanga - mar sin níl aon eolas domhain ag teastáil chun an clár a léamh. Maidir le briathrachas an chóid, ní fadhb í seo ar chor ar bith. Léann clár Golang dea-scríofa go ceartingearach, gan mórán struchtúr nó struchtúr ar bith. Ina theannta sin, tá luas léitheoireachta clár ar a laghad ord méide níos mó ná an luas a scríobhtar é. Má mheasann tú go bhfuil formáidiú aonfhoirmeach ag an gcód go léir (arna dhéanamh ag baint úsáide as an ordú gofmt ionsuite), ansin ní fadhb ar bith é cúpla líne breise a léamh.

Gan an-léiritheach

Ní fhulaingt ealaín nuair a chuirtear srian lena saoirse. Ní hé cruinneas a fhreagracht.

Mar gheall ar an dúil sa tsimplíocht, tá easpa tógála ar Go a fheictear i dteangacha eile mar rud nádúrtha ag daoine a bhfuil taithí acu orthu. Ar dtús féadfaidh sé a bheith beagán deacair, ach ansin tugann tú faoi deara go bhfuil an clár i bhfad níos éasca agus níos neamhdhébhrí a léamh.

Mar shampla, bheadh ​​cuma mar seo ar áirgiúlacht consól a léann stdin nó comhad ó argóintí na n-orduithe:

package main

import (
    "bufio"
    "flag"
    "fmt"
    "log"
    "os"
)

func main() {

    flag.Parse()

    scanner := newScanner(flag.Args())

    var text string
    for scanner.Scan() {
        text += scanner.Text()
    }

    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }

    fmt.Println(text)
}

func newScanner(flags []string) *bufio.Scanner {
    if len(flags) == 0 {
        return bufio.NewScanner(os.Stdin)
    }

    file, err := os.Open(flags[0])

    if err != nil {
        log.Fatal(err)
    }

    return bufio.NewScanner(file)
}

Níl an réiteach ar an bhfadhb chéanna in D, cé go bhfuil cuma níos giorra air, níos fusa le léamh

import std.stdio, std.array, std.conv;

void main(string[] args)
{
    try
    {
        auto source = args.length > 1 ? File(args[1], "r") : stdin;
        auto text   = source.byLine.join.to!(string);

        writeln(text);
    }
    catch (Exception ex)
    {
        writeln(ex.msg);
    }
}

Ifreann a chóipeáil

Iompraíonn fear ifreann laistigh de féin. Máirtín Luther.

Déanann tosaitheoirí gearán i gcónaí faoi Go i dtéarmaí an easpa cineálacha. Chun an cheist seo a réiteach, úsáideann an chuid is mó acu cóipeáil dhíreach chóid. Mar shampla, feidhm chun liosta slánuimhreacha a achoimriú, creideann daoine gairmiúla ionchasacha nach féidir an fheidhmiúlacht a chur i bhfeidhm ar aon bhealach eile seachas trí chóip-ghreamú simplí do gach cineál sonraí.

package main

import "fmt"

func int64Sum(list []int64) (uint64) {
    var result int64 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int32Sum(list []int32) (uint64) {
    var result int32 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func main() {

    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(int32Sum(list32))
    fmt.Println(int64Sum(list64))
}

Tá dóthain acmhainní ag an teanga chun tógálacha dá leithéid a chur i bhfeidhm. Mar shampla, bheadh ​​ríomhchlárú cineálach go maith.

package main

import "fmt"

func Eval32(list []int32, fn func(a, b int32)int32) int32 {
    var res int32
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int32Add(a, b int32) int32 {
    return a + b
}

func int32Sub(a, b int32) int32 {
    return a + b
}

func Eval64(list []int64, fn func(a, b int64)int64) int64 {
    var res int64
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int64Add(a, b int64) int64 {
    return a + b
}

func int64Sub(a, b int64) int64 {
    return a - b
}

func main() {

    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(Eval32(list32, int32Add))
    fmt.Println(Eval64(list64, int64Add))
    fmt.Println(Eval64(list64, int64Sub))
}

Agus, cé gur tharla ár gcód beagán níos faide ná an cás roimhe seo, tá sé ginearálaithe. Mar sin, ní bheidh sé deacair dúinn gach oibríocht uimhríochtúil a chur i bhfeidhm.

Déarfaidh go leor go bhfuil cuma i bhfad níos giorra ar chlár in D, agus beidh siad ceart.

import std.stdio;
import std.algorithm;

void main(string[] args)
{
    [1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}

Mar sin féin, níl sé ach níos giorra, ach níl sé níos ceart, ós rud é go ndéanann cur i bhfeidhm D neamhaird go hiomlán ar an bhfadhb a bhaineann le láimhseáil earráide.

Sa saol fíor, de réir mar a mhéadaíonn castacht na loighic, caolaíonn an bhearna go tapa. Dúnann an bhearna níos gasta fós nuair is gá duit gníomh a dhéanamh nach féidir a dhéanamh trí úsáid a bhaint as oibreoirí caighdeánacha teanga.

Maidir le hinbhuanaitheacht, insínteacht, agus inléiteacht, i mo thuairim féin, is é an bua atá ag teanga Go, cé go gcaillfidh sí de réir briathar.

Tugann ríomhchlárú ginearálaithe i gcásanna áirithe buntáistí nach féidir a shéanadh. Tá sé seo léirithe go soiléir ag an bpacáiste sórtála. Mar sin, chun aon liosta a shórtáil, ní mór dúinn ach an comhéadan sort.Interface a chur i bhfeidhm.

import "sort"

type Names []string

func (ns Names) Len() int {
    return len(ns)
}

func (ns Names) Less(i, j int) bool {
    return ns[i] < ns[j]
}

func (ns Names) Swap(i, j int) {
    ns[i], ns[j] = ns[j], ns[i]
}

func main() {
    names := Names{"London", "Berlin", "Rim"}
    sort.Sort(names)
}

Má ghlacann tú le haon tionscadal foinse oscailte agus má ritheann tú an t-ordú grep “comhéadan{}” -R, feicfidh tú cé chomh minic is a úsáidtear comhéadain mearbhall. Déarfaidh gcomrádaithe dlúth-mheabhrach láithreach go bhfuil sé seo go léir mar gheall ar an easpa cineálacha. Mar sin féin, ní amhlaidh a bhíonn i gcónaí. Glacaimis DELPHI mar shampla. In ainneoin láithreacht na gcineálacha céanna seo, tá cineál speisialta ATHRAITHEACH ann le haghaidh oibríochtaí le cineálacha sonraí treallach. Déanann an teanga Go an rud céanna.

Ó ghunna go gealbhain

Agus caithfidh an straitjacket a bheith oiriúnach do mhéid an mheabhair. Stanislav Lec.

D'fhéadfadh go leor lucht leanúna an-mhór a éileamh go bhfuil meicníocht eile ag Go chun generics a chruthú - machnamh. Agus beidh siad ceart ... ach amháin i gcásanna neamhchoitianta.

Tugann Rob Pike rabhadh dúinn:

Is uirlis chumhachtach é seo ar chóir a úsáid go cúramach. Ba cheart é a sheachaint mura bhfuil géarghá leis.

Insíonn Vicipéid na rudaí seo a leanas dúinn:

Tagraíonn machnamh don phróiseas inar féidir le clár monatóireacht agus modhnú a dhéanamh ar a struchtúr agus ar a iompar féin le linn é a chur i gcrích. Tugtar ríomhchlárú machnamhach ar an bparaidím ríomhchlárúcháin is bun leis an machnamh. Is cineál meitea-chláraithe é seo.

Mar sin féin, mar is eol duit, caithfidh tú íoc as gach rud. Sa chás seo tá sé:

  • deacracht le cláir a scríobh
  • luas forghníomhaithe an chláir

Dá bhrí sin, ní mór machnamh a úsáid go cúramach, cosúil le hairm den scoth. Tá cláir neamh-inléite, earráidí seasta agus luas íseal mar thoradh ar úsáid mhíchabhrach an mhachnaimh. Is é an rud é go mbeidh ríomhchláraitheoir snob in ann a chód a thaispeáint os comhair comhghleacaithe eile, níos pragmatach agus níos measartha.

Bagáiste cultúrtha ó Xí? Ní hea, ó roinnt teangacha!

Mar aon leis an fhortún, fágtar fiacha ag na hoidhrí freisin.

In ainneoin go gcreideann go leor go bhfuil an teanga bunaithe go hiomlán ar oidhreacht C, ní mar sin atá an scéal. Cuimsíonn an teanga go leor gnéithe de na teangacha ríomhchlárúcháin is fearr.

error

Ar an gcéad dul síos, tá comhréir na struchtúr gramadaí bunaithe ar chomhréir na teanga C. Bhí tionchar suntasach ag an teanga DELPHI freisin, áfach. Mar sin, feicimid go bhfuil na lúibíní iomarcacha, a laghdaíonn go mór inléiteacht an chláir, bainte go hiomlán. Tá an t-oibreoir “:=” is gné dhílis de theanga DELPHI sa teanga freisin. Déantar coincheap na bpacáistí a fháil ar iasacht ó theangacha cosúil le ADA. Déantar dearbhú na n-eintiteas neamhúsáidte a fháil ar iasacht ó theanga PROLOG.

Semantics

Bhí na pacáistí bunaithe ar shéimeantaic na teanga DELPHI. Cuimsíonn gach pacáiste sonraí agus cód agus tá aonáin phríobháideacha agus phoiblí ann. Ligeann sé seo duit an comhéadan pacáiste a laghdú go dtí a laghad.

Fuarthas an oibríocht cur chun feidhme trí mhodh tarmligin ar iasacht ó theanga DELPHI.

Tiomsú

Ní gan chúis go bhfuil magadh ann: forbraíodh Go agus clár C á chur le chéile. Ar cheann de láidreachtaí na teanga tá a tiomsú ultra-tapa. Fuarthas an smaoineamh ar iasacht ón teanga DELPHI. Freagraíonn gach pacáiste Go do mhodúl DELPHI. Ní athchruinnítear na pacáistí seo ach amháin nuair is gá i ndáiríre. Mar sin, tar éis an chéad eagarthóireacht eile, ní gá duit an clár iomlán a thiomsú, ach na pacáistí agus na pacáistí athraithe atá ag brath ar na pacáistí athraithe seo a ath-thiomsú (agus fiú ansin, mura bhfuil na comhéadain pacáiste athraithe).

Tógálacha ardleibhéil

Tá go leor tógálacha ardleibhéil éagsúla sa teanga nach mbaineann ar bhealach ar bith le teangacha ísealleibhéil mar C.

  • Teaghráin
  • Táblaí hash
  • Sliseanna
  • Faightear clóscríobh lachan ar iasacht ó theangacha cosúil le RUBY (nach dtuigeann, ar an drochuair, nó nach n-úsáideann a lánacmhainneacht).

Bainistíocht cuimhne

Go ginearálta tá alt ar leith tuillte ag bainistíocht cuimhne. Más rud é i dteangacha cosúil le C++, go bhfuil an smacht fágtha go hiomlán ag an bhforbróir, ansin i dteangacha níos déanaí mar DELPHI, baineadh úsáid as samhail chomhairimh tagartha. Leis an gcur chuige seo, níor ceadaíodh tagairtí timthriallacha, ós rud é gur foirmíodh cnuasaigh dílleachta, ansin tá braislí den sórt sin (cosúil le C#) aimsithe ag Go. Ina theannta sin, tá an bailitheoir truflais níos éifeachtaí ná an chuid is mó de na feidhmeanna atá ar eolas faoi láthair agus is féidir é a úsáid cheana féin le haghaidh go leor tascanna fíor-ama. Aithníonn an teanga féin cásanna inar féidir luach chun athróg a stóráil a leithdháileadh ar an gcruach. Laghdaíonn sé seo an t-ualach ar an mbainisteoir cuimhne agus méadaíonn sé luas an chláir.

Concurrency agus Concurrency

Tá comhthreomhaireacht agus iomaíochas na teanga gan moladh. Ní féidir le haon teanga ísealleibhéil dul san iomaíocht go cianda le Go. Chun a bheith cothrom, is fiú a thabhairt faoi deara nach raibh an tsamhail invented ag údair na teanga, ach go simplí a fuarthas ar iasacht ó na teanga ADA maith d'aois. Tá an teanga in ann na milliúin nasc comhthreomhar a phróiseáil ag baint úsáide as na LAPanna go léir, agus ag an am céanna go bhfuil ord méideanna níos lú fadhbanna casta aige maidir le deadlocks agus coinníollacha cine atá tipiciúil le haghaidh cód il-snáithithe.

Sochair bhreise

Má tá sé brabúsach, beidh gach duine a bheith selfless.

Soláthraíonn teanga roinnt buntáistí gan dabht dúinn freisin:

  • Déanann comhad inrite amháin tar éis an tionscadal a thógáil a shimpliú go mór le himscaradh na n-iarratas.
  • Is féidir le clóscríobh statach agus tátal cineáil líon na n-earráidí i do chód a laghdú go suntasach, fiú gan tástálacha a scríobh. Tá a fhios agam roinnt ríomhchláraitheoirí a dhéanann gan tástálacha a scríobh ar chor ar bith agus nach bhfuil cáilíocht a gcód ag fulaingt go mór.
  • Tras-thiomsú an-simplí agus iniomparthacht den scoth den leabharlann caighdeánach, rud a shimplíonn go mór forbairt na n-iarratas tras-ardán.
  • Tá slonn rialta RE2 sábháilte ó thaobh snáitheanna agus bíonn amanna forghníomhaithe intuartha acu.
  • Leabharlann chaighdeánach chumhachtach a ligeann do fhormhór na dtionscadal a dhéanamh gan creataí tríú páirtí.
  • Tá an teanga cumhachtach go leor chun díriú ar an bhfadhb seachas conas í a réiteach, ach íseal go leor chun an fhadhb a réiteach go héifeachtach.
  • Tá uirlisí forbartha as an mbosca cheana féin sa chóras Go eco do gach ócáid: tástálacha, doiciméadú, bainistíocht pacáiste, linters cumhachtacha, giniúint cód, brathadóir coinníollacha cine, etc.
  • Go leagan 1.11 tugadh isteach bainistíocht spleáchais shéimeantach ionsuite, bunaithe ar an óstáil VCS a bhfuil tóir air. Úsáideann na huirlisí go léir a chomhdhéanann an éiceachóras Go na seirbhísí seo chun cód a íoslódáil, a thógáil agus a shuiteáil uathu in aon titim amháin. Agus is iontach sin. Le teacht leagan 1.11, réitíodh go hiomlán an fhadhb le leagan pacáiste freisin.
  • Toisc gurb é bunsmaoineamh na teanga draíocht a laghdú, spreagann an teanga forbróirí chun láimhseáil earráidí a dhéanamh go sainráite. Agus tá sé seo ceart, mar gheall ar shlí eile, déanfaidh sé dearmad go simplí ar láimhseáil earráidí ar fad. Rud eile is ea go ndéanann formhór na bhforbróirí neamhaird d’aon ghnó ar láimhseáil earráidí, agus b’fhearr leo in ionad iad a phróiseáil an earráid a chur ar aghaidh aníos.
  • Ní chuireann an teanga modheolaíocht clasaiceach OOP i bhfeidhm, ós rud é ina fhoirm íon níl aon fhíorúil in Go. Mar sin féin, ní fadhb é seo nuair a úsáidtear comhéadain. Laghdaíonn easpa OOP go mór an bac ar iontráil do thosaitheoirí.

Simplíocht chun leasa an phobail

Tá sé éasca casta, deacair a shimpliú.

Ceapadh Go le bheith simplí agus éiríonn leis ag an sprioc sin. Scríobhadh é do ríomhchláraitheoirí cliste a thuigeann na buntáistí a bhaineann le hobair foirne agus atá tuirseach den éagsúlacht gan teorainn a bhaineann le teangacha Fiontair. Le sraith réasúnta beag de struchtúir chomhréire ina Arsenal, beagnach nach bhfuil sé faoi réir athruithe le himeacht ama, agus mar sin tá forbróirí a lán ama saor in aisce le haghaidh forbartha, agus ní chun staidéar a dhéanamh endlessly nuálaíochtaí teanga.

Faigheann cuideachtaí roinnt buntáistí freisin: cuireann bacainn iontrála íseal ar a gcumas speisialtóir a aimsiú go tapa, agus ceadaíonn neamh-luastacht na teanga dóibh an cód céanna a úsáid fiú tar éis 10 mbliana.

Conclúid

Níor bhuaigh méid na hinchinne riamh aon eilifint mar bhuaiteoir Duais Nobel.

I gcás na ríomhchláraitheoirí sin a bhfuil tosaíocht ag a ego pearsanta ar mheon na foirne, chomh maith le teoiriceoirí a bhfuil grá acu ar dhúshláin acadúla agus ar "féinfheabhsú" gan deireadh, tá an teanga fíor-olc, ós rud é gur teanga cheirde ilchuspóireach í nach ligeann duit í a fháil. pléisiúir aeistéitiúla ó thoradh do chuid oibre agus léirigh tú féin gairmiúil os comhair comhghleacaithe (ar choinníoll go dtomhaisimid faisnéis de réir na gcritéar seo, agus ní de réir IQ). Cosúil le gach rud sa saol, tá sé ina ábhar tosaíochtaí pearsanta. Cosúil le gach nuálaíocht fhiúntach, tá an teanga tar éis teacht i bhfad ó shéanadh uilíoch go mórghlacadh. Tá an teanga éirimiúil ina simplíocht, agus, mar is eol daoibh, tá gach rud seiftiúil simplí!

Foinse: will.com

Add a comment