He aha te mea he kino te Haere Hoahoa mo nga Kaihanga Papatono

I roto i nga marama kua hipa kua whakamahi ahau i a Go mo nga whakatinanatanga. Tuhinga o mua (āhua.: waehere hei whakamatautau i te mahi o tetahi whakaaro) i roto i tona wa waatea, ko tetahi waahanga ki te ako i te reo hotaka. He tino ngawari nga kaupapa, ehara i te kaupapa o tenei tuhinga, engari ko te wheako ki te whakamahi i a Go ake e tika ana etahi kupu mo tena. Haere ki te oati (āhua.: tuhinga i tuhia i te tau 2015) he reo rongonui mo te waehere tino tauineine. Na Google te reo i hanga, i reira e kaha ana te whakamahi. Ko te rarangi o raro, he pono taku whakaaro he kino te hoahoa o te reo Haere mo nga kaitakataka atamai.

I hangaia mo nga kaitakataka ngoikore?

He tino ngawari ki te ako a Haere, na te mea i tae mai te kupu whakataki i tetahi ahiahi, i muri i tera ka taea e au te tohu whai hua. Ko te pukapuka i akohia e au ko Haere ko te ingoa He Kupu Whakataki ki te Papatonotanga i roto i te Haere (whakamaori), e wātea ana i runga ipurangi. Ko te pukapuka, penei i te Go source code ake, he ngawari ki te panui, he pai nga tauira waehere, he 150 pea nga wharangi ka taea te panui i te waa kotahi. He mea hou tenei ngawari i te tuatahi, ina koa i roto i te ao hotaka kua ki tonu i nga hangarau uaua rawa atu. Engari i te mutunga, ka puta ake te whakaaro: "Koinei ranei?"

E kii ana a Google ko te ngawari o Go ko tana tohu hoko me te reo i hangaia mo te tino hua i roto i nga roopu nui, engari kei te ruarua ahau. He ahuatanga kei te ngaro, kei te tino taipitopito ranei. A ko nga mea katoa na te kore o te whakawhirinaki ki nga kaihanga, me te whakaaro kaore e taea e ratou te mahi tika. Ko tenei hiahia mo te ngawari he whakatau mohio na nga kaihanga o te reo, a kia tino marama ai he aha i hiahiatia ai, me mohio tatou ki te hihiri o nga kaiwhakawhanake me nga mea e ngana ana ki te whakatutuki i roto i a Go.

Na he aha te take i tino ngawari ai? Anei etahi o nga korero e rua Rob Pike (āhua.: tetahi o nga kaihanga tahi o te reo Go):

Ko te mea nui i konei ko o tatou kaihōtaka (āhua.: Googlers) ehara i te hunga rangahau. He tamariki tonu ratou, ka tae mai ki a matou i muri i te ako, tera pea i ako ratou i te Java, i te C/C++ ranei, i te Python ranei. Kaore e taea e ratou te mohio ki tetahi reo nui, engari i te wa ano e hiahia ana matou ki te hanga rorohiko pai. No reira kia ngawari to ratou reo ki te mohio me te ako.
 
Me mohio ia, he rite tonu te korero ki a C. Ko nga kaihōtaka e mahi ana i Google ka timata i a ratou mahi moata, me te mohio ki nga reo tikanga, ina koa ko te whanau C. Ko te hiahia kia tere te hua i roto i te reo hootaka hou ko te tikanga kia kaua te reo e tino pukuriri.

He aha? Na ko te korero a Rob Pike ko nga kaiwhakawhanake i Google kaore i te tino pai, na reira i hanga he reo mo te hunga porangi (āhua.: wahangu) kia taea e ratou te mahi. He aha te ahua whakahihi ki o hoa mahi? I whakapono tonu ahau ko nga kaiwhakawhanake a Google kua tohua mai i nga mea tino maamaa me te pai rawa atu o te Ao. He pono ka taea e ratou te hapai i tetahi mea uaua ake?

Taonga o te tino ngawari

Ko te ngawari he kaupapa tika i roto i tetahi hoahoa, a he uaua te ngana ki te hanga i tetahi mea ngawari. Engari, i te wa e ngana ana ki te whakaoti (me te whakaatu ranei) nga raru uaua, i etahi wa ka hiahiatia he taputapu uaua. Ehara i te mea tino uaua me te uaua nga ahuatanga pai o te reo hootaka, engari he waahi waenga ka taea e te reo te hanga tangohanga huatau he maamaa te maarama me te whakamahi.

Ehara i te tino whakapuaki

Na tona kaha ki te ngawari, karekau a Go i nga hanganga e kiia ana he mea maori i etahi atu reo. He ahua pai pea tenei i te tuatahi, engari i roto i nga mahi ka puta he waehere kupu. Ko te take o tenei me maarama - me ngawari ma nga kaiwhakawhanake ki te panui i nga waehere a etahi atu, engari ko enei whakangawari ka kino noa iho te panui. Karekau he whakapototanga i roto i te Haere: he nui, he kore noa ranei.

Hei tauira, ka penei te ahua o te taputapu papatohu e panui ana i te stdin, i tetahi konae ranei mai i nga tautohetohe raina whakahau:

package main

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

func main() {

    flag.Parse()
    flags := flag.Args()

    var text string
    var scanner *bufio.Scanner
    var err error

    if len(flags) > 0 {

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

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

        scanner = bufio.NewScanner(file)

    } else {
        scanner = bufio.NewScanner(os.Stdin)
    }

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

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

    fmt.Println(text)
}

Ahakoa ka ngana ano tenei waehere ki te whanui ka taea, ka raru te kupu kaha a Go, na reira, ko te whakaoti rapanga ngawari ka hua te nui o te waehere.

Anei, hei tauira, he otinga ki te raru ano kei roto D:

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);
    }
}

A ko wai te mea ka taea te panui inaianei? Ka hoatu e ahau taku pooti ki a D. He pai ake te panui o tana waehere na te mea he marama ake tana korero mo nga mahi. Ka whakamahia e D nga ariā uaua ake (āhua.: karanga mahi kē и tauira) i roto i te tauira Haere, engari karekau he mea uaua ki te mohio ki a raatau.

Te reinga o te kape

He whakaaro rongonui mo te whakapai ake i a Go ko te whanui. Ka awhina tenei ki te karo i te kape koretake o te waehere hei tautoko i nga momo raraunga katoa. Hei tauira, ka taea te whakatinana i tetahi mahi hei whakarapopoto i te rarangi tauoti ma te kape-whakapiri i tana mahi taketake mo ia momo tauoti; kaore he huarahi ke atu:

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 int16Sum(list []int16) (uint64) {
    var result int16 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

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

func main() {

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

    fmt.Println(int8Sum(list8))
    fmt.Println(int16Sum(list16))
    fmt.Println(int32Sum(list32))
    fmt.Println(int64Sum(list64))
}

A kaore tenei tauira e mahi mo nga momo kua hainatia. Ko tenei huarahi ka tino takahi i te kaupapa kia kaua e whakahoki ano i a koe ano (maroke), tetahi o nga maataapono tino rongonui me te maarama, me te kore e aro ko wai te putake o nga hapa maha. He aha a Go i mahi ai i tenei? He ahua kino tenei o te reo.

He tauira ano mo D:

import std.stdio;
import std.algorithm;

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

He ngawari, he huatau me te tika ki te kaupapa. Ko te mahi e whakamahia ana i konei ko reduce mo te momo tauira me te whakatauira. Ae, he uaua ake ano tenei i te putanga Haere, engari ehara i te mea uaua ki nga kaiwhakatakoto kaupapa mohio. Ko tehea tauira he ngawari ake te pupuri me te ngawari ki te panui?

Momo ngawari te karo i te punaha

Ki taku whakaaro ko nga kaihōtaka a Go ka panui i tenei ka pahuka i te waha me te karanga, "Kei te he koe!" Ana, he huarahi ano hei hanga i tetahi mahi me nga momo momo, engari ka tino pakaru te punaha momo!

Tirohia tenei tauira o te whakatika reo poauau hei whakatika i te raru:

package main

import "fmt"
import "reflect"

func Reduce(in interface{}, memo interface{}, fn func(interface{}, interface{}) interface{}) interface{} {
    val := reflect.ValueOf(in)

    for i := 0; i < val.Len(); i++ {
        memo = fn(val.Index(i).Interface(), memo)
    }

    return memo
}

func main() {

    list := []int{1, 2, 3, 4, 5}

    result := Reduce(list, 0, func(val interface{}, memo interface{}) interface{} {
        return memo.(int) + val.(int)
    })

    fmt.Println(result)
}

Tenei whakatinanatanga Reduce i nama mai i te tuhinga Ko nga momo reo idiomatic i Go (āhua.: Kaore i kitea e au te whakamaoritanga, ka koa ahau ki te awhina koe ki tenei). Ana, ki te mea he kupu korero, e kino ana ahau ki te kite i tetahi tauira kore korero. Whakamahinga interface{} - he whakaipoipo, a i roto i te reo e tika ana kia karohia te patopato. He atanga kau tenei, ka whakatinanahia e nga momo katoa, ka taea e te katoa te herekore. He tino kino tenei ahua o te hotaka, a ehara ko tera anake. Ko nga mahi acrobatic penei me whakamahi te whakaata i te waa whakahaere. Ahakoa karekau a Rob Pike e pai ki nga tangata e tukino ana i tenei, i kii ia i tetahi o ana purongo.

He taputapu kaha tenei me whakamahi ma te tupato. Me karohia ki te kore e tino tika.

Ka tangohia e ahau nga tauira D hei utu mo tenei poauau. Me pehea e korero ai tetahi interface{} he pai ake te panui, he momo haumaru ranei?

Nga Aue o te Whakahaere Tiakitanga

Kei a Go tetahi punaha whakawhirinaki kua hangaia ki runga ake o nga kaiwhakarato manaaki rongonui VCS. Ko nga taputapu ka haere mai me Go e mohio ana mo enei ratonga ka taea te tango, te hanga, me te whakauru waehere mai i a raatau i te wa kotahi. Ahakoa he pai tenei, he hapa nui kei te whakaputanga! Ae, he pono ka taea e koe te tiki i te waehere puna mai i nga ratonga penei i te github me te bitbucket ma te whakamahi i nga taputapu Haere, engari kaore e taea e koe te whakaatu i te putanga. Na ano te ngawari i te utu o te whaihua. Kaore au e kaha ki te mohio ki nga tikanga o taua whakatau.

Whai muri i nga patai mo te otinga mo tenei raru, i hanga e te roopu whanaketanga Go miro huinga, i whakaraupapahia me pehea e taea ai e ratou tenei take. Ko ta ratou kupu tohutohu ko te kape noa i te katoa o te putunga ki roto i to kaupapa i tetahi ra ka waiho "penei." He aha ta ratou whakaaro? Kei a matou nga punaha whakahaere putanga whakamiharo me te tohu tohu me te tautoko putanga e kore e warewarehia e nga kaihanga Go me te kape noa i te waehere puna.

Ko nga putea ahurea mai i a Xi

Ki taku whakaaro, i whakawhanakehia a Go e nga tangata i whakamahi C i o ratau oranga katoa me te hunga kaore i pirangi ki te whakamatau i tetahi mea hou. Ka taea te korero ko te reo C me etahi atu wira(orig.: wira whakangungu). Karekau he whakaaro hou i roto, engari mo te tautoko mo te whakarara (he mea whakamiharo, he mea whakamiharo) he mea whakama tenei. He tino pai to whakarara i roto i te reo kopa.

Ko tetahi atu raruraru ko te Go he reo tikanga (penei i te whakamataku wahangu o C). Ka mutu koe ki te tuhi i te waehere i roto i te ahua tikanga e ahua tawhito me te tawhito. E mohio ana ahau ehara i te mea he matā hiriwa, engari he pai ki te tango i nga korero ki roto i nga momo me te whakarato whakaahuru.

Te ngawari mo to painga ake

I hoahoatia a Go kia ngawari, ka angitu ki taua whainga. I tuhia mo nga kaitakataka ngoikore, he reo tawhito hei tauira. Ka tae mai me nga taputapu ngawari ki te mahi i nga mea ngawari. He ngawari ki te panui me te ngawari ki te whakamahi.

He tino korero, he kore tino pai, he kino hoki mo nga kaiwhakatakoto kaupapa mohio.

Tuhinga mersinvald mo nga whakatikatika

Source: will.com

Tāpiri i te kōrero