Nei Go Kwakashata kune Unsmart Programmers

Chinyorwa chakanyorwa semhinduro kune chakamboburitswa Antipodean article.

Nei Go Kwakashata kune Unsmart Programmers

Kwemakore maviri-pamwe chete apfuura ndanga ndichishandisa Go kushandisa yakasarudzika RADIUS server ine yakagadziridzwa yekubhadharisa system. Ndiri munzira, ndiri kudzidza kuoma kunzwisisa kwemutauro wacho. Zvirongwa pachazvo zviri nyore kwazvo uye hazvisi izvo chinangwa chechinyorwa chino, asi ruzivo rwekushandisa Go pacharo runokodzera mazwi mashoma mukudzivirira kwayo. Go yave kuita mutauro unonyanya kushandiswa kune yakakomba, scalable code. Mutauro wakagadzirwa neGoogle, uko unoshandiswa zvakanyanya. Pazasi, ndinofunga nemoyo wese kuti dhizaini yemutauro weGo yakashata kune UNintelligent programmers.

Yakagadzirirwa vasina simba programmers?

Vasina simba vanotaura nezvematambudziko. Hurukuro yakasimba pamusoro pemazano uye zviroto...

Go iri nyore kwazvo kudzidza, zviri nyore zvekuti unogona kuverenga kodhi pasina kana kudzidziswa zvachose. Ichi chimiro chemutauro chinoshandiswa mumakambani mazhinji epasi rose apo kodhi inoverengwa pamwe chete nevasiri vepakati nyanzvi (mamaneja, vatengi, nezvimwewo). Izvi zvakanakira nzira dzakaita seDesign Driven Development.
Kunyangwe manovice programmers anotanga kuburitsa kodhi yakanaka mushure mevhiki kana maviri. Bhuku randakadzidza mariri ndere β€œGo Programming” (naMark Summerfield). Bhuku racho rakanaka kwazvo, rinobata pane zvakawanda zvakasiyana-siyana zvemutauro. Mushure memitauro yakaoma zvisina basa seJava, PHP, kushomeka kwemashiripiti kunozorodza. Asi nokukurumidza kana kuti gare gare, vazhinji vane purogiramu vashoma vane pfungwa yekushandisa nzira dzekare mumunda mutsva. Izvi zvakakodzera here?

Rob Pike (iye mukuru ideologist wemutauro) akagadzira mutauro weGo semutauro weindasitiri uri nyore kunzwisisa uye unoshanda kushandisa. Mutauro wakagadzirirwa kubereka zvakanyanya muzvikwata zvikuru uye hapana kupokana nezvazvo. Vazhinji vanogadzira mapurogiramu vanogunun'una kuti pane zvakawanda zvavanoshaya. Ichi chishuwo chekureruka yaive sarudzo yekuziva nevagadziri vemutauro, uye kuti tinzwisise zvizere kuti nei ichidikanwa, tinofanira kunzwisisa kurudziro yevagadziri uye zvavaiyedza kuita muGo.

Saka nei yakaitwa nyore? Heano mashoma makotesheni kubva kuna Rob Pike:

Chinhu chakakosha apa ndechekuti vagadziri vedu havasi vaongorori. Ivo, sekutonga, vadiki kwazvo, vanouya kwatiri mushure mekudzidza, pamwe vakadzidza Java, kana C / C ++, kana Python. Havagoni kunzwisisa mutauro mukuru, asi panguva imwe chete tinoda kuti vagadzire software yakanaka. Ndicho chikonzero nei mutauro uchifanira kuva nyore kunzwisisa nokudzidza.

Anofanira kunge akajairana, achingotaura zvakafanana naC. Vagadziri vezvirongwa vanoshanda kuGoogle vanotanga mabasa avo nekukurumidza uye vanonyanya kujairana nemitauro yemaitiro, kunyanya mhuri yeC. Chinodiwa chekukurumidza kugadzira mumutauro mutsva wechirongwa zvinoreva kuti mutauro haufanirwe kuve wakanyanya.

Mashoko akachenjera, handizvo here?

Zvigadzirwa Zvekareruka

Kupfava chinhu chinodiwa chekunaka. Lev Tolstoy.

Kuzvichengeta zviri nyore ndechimwe chezvinangwa zvakakosha mune chero dhizaini. Sezvaunoziva, purojekiti yakakwana haisi purojekiti apo pasina chinhu chekuwedzera, asi chimwe chazvo chisina kubvisa. Vanhu vazhinji vanotenda kuti kugadzirisa (kana kunyange kuratidza) matambudziko akaoma, chimbo chakaoma chinodiwa. Zvisinei, hazvisi. Ngatitorei mutauro wePERL semuenzaniso. Nyanzvi dzezvemutauro dzakatenda kuti mugadziri wepurogiramu anofanira kunge aine nzira nhatu dzakasiyana dzekugadzirisa dambudziko rimwe chete. Mafungiro emutauro weGo akatora imwe nzira; vakasarudza kuti imwe nzira, asi yakanaka chaizvo, yakanga yakakwana kuzadzisa chinangwa. Iyi nzira ine nheyo yakakomba: iyo chete nzira iri nyore kudzidza uye yakaoma kukanganwa.

Vakawanda vanotamira kune dzimwe nyika vanonyunyuta kuti mutauro wacho hauna mashoko anoyevedza. Hongu, ichi ichokwadi, asi ichi ndicho chimwe chezvakanakira mutauro. Mutauro une hushoma hwemashiripiti - saka hapana ruzivo rwakadzama runodiwa kuti uverenge chirongwa. Kana iri verbosity yekodhi, iri harisi dambudziko zvachose. Chirongwa cheGolang chakanyorwa zvakanaka chinoverenga chakatwasuka, chine zvishoma kana kusarongeka. Pamusoro pezvo, kumhanya kwekuverenga chirongwa kunenge kurongeka kwehukuru kupfuura kumhanya kwekuinyora. Kana iwe uchifunga kuti kodhi yese ine yunifomu fomati (yakaitwa uchishandisa yakavakirwa-mukati gofmt kuraira), ipapo kuverenga mashoma ekuwedzera mitsara haisi dambudziko zvachose.

Kwete kutaura zvakanyanya

Art haibvumiri kana rusununguko rwayo rwakamanikidzwa. Kururama harisi basa rake.

Nekuda kwechido chekureruka, Go inoshaya zvivakwa izvo mune mimwe mitauro zvinoonekwa sechinhu chakasikwa nevanhu vajaira. Pakutanga zvingave zvisingaite, asi wobva waona kuti chirongwa chacho chiri nyore uye chisinganzwisisiki kuverenga.

Semuenzaniso, console utility iyo inoverenga stdin kana faira kubva kune yekuraira mutsara nharo inotaridzika seizvi:

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

Mhinduro yedambudziko rimwechete muD, kunyangwe ichitaridzika ipfupi, haisi nyore kuverenga

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

Gehena rekukopa

Munhu anotakura gehena mukati make. Martin Luther.

Vanotanga vanogara vachinyunyuta nezve Go maererano nekushaikwa kwemajini. Kugadzirisa nyaya iyi, vazhinji vavo vanoshandisa zvakananga kodhi yekukopa. Semuyenzaniso, basa rekupfupikisa runyoro rwenhamba, vakadaro vangave nyanzvi vanotenda kuti kushanda hakugone kuitwa neimwe nzira kunze kwekungonyora-kunamira kune yega yega data.

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

Mutauro une nzira dzakakwana dzekushandisa zvivakwa zvakadaro. Semuenzaniso, generic programming ingave yakanaka.

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

Uye, kunyangwe kodhi yedu yakave yakati rebei kupfuura yekare kesi, yave yakajairika. Naizvozvo, hazvizove zvakaoma kwatiri kuita ese arithmetic mashandiro.

Vazhinji vachataura kuti chirongwa muD chinotaridzika zvakanyanya kupfupika, uye ivo vachave vakarurama.

import std.stdio;
import std.algorithm;

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

Nekudaro, ipfupi chete, asi haina kunyanya kurongeka, sezvo iyo D kuita inofuratira zvachose dambudziko rekubata kukanganisa.

Muhupenyu chaihwo, sezvo kuoma kwepfungwa kunowedzera, gaka rinopera nekukurumidza. Mukaha unovhara zvakatonyanya kukurumidza kana uchinge wada kuita chiito chisingagone kuitwa uchishandisa mitauro yakajairwa.

Panyaya yekuchengetedza, kuwedzera, uye kuverenga, mumaonero angu, mutauro weGo unokunda, kunyangwe uchirasikirwa nezwi.

Generalized programming mune dzimwe nguva inotipa mabhenefiti asingarambike. Izvi zvinoratidzwa zvakajeka nemhando package. Saka, kuronga chero runyorwa, isu tinongoda kushandisa iyo sort.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)
}

Kana iwe ukatora chero yakavhurika sosi purojekiti uye womhanyisa iyo grep "interface{}" -R kuraira, iwe uchaona kuti kakawanda sei anovhiringidza maficha anoshandiswa. Macomrades ane pfungwa dzepedyo anobva angoti zvese izvi zvinokonzerwa nekushaikwa kwemageneric. Zvisinei, izvi hazvisi nguva dzose. Ngatitorei Delphi semuenzaniso. Kunyangwe kuvepo kweaya magenerics akafanana, ine yakakosha VARIANT mhando yekushanda nemhando dzedata. Mutauro weGo unoita zvimwe chetezvo.

Kubva pakanoni kusvika kune shiri duku

Uye straitjacket inofanira kukwana saizi yekupenga. Stanislav Lec.

Mafeni mazhinji akanyanyisa anogona kutaura kuti Go ine imwe nzira yekugadzira mageneric - kuratidza. Uye ivo vachave vakarurama ... asi muzviitiko zvisingawanzoitiki.

Rob Pike anotiyambira:

Ichi chishandiso chine simba chinofanira kushandiswa nekuchenjerera. Inofanira kudziviswa kunze kwekunge ichinyatsodikanwa.

Wikipedia inotiudza zvinotevera:

Reflection inoreva maitiro panguva iyo chirongwa chinogona kutarisa uye kugadzirisa chayo chimiro uye maitiro panguva yekuitwa. Iyo purogiramu paradigm iri pasi pekuratidzira inonzi reflective programming. Iyi imhando yemetaprogramming.

Nekudaro, sezvaunoziva, iwe unofanirwa kubhadhara kune zvese. Munyaya iyi ndeiyi:

  • kuoma mukunyora mapurogiramu
  • chirongwa kuuraya kumhanya

Naizvozvo, kufungisisa kunofanirwa kushandiswa nekuchenjerera, sechombo chakakura-caliber. Kushandisa kusingafungi kwekufungisisa kunotungamirira kumapurogiramu asingaverengeki, zvikanganiso zvenguva dzose uye zvishoma zvishoma. Chinhu chete chekuti snob programmer akwanise kuratidza kodhi yake pamberi pevamwe, vanonyanya pragmatic uye vane mwero vaanoshanda navo.

Cultural baggage kubva Xi? Kwete, kubva mumitauro yakawanda!

Pamwe chete nerombo, zvikwereti zvinosiiwa kune vadyi venhaka.

Pasinei nokuti vazhinji vanotenda kuti mutauro wacho wakavakirwa zvachose paC heritage, izvi hazvisizvo. Mutauro unobatanidza zvakawanda zvemitauro yakanakisa yekuronga.

nemarongerwo

Chekutanga, sintakisi yezvimiro zvegirama yakavakirwa pane syntax yemutauro C. Zvisinei, mutauro weDELPI waivawo nepesvedzero huru. Nokudaro, tinoona kuti maparentheses akawandisa, ayo anoderedza zvikuru kuverenga kwepurogiramu, akabviswa zvachose. Mutauro uyu unewo β€œ:=” mushandisi ari mumutauro weDELPHI. Pfungwa yemapakeji inokweretwa kubva kumitauro yakaita seADA. Kuziviswa kwemasangano asina kushandiswa kunokweretwa kubva mumutauro wePROLOG.

Semantics

Mapasuru aya aibva pane semantics yemutauro weDELPHI. Imwe neimwe pasuru inovhara data uye kodhi uye ine yakavanzika uye yeruzhinji masangano. Izvi zvinokutendera kuti uderedze iyo package interface kusvika padiki.

Kuitwa kwekuita nenzira yekutumwa kwakakweretwa kubva mumutauro weDELPHI.

Kuumbwa

Hazvina pasina chikonzero kuti kune jee: Go rakagadzirwa apo chirongwa cheC chaigadzirwa. Imwe yesimba remutauro ndeye ultra-fast compilation. Pfungwa iyi yakatorwa kubva mumutauro weDELPHI. Imwe neimwe Go package inoenderana neDELPI module. Aya mapakeji anodzokororwa chete kana zvichidikanwa. Naizvozvo, mushure mekugadzirisa kunotevera, haufanirwe kuunganidza chirongwa chese, asi kuti udzokorore chete mapakeji akachinjika uye mapakeji zvinoenderana neaya akachinjika mapakeji (uye kunyangwe zvakadaro, chete kana mapakeji epakeji achinja).

Zvigadzirwa zvepamusoro

Mutauro une zvakawanda zvakasiyana-siyana zvemhando yepamusoro zvivakwa zvisina hukama nemitauro yakaderera senge C.

  • Strings
  • Hash matafura
  • Zvimedu
  • Dhadha typing inokweretwa kubva mumitauro yakaita seRUBY (iyo, zvinosuruvarisa, vazhinji havanzwisise kana kushandisa kune yayo yakazara kugona).

Memory management

Memory management kazhinji inokodzera chinyorwa chakasiyana. Kana mumitauro yakaita seC ++, kutonga kunosiiwa zvachose kumugadziri, saka mumitauro yakazotevera senge DELPHI, modhi yekuverengera yakashandiswa. Neiyi nzira, mareferenzi emacyclic aisabvumidzwa, sezvo mapoka enherera akaumbwa, ipapo Go yakavaka-mukati yekuona masumbu akadaro (seC #). Pamusoro pezvo, muunganidzi wemarara anoshanda zvakanyanya kupfuura mazhinji anozivikanwa ekuita uye anogona kutoshandiswa kune akawanda chaiwo-nguva mabasa. Mutauro pachawo unoona mamiriro ezvinhu kana kukosha kwekuchengeta shanduko kuchigona kugoverwa pamurwi. Izvi zvinoderedza mutoro pane ndangariro maneja uye zvinowedzera kumhanya kwechirongwa.

Concurrency uye Concurrency

Kufanana uye kukwikwidzana kwemutauro kunodarika kurumbidzwa. Hapana mutauro wepasi-pasi unogona kukwikwidza uri kure neGo. Kuti zvive zvakanaka, zvakakosha kuziva kuti muenzaniso hauna kugadzirwa nevanyori vemutauro, asi wakangokweretwa kubva kune yakanaka yekare ADA mutauro. Mutauro unokwanisa kugadzirisa mamirioni ekubatanidza kwakafanana uchishandisa ese maCPU, uku uine kurongeka kwehukuru matambudziko asina kuomesesa ane deadlocks uye dzinza mamiriro akajairwa kune akawanda-tambo kodhi.

Zvimwe zvinobatsira

Kana zvichibatsira, munhu wese achave asina udyire.

Mutauro unotipawo akati wandei mabhenefiti asina kupokana:

  • Iro rimwe faira rinogoneka mushure mekuvaka purojekiti inorerutsa zvakanyanya kutumira kwezvikumbiro.
  • Static typing uye mhando inference inogona kuderedza zvakanyanya huwandu hwezvikanganiso mukodhi yako, kunyangwe pasina kunyora bvunzo. Ndinoziva vamwe vanogadzira mapurogiramu vanoita vasina kunyora bvunzo zvachose uye mhando yekodhi yavo haina kutambura zvakanyanya.
  • Yakareruka-muchinjika-kuunganidza uye yakanakisa kutakurika kweyakajairwa raibhurari, iyo inorerutsa zvakanyanya kuvandudzwa kwemuchinjika-chikuva application.
  • RE2 mataurirwo enguva dzose ane shinda-yakachengeteka uye ane fungidziro yenguva yekuurayiwa.
  • Raibhurari ine simba yakajairika inobvumira akawanda mapurojekiti kuita pasina wechitatu-bato masisitimu.
  • Mutauro une simba rakakwana kuti utarise pane dambudziko pane kuti rigadziriswe sei, asi wakaderera zvakakwana zvekuti dambudziko rinogona kugadziriswa nemazvo.
  • Iyo Go eco system yatove nemidziyo yakagadziridzwa kunze kwebhokisi kune ese nguva: bvunzo, zvinyorwa, mapakeji manejimendi, ane simba linters, kodhi yekugadzira, nhangemutange mamiriro detector, nezvimwe.
  • Enda vhezheni 1.11 yakaunza yakavakirwa-mukati semantic kutsamira manejimendi, yakavakirwa pamusoro peakakurumbira VCS yekutambira. Ese maturusi anoumba Go ecosystem anoshandisa masevhisi aya kudhawunirodha, kuvaka, uye kuisa kodhi kubva kwavari mune imwe yakadonha swoop. Uye ndizvo zvakanaka. Nekusvika kwevhezheni 1.11, dambudziko repakeji vhezheni rakagadziriswawo zvizere.
  • Nekuti iyo yakakosha pfungwa yemutauro kudzikisa mashiripiti, mutauro unokurudzira vanogadzira kuti vaite kukanganisa kubata zvakajeka. Uye izvi ndizvozvo, nekuti zvikasadaro, zvinongokanganwa nezve kukanganisa kubata zvachose. Chimwe chinhu ndechekuti vazhinji vanogadzira vanoregeredza nemaune kubata kukanganisa, vachisarudza panzvimbo yekuzvigadzirisa kuti vangoendesa kukanganisa kumusoro.
  • Mutauro hauite yemhando yepamusoro yeOOP, sezvo muchimiro chayo chakachena hapana hunhu muGo. Nekudaro, iyi haisi dambudziko kana uchishandisa interfaces. Kusavapo kweOOP kunoderedza zvakanyanya chipinganidzo chekupinda kune vanotanga.

Kureruka kwekubatsira munharaunda

Zviri nyore kuomesa, zvakaoma kurerutsa.

Go rakagadzirirwa kuve nyore uye rinobudirira pane icho chinangwa. Yakanyorerwa vagadziri vemapurogiramu vanonzwisisa mabhenefiti ekushanda pamwe chete uye vaneta nekusiyana kusingagumi kwemitauro yeEnterprise-level. Kuve nediki diki seti yezvimiro zvechigadzirwa mune yayo arsenal, hazvigone kuchinjika nekufamba kwenguva, saka vanogadzira vane nguva yakawanda yakasunungurwa kuti ivandudzwe, uye kwete yekusingaperi kudzidza mitauro mitsva.

Makambani anogamuchirawo mabhenefiti akati wandei: chipingamupinyi chakaderera chinovabvumira kukurumidza kutsvaga nyanzvi, uye kusachinjika kwemutauro kunovabvumira kushandisa kodhi imwechete kunyangwe mushure memakore gumi.

mhedziso

Huropi hukuru hahuna kumbobvira hwaita chero nzou muhwina weNobel Prize.

Kune avo vanogadzira mapurogiramu avo ego yavo inotungamira pamusoro pemweya wechikwata, pamwe nevanofungidzira vanoda matambudziko edzidzo uye kusingaperi "kuzvivandudza", mutauro wakaipa chaizvo, sezvo uri mutauro wechinangwa-wese-unyanzvi usingakubvumidze kuwana. aesthetic mafaro kubva mumhedzisiro yebasa rako uye uzviratidze iwe nyanzvi pamberi pevamwe vatinoshanda navo (chero bedzi isu tinoyera hungwaru nemaitiro aya, uye kwete neIQ). Kufanana nechinhu chiri chose muupenyu, inhau yezvaunokoshesa. Kufanana nezvose zvakakosha zvitsva, mutauro wakatosvika kure kure kubva pakuramba kwepasi rose kusvika pakugamuchirwa kwevanhu vakawanda. Mutauro wacho wakangwara mukupfava kwawo, uye, sezvamunoziva, zvese zvine hungwaru zviri nyore!

Source: www.habr.com

Voeg