Nahoana no ratsy ny Go ho an'ny Programmer Unsmart

Ny lahatsoratra dia nosoratana ho valin'ny navoaka teo aloha lahatsoratra antipodean.

Nahoana no ratsy ny Go ho an'ny Programmer Unsmart

Tao anatin'ny roa taona miampy dia nampiasa Go aho hampihatra mpizara RADIUS manokana miaraka amin'ny rafitra faktiora novolavolaina. Teny an-dalana, mianatra ny saro-piaro amin'ny fiteny mihitsy aho. Ny programa dia tena tsotra ary tsy ny tanjon'ity lahatsoratra ity, fa ny traikefa amin'ny fampiasana ny Go dia mendrika teny vitsivitsy ho fiarovana azy. Lasa fiteny mahazatra kokoa ho an'ny kaody matotra sy azo scalable ny Go. Noforonin'i Google ilay fiteny, izay ampiasana azy io. Fehiny, heveriko marina fa ratsy ho an'ny mpandrindra UNintelligent ny famolavolana ny fiteny Go.

Natao ho an'ny mpandrindra programa malemy?

Miresaka olana ny malemy. Ny resaka mafy momba ny hevitra sy ny nofinofy...

Tena mora ianarana ny mandeha, mora ka afaka mamaky ilay kaody tsy misy fiofanana mihitsy. Ity endri-pitenenana ity dia ampiasaina amin'ny orinasa eran-tany maro, rehefa vakiana miaraka amin'ireo manam-pahaizana manokana (mpitantana, mpanjifa, sns.) ny fehezan-dalàna. Tena mety amin'ny fomba fiasa toy ny Design Driven Development.
Na ireo mpandrindra vaovao aza dia manomboka mamokatra kaody mendrika rehefa afaka herinandro na roa. Ny boky nianarako dia “Go Programming” (nataon’i Mark Summerfield). Tena tsara ilay boky, mikasika ny nuance maro amin'ny fiteny. Taorian'ny fiteny sarotra tsy ilaina toa ny Java, PHP, dia mamelombelona ny tsy fahampian'ny majika. Saingy na ho ela na ho haingana, maro ny programmer voafetra no manana hevitra hampiasa fomba taloha amin'ny sehatra vaovao. Tena ilaina ve izany?

Namorona ny fiteny Go ho fiteny indostrialy mora azo sy mahomby ampiasaina i Rob Pike (ilay ideolojia fototra amin'ny fiteny). Ny fiteny dia natao ho an'ny vokatra ambony indrindra amin'ny ekipa lehibe ary tsy misy isalasalana izany. Maro ny programmer vaovao no mitaraina fa misy endri-javatra maro tsy hitany. Fanapahan-kevitra avy amin'ny mpamorona ny fiteny io faniriana fahatsorana io, ary mba hahatakarana tanteraka ny antony nilaina izany, dia tsy maintsy takatsika ny antony manosika ny mpamorona sy ny ezak'izy ireo hotratrarina ao amin'ny Go.

Koa nahoana izy io no natao tsotra? Ireto misy teny vitsivitsy avy amin'i Rob Pike:

Ny hevi-dehibe eto dia ny hoe tsy mpikaroka ny mpandrindra antsika. Matetika izy ireo dia tanora, tonga eto amintsika rehefa avy nianatra, angamba nianatra Java, na C/C++, na Python. Tsy mahazo fiteny lehibe izy ireo, saingy tianay koa izy ireo hamorona rindrambaiko tsara. Izany no mahatonga ny fiteny ho mora azo sy mora ianarana.

Tokony ho zatra izy, mitovitovy amin'ny C. Ireo mpandrindra miasa ao amin'ny Google dia manomboka ny asany aloha ary mahazatra amin'ny fiteny ara-dalàna, indrindra ny fianakaviana C. Ny fepetra takiana amin'ny famokarana haingana amin'ny fiteny fandaharana vaovao dia midika fa tsy tokony ho radical loatra ilay fiteny.

Teny feno fahendrena, sa tsy izany?

Artifacts of Simplicity

Ny fahatsorana dia fepetra ilaina amin'ny hatsaran-tarehy. Lev Tolstoy.

Ny fitazonana azy ho tsotra dia iray amin'ireo tanjona manan-danja indrindra amin'ny endrika rehetra. Araka ny fantatrao, ny tetikasa tonga lafatra dia tsy tetikasa izay tsy misy na inona na inona ampiana, fa iray izay tsy misy na inona na inona esorina. Olona maro no mino fa mba hamahana (na hanehoana mihitsy aza) olana sarotra dia ilaina ny fitaovana sarotra. Na izany aza, tsy izany. Andeha horaisintsika ohatra ny fiteny PERL. Ny ideolojian'ny fiteny dia nino fa ny programmer iray dia tokony hanana fomba telo farafahakeliny hamahana olana iray. Nizotra tamin'ny lalana hafa ireo ideolojian'ny fiteny Go; Ity fomba fiasa ity dia manana fototra matotra: ny hany fomba dia mora kokoa ny mianatra ary sarotra ny manadino.

Maro ireo mpifindra monina no mitaraina fa tsy misy abstractions kanto ilay fiteny. Eny, marina izany, fa io no iray amin'ireo tombony lehibe indrindra amin'ny fiteny. Ny fiteny dia misy ody kely indrindra - noho izany dia tsy mila fahalalana lalina ny mamaky ny fandaharana. Raha ny momba ny verbosity ny code dia tsy olana mihitsy izany. Ny fandaharana Golang tsara soratra dia mamaky mitsangana, misy rafitra kely na tsy misy. Fanampin'izany, ny hafainganam-pandehan'ny famakiana fandaharana dia fara faharatsiny filaharana lehibe kokoa noho ny hafainganan'ny fanoratana azy. Raha heverinao fa manana endrika fanamiana ny kaody rehetra (vita amin'ny baiko gofmt naorina), dia tsy olana mihitsy ny famakiana andalana vitsivitsy fanampiny.

Tsy dia maneho hevitra loatra

Tsy mandefitra ny zavakanto rehefa terena ny fahafahany. Tsy andraikiny ny fahamarinany.

Noho ny fanirian'ny fahatsorana dia tsy ampy ny fananganana izay amin'ny fiteny hafa dia heverin'ny olona zatra azy ho zavatra voajanahary. Mety ho sarotra amin'ny voalohany izany, saingy hitanao fa mora kokoa sy tsy misy dikany ny famakiana ilay programa.

Ohatra, ny fampitaovana fampiononana izay mamaky stdin na rakitra avy amin'ny tohan-kevitry ny baiko dia toa izao:

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

Ny vahaolana amin'ny olana mitovy amin'ny D, na dia toa fohy kokoa aza, dia tsy mora vakiana

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

Helo manao kopia

Ny olona dia mitondra ny helo ao anatiny. Martin Luther.

Ireo vao manomboka dia mitaraina hatrany momba ny Go amin'ny resaka tsy fahampian'ny générics. Mba hamahana ity olana ity, ny ankamaroan'izy ireo dia mampiasa kopia kaody mivantana. Ohatra, ny asa iray amin'ny famintinana ny lisitry ny integers, ny matihanina toy izany dia mino fa ny fiasa dia tsy azo ampiharina amin'ny fomba hafa afa-tsy amin'ny alàlan'ny fametahana kopia tsotra ho an'ny karazana data tsirairay.

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

Ny fiteny dia manana fitaovana ampy hanatanterahana ireo fanorenana toy izany. Ohatra, ny fandaharana generic dia mety tsara.

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

Ary, na dia nivadika ho lava kokoa noho ny tranga teo aloha aza ny kaodinay, dia nanjary ankapobeny izany. Noho izany, tsy ho sarotra amintsika ny hampihatra ny asa aritmetika rehetra.

Maro no hilaza fa ny programa amin'ny D dia toa fohy kokoa, ary ho marina izy ireo.

import std.stdio;
import std.algorithm;

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

Na izany aza, fohy kokoa, fa tsy marina kokoa, satria ny fampiharana D dia tsy miraharaha tanteraka ny olana amin'ny fitantanana ny fahadisoana.

Eo amin'ny tena fiainana, rehefa mitombo ny fahasarotan'ny lojika, dia mihena haingana ny elanelana. Mihidy haingana kokoa ny elanelana rehefa mila manao hetsika tsy azo atao amin'ny fampiasana ny mpandrindra fiteny mahazatra ianao.

Eo amin'ny fikojakojana, ny fanitarana ary ny famakian-teny, araka ny hevitro, dia mandresy ny fiteny Go, na dia resy amin'ny verbosity aza.

Ny fandaharana ankapobeny amin'ny tranga sasany dia manome tombony tsy azo lavina. Izany dia aseho mazava tsara amin'ny alàlan'ny karazana fonosana. Noho izany, mba handaminana lisitra, mila mampihatra ny interface sort.Interface fotsiny isika.

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

Raha maka tetikasa loharano misokatra ianao ary mampandeha ny baiko grep “interface{}” -R, dia ho hitanao hoe impiry ny fampisafotofotoana no ampiasaina. Ireo namana akaiky dia hilaza avy hatrany fa noho ny tsy fahampian'ny généric izany rehetra izany. Tsy izany foana anefa no mitranga. Andeha horaisintsika ho ohatra ny DELPHI. Na dia eo aza ny fisian'ireo jeneraly mitovy ireo, dia misy karazana VARIANT manokana ho an'ny asa miaraka amin'ny karazana data tsy misy dikany. Manao toy izany koa ny fiteny Go.

Avy amin'ny tafondro ka hatramin'ny fody

Ary ny straitjacket dia tsy maintsy mifanaraka amin'ny haben'ny hadalana. Stanislav Lec.

Maro amin'ireo mpankafy mahery vaika no mety hilaza fa manana rafitra hafa i Go amin'ny famoronana generics - fisaintsainana. Ary ho marina izy ireo ... fa amin'ny tranga tsy fahita firy.

Mampitandrina antsika i Rob Pike:

Ity dia fitaovana mahery vaika izay tokony hampiasaina amim-pitandremana. Tokony hohalavirina izany raha tsy tena ilaina.

Wikipedia dia milaza amintsika izao manaraka izao:

Ny fisaintsainana dia manondro ny dingana ahafahan'ny programa manara-maso sy manova ny rafitra sy ny fitondrantenany manokana mandritra ny fanatanterahana azy. Ny paradigma fandaharana mifototra amin'ny fisaintsainana dia antsoina hoe programa fisaintsainana. Ity dia karazana metaprogramming.

Na izany aza, araka ny fantatrao, tsy maintsy mandoa ny zava-drehetra ianao. Amin'ity tranga ity dia:

  • fahasarotana amin'ny fanoratana fandaharana
  • hafainganam-pandehan'ny fanatanterahana ny programa

Noho izany, ny fandinihana dia tsy maintsy ampiasaina amim-pitandremana, toy ny fitaovam-piadiana lehibe. Ny fampiasana fisaintsainana tsy am-piheverana dia mitarika programa tsy azo vakina, fahadisoana tsy tapaka ary hafainganam-pandeha ambany. Ny zavatra ho an'ny programmer snob dia afaka mampiseho ny kaody eo anoloan'ny mpiara-miasa hafa, pragmatika sy maotina kokoa.

Entan'ny kolontsaina avy any Xi? Tsia, avy amin’ny fiteny maromaro!

Miaraka amin'ny harena dia avela amin'ny mpandova ihany koa ny trosa.

Na dia eo aza ny hoe maro no mino fa ny fiteny dia mifototra tanteraka amin'ny lova C, tsy izany no izy. Ny fiteny dia mampiditra lafiny maro amin'ny fiteny fandaharana tsara indrindra.

Syntaxe

Voalohany indrindra, ny firafitry ny fitsipi-pitenenana dia mifototra amin'ny syntax amin'ny fiteny C. Na izany aza, nisy fiantraikany lehibe koa ny fiteny DELPHI. Araka izany, hitantsika fa nesorina tanteraka ireo fononteny miverimberina, izay mampihena be ny fahafaha-mamaky ny fandaharana. Ny fiteny ihany koa dia misy ny “: =” opérateur raiki-tampisaka amin'ny fiteny DELPHI. Ny foto-kevitry ny fonosana dia nindramina tamin'ny fiteny toa ny ADA. Nindramina tamin'ny fiteny PROLOG ny fanambarana ireo sampan-draharaha tsy ampiasaina.

Semantika

Ny fonosana dia mifototra amin'ny semantika amin'ny fiteny DELPHI. Ny fonosana tsirairay dia mirakitra angona sy kaody ary misy sampan-draharaham-panjakana sy tsy miankina. Izany dia ahafahanao mampihena ny interface tsara fonosana ho faran'izay kely.

Nindramina tamin'ny fiteny DELPHI ny asa fampiharana amin'ny fomba delegasiona.

fitambaran'ireo

Tsy misy antony fa misy vazivazy: Novolavolaina ny Go raha natambatra ny programa C. Ny iray amin'ireo tanjaky ny fiteny dia ny fitambarany faran'izay haingana. Ny hevitra dia nindramina tamin'ny fiteny DELPHI. Ny fonosana Go tsirairay dia mifanaraka amin'ny maody DELPHI. Ireo fonosana ireo dia averina averina rehefa tena ilaina ihany. Noho izany, aorian'ny fanovana manaraka dia tsy mila manangona ny programa manontolo ianao, fa avereno amboarina ihany ny fonosana sy ny fonosana niova izay miankina amin'ireo fonosana niova ireo (ary na dia izany aza, raha niova ny interface tsara).

Fanorenana avo lenta

Ny fiteny dia misy fananganana avo lenta maro samihafa izay tsy misy ifandraisany amin'ny fiteny ambany toa an'i C.

  • tady
  • Hash tables
  • Slices
  • Ny fanoratana gana dia nindramina avy amin'ny fiteny toa an'i RUBY (izay, indrisy, maro no tsy mahazo na mampiasa amin'ny fomba feno).

Fitantanana fahatsiarovana

Ny fitantanana fahatsiarovana amin'ny ankapobeny dia mendrika lahatsoratra misaraka. Raha amin'ny fiteny toa an'i C ++, ny fanaraha-maso dia avela tanteraka amin'ny mpamorona, dia amin'ny fiteny taty aoriana toa an'i DELPHI, dia nampiasaina ny modely fanisana reference. Miaraka amin'io fomba fiasa io dia tsy navela ny references cyclic, satria niforona ny clusters kamboty, avy eo i Go dia nanara-maso ny clusters toy izany (toa ny C #). Ankoatr'izay, ny mpanangom-pako dia mahomby kokoa noho ny ankamaroan'ny fampiharana fantatra amin'izao fotoana izao ary efa azo ampiasaina amin'ny asa maro amin'ny fotoana tena izy. Ny fiteny mihitsy no mahafantatra ny toe-javatra izay ahafahan'ny sanda hitahiry fari-pitsipika iray ao amin'ny stack. Izany dia mampihena ny enta-mavesatra eo amin'ny mpitantana fahatsiarovana ary mampitombo ny hafainganam-pandehan'ny fandaharana.

Concurrency sy Concurrency

Tsy azo deraina ny fitoviana sy ny fifaninanana amin'ny fiteny. Tsy misy fiteny ambany dia afaka mifaninana amin'ny Go. Raha ny marina, tsara ny manamarika fa ny modely dia tsy noforonin'ny mpanoratra ny fiteny, fa nindramina fotsiny tamin'ny fiteny ADA taloha tsara. Ny fiteny dia afaka manodina fifandraisana mirazotra an-tapitrisany amin'ny alàlan'ny CPU rehetra, raha manana filaharana amin'ny halehiben'ny olana tsy dia saro-pady amin'ny fahatapahan-dàlana sy ny toetry ny hazakazaka izay mahazatra amin'ny fehezan-dalàna maromaro.

Tombontsoa fanampiny

Raha mahasoa dia ho lasa tsy tia tena ny rehetra.

Ny fiteny koa dia manome antsika tombontsoa tsy isalasalana:

  • Ny rakitra tokana azo tanterahana aorian'ny fananganana ny tetikasa dia manamora ny fametrahana fampiharana.
  • Mety hampihena be ny isan'ny lesoka ao amin'ny kaodinao ny fanoratana static sy ny karazana inference, na dia tsy misy andrana manoratra aza. Mahafantatra programmer sasany aho izay manao tsy misy fitsapana manoratra mihitsy ary tsy mijaly be ny kalitaon'ny kaody.
  • Ny famoriam-bola tena tsotra sy ny fampitana tsara ny tranomboky manara-penitra, izay manamora be ny fivoaran'ny rindranasa cross-platform.
  • Ny fanehoan-kevitra mahazatra RE2 dia azo antoka ary manana fotoana hanatanterahana azy.
  • Tranomboky manara-penitra mahery vaika izay mamela ny ankamaroan'ny tetikasa atao tsy misy rafitra antoko fahatelo.
  • Ny fiteny dia matanjaka ampy hifantohana amin'ny olana fa tsy ny fomba hamahana azy, nefa ambany dia ambany ka afaka mamaha ny olana amin'ny fomba mahomby.
  • Ny rafitra Go eco dia efa misy fitaovana novolavolaina ivelan'ny boaty ho an'ny fotoana rehetra: fitsapana, antontan-taratasy, fitantanana fonosana, linter mahery, famoronana kaody, mpitsikilo ny toetry ny hazakazaka, sns.
  • Ny Go version 1.11 dia nampiditra ny fitantanana miankina amin'ny semantika, naorina teo an-tampon'ny fampiantranoana VCS malaza. Ny fitaovana rehetra mandrafitra ny ecosystem Go dia mampiasa ireo tolotra ireo mba hisintonana, hanorina ary hametraka kaody avy amin'izy ireo ao anatin'ny indray mipi-maso. Ary tsara izany. Miaraka amin'ny fahatongavan'ny version 1.11 dia voavaha tanteraka ihany koa ny olana amin'ny famoahana fonosana.
  • Satria ny hevi-dehibe amin'ny fiteny dia ny fampihenana ny majika, ny fiteny dia mandrisika ny mpamorona hanao fahadisoana amin'ny fomba mazava. Ary marina izany, satria raha tsy izany, dia hanadino fotsiny ny fitantanana ny fahadisoana tanteraka. Ny zavatra iray hafa dia ny ankamaroan'ny mpamorona dia minia tsy miraharaha ny fitantanana ny hadisoana, fa aleony manodina azy ireo fotsiny mba hampiakatra ny fahadisoana.
  • Ny fiteny dia tsy mampihatra ny fomba OOP mahazatra, satria amin'ny endriny madio dia tsy misy virtoaly ao amin'ny Go. Na izany aza, tsy olana izany rehefa mampiasa interface tsara. Ny tsy fisian'ny OOP dia mampihena be ny sakana amin'ny fidirana ho an'ny vao manomboka.

Fahatsorana ho an'ny tombontsoan'ny fiaraha-monina

Mora ny manasarotra, sarotra ny manatsotra.

Ny Go dia natao ho tsotra ary mahomby amin'izany tanjona izany. Izy io dia nosoratana ho an'ny mpandrindra marani-tsaina izay mahatakatra ny tombotsoan'ny fiaraha-miasa ary reraka amin'ny fiovaovan'ny fiteny tsy misy farany amin'ny fiteny Enterprise. Ny fananana rafitra syntactic somary kely ao amin'ny arsenal, dia saika tsy iharan'ny fiovana rehefa mandeha ny fotoana, noho izany dia manana fotoana malalaka ho an'ny fampandrosoana ny developer, fa tsy amin'ny fandalinana tsy misy farany ny fanavaozana ny fiteny.

Ny orinasa koa dia mahazo tombony maromaro: ny sakana fidirana ambany dia mamela azy ireo hahita haingana manam-pahaizana manokana, ary ny tsy fiovaovan'ny fiteny dia ahafahan'izy ireo mampiasa fehezan-dalàna mitovy na dia aorian'ny 10 taona aza.

famaranana

Ny haben'ny atidoha dia tsy nahatonga elefanta ho nahazo ny loka Nobel mihitsy.

Ho an'ireo programmer izay manana ny maha-izy azy manokana noho ny toe-tsain'ny ekipa, ary koa ireo teorista tia fanamby akademika sy "fanatsarana ny tena" tsy misy farany, dia tena ratsy ilay fiteny, satria fiteny ara-javakanto amin'ny ankapobeny izay tsy mamela anao hahazo. fahafinaretan'ny estetika amin'ny vokatry ny asanao ary asehoy ny tenanao ho matihanina eo anatrehan'ny mpiara-miasa (raha toa ka mandrefy ny faharanitan-tsaina amin'ireo fepetra ireo isika, fa tsy amin'ny IQ). Toy ny zava-drehetra eo amin'ny fiainana, dia resaka laharam-pahamehana manokana izany. Tahaka ny fanavaozana mendrika rehetra, ny fiteny dia efa lasa lavitra avy amin'ny fandavana maneran-tany mankany amin'ny fanekena faobe. Ny fiteny dia marani-tsaina amin'ny fahatsorany, ary, araka ny fantatrao, ny zava-drehetra marani-tsaina dia tsotra!

Source: www.habr.com

Add a comment