Waa maxay sababta Go Design ay ugu xun tahay barnaamijyada smart

Bilihii la soo dhaafay waxaan u isticmaalayay Go fulinta. Caddeynta Fikradda (qiyaastii: code si loo tijaabiyo shaqeynta fikradda) waqtigiisa firaaqada ah, qayb ahaan si loo barto luqadda barnaamijka lafteeda. Barnaamijyada laftoodu waa kuwo aad u fudud oo aan ahayn ujeedada maqaalkan, laakiin waayo-aragnimada isticmaalka Go lafteeda ayaa u qalantaa dhawr eray oo ku saabsan. Tag balamaha inay noqdaan (qiyaastii: maqaal ku qoran 2015) luqad caan ah oo loogu talagalay koodh la cabbiri karo. Luqada waxaa sameeyay Google, halkaas oo si firfircoon loo isticmaalo. Gunta hoose, waxaan si daacad ah u maleynayaa in naqshadeynta luqadda Go ay u xun tahay barnaamijyada smart.

Naqshadeeyay barnaamijyada daciifka ah?

Go aad bay u fududahay in la barto, aad bay u fududahay in horudhacu uu i qaatay hal fiid, ka dib markii aan horeba u codayn karay si wax soo saar leh. Buugii aan baran jiray Go waxa la yidhaahdaa Hordhac Barnaamijyada Go (turjumaad), waxaa laga heli karaa online. Buuggu, sida koodhka isha laftiisa, waa sahlan tahay in la akhriyo, wuxuu leeyahay tusaalayaal kood wanaagsan, wuxuuna ka kooban yahay ilaa 150 bog oo hal mar lagu akhriyi karo. Fududeyntani marka hore waa mid soo jiidasho leh, gaar ahaan adduunka barnaamij-samaynta oo ay ka buuxaan tignoolajiyad aad u adag. Laakiin dhamaadka, mar dhow ama hadhow fikradda ayaa soo baxda: "Tani runtii ma sidaasaa?"

Google waxay sheeganeysaa Fududnaanta Go inay tahay meesha wax lagu iibinayo, luqaddana waxaa loogu talagalay wax soo saarka ugu badan ee kooxaha waaweyn, laakiin waan ka shakisanahay. Waxaa jira sifooyin maqan ama aad u faahfaahsan. Iyo dhammaan sababtoo ah kalsooni la'aanta horumarinta, iyada oo loo maleynayo in aysan awoodin inay wax sax ah sameeyaan. Rabitaankan fududaynta ayaa ahayd go'aan miyir leh oo ay sameeyeen naqshadeeyayaasha luqadda, iyo si aan si buuxda u fahamno sababta loogu baahan yahay, waa inaan fahamnaa dhiirigelinta horumariyeyaasha iyo waxay isku dayayeen inay ku gaaraan Go.

Haddaba maxaa looga dhigay mid fudud? Waa kuwan dhowr xigasho Rob Pike (qiyaastii: mid ka mid ah abuurayaasha luqadda Go):

Qodobka ugu muhiimsan ee halkan ku yaal waa in barnaamijyadeenna (qiyaastii: Googlers) maaha cilmi-baarayaal. Iyagu, sida caadiga ah, aad bay u da'yar yihiin, noo yimaaddaan markay wax bartaan, laga yaabee inay bartay Java, ama C/C++, ama Python. Ma fahmi karaan luqad weyn, laakiin isla markaa waxaan rabnaa inay abuuraan software wanaagsan. Sidaa darteed waa in afkoodu u fududaado inay fahmaan oo ay bartaan.
 
Waa in uu yaqaan, oo qiyaas ahaan u hadlaya sida C. Barmaamijyada ka shaqeeya Google waxay bilaabaan shaqooyinkooda goor hore waxayna inta badan yaqaanaan luqadaha nidaamka, gaar ahaan qoyska C. Shuruudda wax-soo-saarka degdega ah ee luqadda barmaamijka cusub waxay la macno tahay in afku aanu noqon mid xag-jir ah.

Waa maxay? Markaa Rob Pike wuxuu asal ahaan sheegay in horumariyeyaasha Google aysan sidaa u fiicneyn, taasina waa sababta ay luqad ugu abuureen nacasyada (qiyaastii: dumbed down) si ay u awoodaan inay wax qabtaan. Waa maxay nooca kibirka leh ee u fiirso asxaabtaada? Waxaan had iyo jeer rumaysnaa in horumarinta Google-ka laga soo doortay kuwa ugu iftiinka iyo ugu wanaagsan Dunida. Hubaal inay xamili karaan wax ka adag?

Farshaxanada fududaynta xad dhaafka ah

Inaad noqoto mid sahlan waa hadaf u qalma naqshad kasta, iskudayna in la sameeyo wax fudud waa adag tahay. Si kastaba ha noqotee, markaad isku dayeyso inaad xalliso (ama xitaa muujiso) dhibaatooyinka adag, mararka qaarkood qalab adag ayaa loo baahan yahay. Kakanaanta iyo qallafsanaantu maaha sifooyinka ugu wanaagsan ee luqadda barnaamij-samaynta, laakiin waxa jira meel dhexe oo afku ka abuuri karo muuqaallo xarrago leh oo si fudud loo fahmi karo loona isticmaali karo.

Aad uma muujin

Sababtoo ah sida ay uga go'an tahay fududaynta, Go waxaa ka maqan dhismooyin loo arko inay yihiin kuwo dabiici ah luqadaha kale. Tani waxay u ekaan kartaa fikrad wanaagsan marka hore, laakiin ficil ahaan waxay keentaa koodka hadalka. Sababta tani waa inay caddahay - waxay u baahan tahay inay u fududaato horumariyayaashu inay akhriyaan koodka dadka kale, laakiin dhab ahaantii fududayntan waxay waxyeello u geysataa akhrinta. Ma jiraan wax soo gaabin ah oo ku jira Go: ama wax badan ama waxba.

Tusaale ahaan, utility console ee akhriya stdin ama fayl laga soo qaatay dooda khadka taliska ayaa u ekaan doona sidan:

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

Inkasta oo koodhkani uu sidoo kale isku dayo inuu noqdo mid guud sida ugu macquulsan, Go's go'aanka qasabka ah ayaa jidka soo gala, natiijaduna, xallinta dhibaatada fudud waxay keentaa tiro badan oo kood ah.

Halkan, tusaale ahaan, waa xalka dhibaatada isku midka ah ee gudaha 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);
    }
}

Oo yaa hadda ka akhris badan? Waxaan codkayga siinayaa D. Xeerkiisu aad buu u akhriyi karaa sababtoo ah si cad ayuu u qeexayaa ficillada. D waxay isticmaashaa fikrado aad u adagqiyaastii: shaqo beddelka ah wac ΠΈ qaababka) marka loo eego tusaalaha Go, laakiin runtii ma jiraan wax adag oo ku saabsan fahamkooda.

Jahannamo koobiyeynta

Soo jeedin caan ah oo lagu hagaajinayo Go waa guud ahaan. Tani waxay ugu yaraan kaa caawin doontaa inaad iska ilaaliso koobiyaynta aan loo baahnayn ee koodka si ay u taageerto dhammaan noocyada xogta. Tusaale ahaan, shaqada lagu soo koobayo liistada isku dhafka ah looma hirgelin karo si kale aan ka ahayn in la koobiyeeyo shaqadiisa aasaasiga ah ee nooc kasta oo isugeyn ah; ma jirto hab kale:

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

Tusaalahani xitaa uma shaqeeyo noocyada saxeexan. Habkani wuxuu gabi ahaanba jebinayaa mabda'a ah inaadan ku celin naftaada (ENGAJI), Mid ka mid ah mabaadi'da ugu caansan uguna cad, iska indhatirka kaas oo ah isha khaladaadka badan. Muxuu Go sidan u sameeyaa? Tani waa arrin aad u xun oo luqadda ah.

Tusaale la mid ah D:

import std.stdio;
import std.algorithm;

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

Fudud, xarrago leh oo toos ah barta. Shaqada halkan loo isticmaalo waa reduce nooca template iyo predicate. Haa, tani mar kale way ka dhib badan tahay nooca Go, laakiin maaha mid ku adag barmaamijiyeyaasha caqliga leh inay fahmaan. Tusaalahee ayaa fudud in la ilaaliyo oo si sahlan loo akhriyo?

Habka fudud ee la dhaafo

Waxaan qiyaasayaa in Go programmers-ka akhriya tan ay afka ka xumbayn doonaan oo ay ku qaylin doonaan, "Waxaad samaynaysaa qalad!" Waa hagaag, waxaa jira hab kale oo loo sameeyo shaqo guud iyo noocyo, laakiin waxay si buuxda u jebisaa nidaamka nooca!

U fiirso tusaalahan hagaajinta luqadda nacasnimada ah si looga shaqeeyo dhibaatada:

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

Hirgelintan Reduce ayaa laga soo amaahday maqaalka Caadi ahaan guud ahaan Go (qiyaastii: Ma heli karin tarjumaadda, waan ku farxi doonaa haddii aad tan ku caawiso). Hagaag, haddii ay tahay mid sarbeeb ah, waan necbahay inaan arko tusaale aan sarbeeb ahayn. Isticmaalka interface{} - Farce, iyo luqadda waxa loo baahan yahay oo kaliya in la dhaafo teeb. Tani waa interface madhan oo dhammaan noocyada ayaa hirgeliya, taas oo u oggolaanaysa xorriyad buuxda qof kasta. Habkan barnaamijku waa mid aad u fool xun, mana aha intaas oo dhan. Xirfadaha acrobatic sida kuwan oo kale waxay u baahan yihiin isticmaalka milicsiga runtime. Xitaa Rob Pike ma jecla shakhsiyaadka ku xadgudba tan, sida uu ku sheegay mid ka mid ah warbixinadiisa.

Tani waa qalab awood leh oo ay tahay in si taxadar leh loo isticmaalo. Waa in laga fogaadaa ilaa aan loo baahnayn.

Waxaan qaadan lahaa qaab-dhismeedka D halkii aan macno lahayn. Sidee qof u odhan karaa interface{} Akhris badan ama xitaa nooca badbaado ah?

Xumaanta Maareynta Ku-tiirsanaanta

Go waxay leedahay nidaam ku-tiirsanaan ku dhex dhisan oo lagu dhisay korka bixiyeyaasha martigelinta ee caanka ah VCS. Aaladaha la socda Go waxay yaqaaniin adeegyadan oo waxay ka soo dejisan karaan, dhisi karaan, oo kood ka rakibi karaan hal mar. In kasta oo tani ay weyn tahay, waxaa jira cillad weyn oo la xiriirta daabacaadda! Haa, waa run inaad ka heli karto koodhka isha adeegyada sida github ama bitbucket adoo isticmaalaya qalabka Go, laakiin ma cayimi kartid nooca. Iyo mar kale fudaydka kharashka faa'iidada. Ma awoodo inaan fahmo macquulnimada go'aankan oo kale.

Ka dib markii la waydiiyo su'aalo ku saabsan xalinta dhibaatadan, kooxda horumarinta Go ayaa abuuray dunta madasha, kaas oo soo bandhigay sida ay u wajihi doonaan arrintan. Taladooda waxay ahayd in si fudud loo koobiyeeyo kaydka oo dhan mashruucaaga hal maalin oo aad uga tagto "sida uu yahay." Waa maxay jahannamada ay ka fikirayaan? Waxaan leenahay nidaamyo kontorool nooca cajiib ah oo leh calaamad weyn iyo taageero nooca taas oo abuurayaasha Go ay iska indhatiraan oo kaliya koobiyeeyaan koodka isha.

Shandad dhaqameed oo ka timid Xi

Fikradayda, Go waxaa horumariyay dadka isticmaala C noloshooda oo dhan iyo kuwa aan rabin inay tijaabiyaan wax cusub. Luqada waxaa lagu tilmaami karaa C oo leh taayiro dheeri ah (asal: giraangiraha tababarka). Ma jiraan fikrado cusub oo ku jira, marka laga reebo taageerada isbarbardhigga (taas oo, habka, waa cajiib) tanina waa ceeb. Waxa aad leedahay barbar-socod aad u fiican oo ah luuqad aan la isticmaali karin, oo curyaan ah.

Dhibaato kale oo soo jiidasho leh ayaa ah in Go uu yahay luuqad habraaceed (sida cabsida aamusan ee C). Waxaad ku dhammaynaysaa inaad u qorto kood hab habraac ah oo dareemaya mid soo jireen ah oo duugoobay. Waan ogahay in barnaamijka ku jihaysan shayga aanu ahayn xabbad qalin ah, laakiin waxa aad u fiicnaan lahayd in la awoodo in la soo koobo tafaasiisha noocyada oo la bixiyo koobab.

Fududeynta faa'iidadaada

Go waxaa loo qaabeeyey inay noqoto mid fudud waxayna ku guulaysatay hadafkaas. Waxa loo qoray barmaamijiyeyaasha daciifka ah, iyaga oo isticmaalaya luqad hore qaab tusaale ahaan. Waxay la socotaa qalab fudud oo lagu sameeyo waxyaabo fudud. Way fududahay in la akhriyo waana fududahay in la isticmaalo.

Aad bay u hadal badan tahay, aan la dhacsanayn, oo u xun barmaamijiyayaasha caqliga badan.

Бпасибо mersinvald wax ka beddelka

Source: www.habr.com

Add a comment