Me yasa Go yayi kyau ga masu shirye-shirye marasa wayo

An rubuta labarin a matsayin martani ga wanda aka buga a baya labarin antipodean.

Me yasa Go yayi kyau ga masu shirye-shirye marasa wayo

A cikin shekaru biyu da suka wuce na kasance ina amfani da Go don aiwatar da sabar RADIUS na musamman tare da ingantaccen tsarin lissafin kuɗi. A kan hanya, Ina koyon rikitattun harshe da kansa. Shirye-shiryen da kansu suna da sauƙi kuma ba manufar wannan labarin ba, amma ƙwarewar amfani da Go kanta ya cancanci 'yan kalmomi don kare shi. Go yana ƙara zama babban yare don mahimmanci, lambar ƙima. Google ne ya kirkiro harshen, inda ake amfani da shi sosai. A ƙasa, ina jin gaskiya cewa ƙirar harshen Go ba shi da kyau ga masu shirye-shirye marasa hankali.

An tsara don masu shirye-shirye masu rauni?

Masu rauni suna magana akan matsaloli. Magana mai karfi game da ra'ayoyi da mafarkai ...

Tafi yana da sauƙin koyo, da sauƙi har zaka iya karanta lambar ba tare da wani horo ba kwata-kwata. Ana amfani da wannan fasalin harshe a yawancin kamfanoni na duniya lokacin da aka karanta lambar tare da ƙwararrun ƙwararrun ƙwararrun ƙwararrun ƙwararrun (manjoji, abokan ciniki, da sauransu). Wannan ya dace sosai don hanyoyin kamar Ƙirƙirar Ƙirƙirar Ƙira.
Hatta novice shirye-shirye sun fara samar da ingantaccen code bayan mako guda ko biyu. Littafin da na yi nazarinsa shi ne “Go Programming” (na Mark Summerfield). Littafin yana da kyau sosai, ya taɓo abubuwa da yawa na harshen. Bayan yaruka masu rikitarwa kamar Java, PHP, rashin sihiri yana da daɗi. Amma ko ba dade ko ba dade, yawancin masu tsara shirye-shirye suna da ra'ayin yin amfani da tsofaffin hanyoyin a cikin sabon filin. Shin wannan ya zama dole?

Rob Pike (babban masanin akidar harshen) ya kirkiro yaren Go a matsayin harshen masana'antu mai sauƙin fahimta da tasiri don amfani. An tsara yaren don iyakar yawan aiki a cikin manyan ƙungiyoyi kuma babu shakka game da shi. Da yawa daga cikin novice shirye-shirye na korafin cewa akwai abubuwa da yawa da suka ɓace. Wannan sha'awar sauƙi shine yanke shawara mai hankali ta masu zanen harshe, kuma don cikakken fahimtar dalilin da yasa ake buƙata, dole ne mu fahimci kwarin gwiwar masu haɓakawa da abin da suke ƙoƙarin cimma a Go.

To me yasa aka yi shi da sauki? Anan akwai wasu maganganu daga Rob Pike:

Babban abin lura anan shine masu shirye-shiryen mu ba masu bincike bane. Su, a ka’ida, matasa ne, suna zuwa wurinmu bayan sun yi karatu, watakila sun karanci Java, ko C/C++, ko Python. Ba za su iya fahimtar babban harshe ba, amma a lokaci guda muna son su ƙirƙira software mai kyau. Shi ya sa ya kamata harshen ya zama mai sauƙin fahimta da koyo.

Ya kamata ya zama saba, kusan yana magana kama da C. Masu shirye-shirye da ke aiki a Google suna fara ayyukansu da wuri kuma galibi sun saba da yarukan tsari, musamman dangin C. Bukatun don saurin samarwa a cikin sabon yaren shirye-shirye yana nufin kada harshen ya kasance mai tsattsauran ra'ayi.

Kalmomi masu hikima, ko ba haka ba?

Kayan Aiki na Sauƙi

Sauƙi shine yanayin da ake buƙata don kyakkyawa. Lev Tolstoy.

Tsayawa da sauƙi shine ɗayan mahimman manufofin kowane ƙira. Kamar yadda ka sani, cikakken aikin ba aikin da babu wani abu da za a ƙara, amma wanda babu abin da za a cire. Mutane da yawa sun gaskata cewa don magance (ko ma bayyana) matsaloli masu rikitarwa, ana buƙatar kayan aiki mai mahimmanci. Duk da haka, ba haka ba ne. Bari mu ɗauki harshen PERL misali. Masana akidar harshe sun yi imanin cewa ya kamata mai shirya shirye-shirye ya kasance yana da aƙalla hanyoyi uku daban-daban don magance matsala ɗaya. Masu akidar harshen Go sun bi wata hanya ta daban, sun yanke shawarar cewa hanya daya, amma mai kyau kwarai, ta isa a cimma burin. Wannan hanya tana da tushe mai mahimmanci: hanya ɗaya ce ta fi sauƙi don koyo kuma mafi wuyar mantawa.

Yawancin bakin haure suna korafin cewa yaren ba ya dauke da kyawawan abubuwa masu kyau. Haka ne, wannan gaskiya ne, amma wannan yana ɗaya daga cikin manyan fa'idodin harshe. Harshen ya ƙunshi ƙaramin sihiri - don haka ba a buƙatar zurfin ilimi don karanta shirin. Amma game da gaskiyar lambar, wannan ba matsala bace. Shirye-shiryen Golang da aka rubuta da kyau yana karantawa a tsaye, ba tare da ɗan tsari ko kaɗan ba. Bugu da kari, saurin karanta shirin ya kasance akalla tsari ne na girma fiye da saurin rubuta shi. Idan kun yi la'akari da cewa duk lambar tana da tsari iri ɗaya (wanda aka yi ta amfani da ginanniyar umarnin gofmt), to karanta wasu ƙarin layukan ba matsala ko kaɗan.

Ba mai bayyanawa sosai ba

Art ba ya jurewa lokacin da aka tauye 'yancinsa. Daidaito ba alhakinsa ba ne.

Saboda sha'awar sauƙaƙa, Go ya rasa abubuwan ginawa waɗanda a cikin wasu yarukan ana ɗauka a matsayin wani abu na halitta da mutane suka saba da su. Da farko yana iya zama da ɗan wahala, amma sai ka lura cewa shirin ya fi sauƙi kuma babu shakka don karantawa.

Misali, kayan aikin wasan bidiyo wanda ke karanta stdin ko fayil daga gardamar layin umarni zai yi kama da haka:

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

Maganin matsalar guda ɗaya a cikin D, kodayake ya ɗan gajarta, ba shi da sauƙin karantawa

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

Jahannama ta kwafi

Mutum yana ɗaukar wuta a cikin kansa. Martin Luther.

Masu farawa suna kokawa game da Go dangane da rashin kayan aiki. Don magance wannan batu, yawancinsu suna amfani da kwafin lambar kai tsaye. Misali, aiki don tara lissafin adadin adadin, irin waɗannan ƙwararru sun yi imanin cewa ba za a iya aiwatar da aikin ta kowace hanya ba ta hanyar kwafi mai sauƙi ga kowane nau'in bayanai.

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

Harshen yana da isassun hanyoyin aiwatar da irin waɗannan gine-gine. Misali, shirye-shiryen gabaɗaya zai yi kyau.

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

Kuma, kodayake lambar mu ta zama ɗan tsayi fiye da na baya, ya zama gama gari. Don haka, ba zai yi mana wahala ba wajen aiwatar da duk ayyukan lissafi.

Mutane da yawa za su ce shirin a D ya fi guntu sosai, kuma za su yi daidai.

import std.stdio;
import std.algorithm;

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

Duk da haka, ya fi guntu, amma bai fi daidai ba, tun da aiwatar da D ya yi watsi da matsalar kuskure.

A rayuwa ta hakika, yayin da rikitattun dabaru ke karuwa, tazarar tana raguwa da sauri. Tazarar tana rufewa da sauri lokacin da kake buƙatar yin wani aikin da ba za a iya yi ta amfani da madaidaitan masu sarrafa harshe ba.

Dangane da kiyayewa, iyawa, da iya karantawa, a ganina, yaren Go ya yi nasara, ko da yake ya yi hasara a cikin magana.

Gabaɗaya shirye-shirye a wasu lokuta yana ba mu fa'idodi da ba za a iya musantawa ba. Ana kwatanta wannan a fili ta hanyar nau'in kunshin. Don haka, don warware kowane jeri, kawai muna buƙatar aiwatar da nau'in.Interface interface.

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

Idan ka ɗauki kowane aikin tushen buɗewa kuma ka gudanar da umarnin “interface{}” -R na grep, za ka ga sau nawa ana amfani da muƙamuƙi masu ruɗani. Nan da nan ’yan uwa na kurkusa za su ce duk wannan ya faru ne saboda rashin na’urorin zamani. Duk da haka, ba koyaushe haka lamarin yake ba. Bari mu ɗauki DELPHI a matsayin misali. Duk da kasancewar waɗannan nau'ikan nau'ikan nau'ikan bayanai iri ɗaya, ya ƙunshi nau'in VARIANT na musamman don aiki tare da nau'ikan bayanan sabani. Harshen Go yana yin haka.

Daga cannon zuwa sparrows

Kuma madaidaicin dole ne ya dace da girman hauka. Stanislav Lec.

Yawancin matsananciyar magoya baya na iya yin iƙirarin cewa Go yana da wata hanya don ƙirƙirar ƙirƙira - tunani. Kuma za su kasance daidai ... amma kawai a lokuta masu wuya.

Rob Pike ya gargaɗe mu:

Wannan kayan aiki ne mai ƙarfi wanda ya kamata a yi amfani da shi tare da taka tsantsan. Yakamata a guji shi sai dai idan ya zama dole.

Wikipedia yana gaya mana kamar haka:

Tunani yana nufin tsarin da shirin zai iya sa ido da kuma gyara tsarinsa da halayensa yayin aiwatarwa. Matsalolin shirye-shirye da ke ƙarƙashin tunani ana kiransa shirye-shiryen tunani. Wannan nau'in metaprogramming ne.

Koyaya, kamar yadda kuka sani, dole ne ku biya komai. A wannan yanayin shi ne:

  • wahalar rubuta shirye-shirye
  • gudun aiwatar da shirin

Don haka, dole ne a yi amfani da tunani tare da taka tsantsan, kamar babban makami. Yin amfani da tunani marar tunani yana haifar da shirye-shiryen da ba za a iya karantawa ba, kurakurai akai-akai da ƙananan gudu. Abin da kawai mai shirye-shiryen snob zai iya nuna lambar sa a gaban sauran abokan aiki, mafi kwarewa da ladabi.

Kayan al'adu daga Xi? A'a, daga yawan harsuna!

Tare da arziki, basusuka kuma an bar su ga magada.

Duk da cewa mutane da yawa sun gaskata cewa harshen gaba ɗaya ya dogara ne akan al'adun C, wannan ba haka bane. Harshen ya ƙunshi sassa da yawa na mafi kyawun harsunan shirye-shirye.

ginin kalma

Da farko dai, tsarin tsarin nahawu ya ginu ne a kan sintax na harshen C. Koyaya, yaren DELPHI shima yana da tasiri sosai. Don haka, za mu ga cewa an cire ɓangarorin da ba su da yawa, waɗanda ke rage yawan karanta shirin gaba ɗaya. Har ila yau, harshen ya ƙunshi ma'aikacin ":=" da ke cikin harshen DELPHI. An aro manufar fakiti daga harsuna kamar ADA. An aro ayyana abubuwan da ba a yi amfani da su ba daga yaren PROLOG.

Semantics

Fakitin sun dogara ne akan ilimin tarukan harshe na DELPHI. Kowane fakiti yana tattara bayanai da lamba kuma ya ƙunshi ƙungiyoyi masu zaman kansu da na jama'a. Wannan yana ba ku damar rage ƙirar fakiti zuwa ƙarami.

An aro aikin aiwatarwa ta hanyar wakilai daga yaren DELPHI.

Haɗawa

Ba tare da dalili ba ne akwai abin dariya: An haɓaka Go yayin da ake haɗa shirin C. Ɗayan ƙarfin harshe shine haɗa shi da sauri. An aro ra'ayin daga yaren DELPHI. Kowane fakitin Go yayi daidai da tsarin DELPHI. Ana sake tattara waɗannan fakitin kawai idan da gaske ya zama dole. Don haka, bayan gyare-gyare na gaba, ba kwa buƙatar tattara duk shirin, amma a sake tattara fakitin da aka canza kawai da fakiti waɗanda suka dogara da waɗannan fakitin da aka canza (har ma a lokacin, kawai idan musaya ɗin fakitin sun canza).

Gine-gine masu girma

Harshen ya ƙunshi manyan gine-gine daban-daban waɗanda ba su da alaƙa da ƙananan harsuna kamar C.

  • igiyoyi
  • Tables na Hash
  • Yanki
  • An aro buga duck daga harsuna kamar RUBY (wanda, da rashin alheri, da yawa ba sa fahimta ko amfani da cikakken damarsa).

Gudanar da ƙwaƙwalwar ajiya

Gudanar da ƙwaƙwalwar ajiya gabaɗaya ya cancanci labarin daban. Idan a cikin yaruka kamar C ++, an bar ikon gaba ɗaya ga mai haɓakawa, to, a cikin harsunan baya kamar DELPHI, an yi amfani da ƙirar ƙirgawa. Ta wannan hanyar, ba a ba da izinin yin amfani da nassoshi na cyclic ba, tunda an kafa ƙungiyoyin marayu, to Go ya gina abubuwan gano irin waɗannan gungu (kamar C #). Bugu da kari, mai tara shara yana da inganci fiye da yadda aka sani da aiwatarwa a halin yanzu kuma ana iya amfani da shi don ayyuka da yawa na ainihin lokaci. Harshen da kansa yana gane yanayi lokacin da za'a iya kasafta ƙimar da za a adana ma'auni akan tari. Wannan yana rage nauyin mai sarrafa ƙwaƙwalwar ajiya kuma yana ƙara saurin shirin.

Concurrency da kuma Concurrency

Daidaitawar harshe da gasa ya wuce yabo. Babu ƙananan harshe da zai iya yin gasa da nisa da Go. Don yin gaskiya, yana da kyau a lura cewa ba a ƙirƙira samfurin ba daga marubutan harshe, amma an aro kawai daga tsohuwar harshen ADA mai kyau. Harshen yana da ikon sarrafa miliyoyin haɗin kai tsaye ta amfani da duk CPUs, yayin da yana da tsari na ƙayyadaddun matsalolin da ba su da rikitarwa tare da makulli da yanayin tsere waɗanda ke kama da lambar zare da yawa.

Ƙarin fa'idodi

Idan an samu riba, kowa zai zama marar son kai.

Harshe kuma yana ba mu fa'idodi da yawa mara shakka:

  • Fayil guda ɗaya da za a iya aiwatarwa bayan gina aikin yana sauƙaƙe ƙaddamar da aikace-aikacen.
  • Buga a tsaye da kuma nau'in bayyani na iya rage yawan kurakurai a lambar ku, koda ba tare da gwajin rubutawa ba. Na san wasu masu shirye-shiryen da suke yin ba tare da rubuta gwaje-gwaje ba kwata-kwata kuma ingancin lambar su ba ya wahala sosai.
  • Ƙirƙirar giciye mai sauƙi mai sauƙi da ingantaccen ɗaukar hoto na daidaitaccen ɗakin karatu, wanda ke sauƙaƙa haɓaka haɓaka aikace-aikacen dandamali.
  • Kalmomin RE2 na yau da kullun suna da aminci-zari kuma suna da lokutan aiwatar da tsinkaya.
  • Madaidaicin ɗakin karatu mai ƙarfi wanda ke ba da damar yawancin ayyuka don yin ba tare da tsarin ɓangare na uku ba.
  • Harshen yana da ƙarfi sosai don mai da hankali kan matsalar maimakon yadda za a magance ta, amma ba shi da ƙarancin matakin da za a iya magance matsalar yadda ya kamata.
  • Tsarin eco na Go ya riga ya ƙunshi kayan aikin haɓakawa daga cikin akwatin don kowane lokaci: gwaje-gwaje, takaddun bayanai, sarrafa fakiti, linters masu ƙarfi, tsara lambar, mai gano yanayin tsere, da sauransu.
  • Go nau'in 1.11 ya gabatar da ginanniyar gudanarwar dogaro da ma'ana, wanda aka gina akan mashahurin VCS hosting. Duk kayan aikin da suka haɗa da yanayin yanayin Go suna amfani da waɗannan ayyukan don zazzagewa, ginawa, da shigar da lamba daga gare su gaba ɗaya. Kuma hakan yayi kyau. Da zuwan sigar 1.11, matsalar sigar fakitin ita ma an warware gaba ɗaya.
  • Saboda ainihin ra'ayin harshen shine a rage sihiri, harshen yana ƙarfafa masu haɓakawa don yin kuskure a bayyane. Kuma wannan daidai ne, domin in ba haka ba, zai manta kawai game da sarrafa kuskure gaba ɗaya. Wani abu kuma shine yawancin masu haɓakawa suna watsi da kuskuren da gangan, suna fifita maimakon sarrafa su kawai su tura kuskuren zuwa sama.
  • Harshen ba ya aiwatar da tsarin OOP na gargajiya, tun da a cikin tsaftataccen tsari babu wani abin kirki a cikin Go. Koyaya, wannan ba matsala bane yayin amfani da musaya. Rashin OOP yana rage shingen shiga don farawa.

Sauƙi don amfanin al'umma

Yana da sauƙi a rikitarwa, da wuya a sauƙaƙe.

An tsara Go don zama mai sauƙi kuma ya yi nasara a wannan burin. An rubuta shi don masu tsara shirye-shirye masu wayo waɗanda suka fahimci fa'idodin aikin haɗin gwiwa kuma sun gaji da sauyin yanayi mara iyaka na harsunan matakin ciniki. Samun ɗan ƙaramin tsari na tsarin daidaitawa a cikin arsenal ɗin sa, a zahiri ba shi da sauye-sauye kan lokaci, don haka masu haɓakawa suna da ɗan lokaci mai yawa don ci gaba, kuma ba don nazarin sabbin harshe ba.

Kamfanoni kuma suna karɓar fa'idodi da yawa: ƙananan shingen shigarwa yana ba su damar samun ƙwararrun da sauri, kuma rashin daidaituwa na harshe yana ba su damar yin amfani da lambar guda ɗaya ko da bayan shekaru 10.

ƙarshe

Girman girman kwakwalwa bai taɓa sanya kowane giwa ya zama wanda ya ci kyautar Nobel ba.

Ga masu shirye-shiryen da girman kai ya ke da fifiko fiye da ruhin kungiya, da kuma masu ilimin falsafa masu son kalubale na ilimi da "inganta kansu" mara iyaka, harshen ya yi muni sosai, tun da yake yaren fasaha ne na gaba ɗaya wanda ba ya ba ku damar samun. jin daɗin jin daɗi daga sakamakon aikinku kuma ku nuna wa kanku ƙwararru a gaban abokan aiki (idan har muna auna hankali ta waɗannan sharuɗɗan, kuma ba ta IQ ba). Kamar komai na rayuwa, lamari ne na fifikon mutum. Kamar duk sababbin sababbin abubuwa, harshen ya riga ya yi nisa daga ƙin yarda da duniya baki ɗaya. Harshen yana da basira a cikin sauƙi, kuma, kamar yadda kuka sani, duk abin da ke da hankali yana da sauƙi!

source: www.habr.com

Add a comment