Alexei Grachev: Rach air beulaibh

Kyiv Go Meetup Cèitean 2018:

Alexei Grachev: Rach air beulaibh

Lead: - Hi uile! Tapadh leibh airson a bhith an seo! An-diugh tha dithis neach-labhairt oifigeil againn - Lyosha agus Vanya. Bidh dhà eile ann ma bhios ùine gu leòr againn. Is e a 'chiad neach-labhairt Alexei Grachev, innsidh e dhuinn mu GopherJS.

Alexey Grachev (an dèidh seo - AG): - Tha mi nam leasaiche Go, agus bidh mi a’ sgrìobhadh seirbheisean lìn ann an Go. Aig amannan feumaidh tu dèiligeadh ris an aghaidh, uaireannan feumaidh tu faighinn a-steach le làimh. Tha mi airson bruidhinn mun eòlas agam agus an rannsachadh agam air Go on the frontend.

Is e an uirsgeul seo: an toiseach bruidhnidh sinn mu carson a tha sinn airson ruith Rach air an aghaidh, an uairsin bruidhnidh sinn mu mar as urrainnear seo a dhèanamh. Tha dà dhòigh ann - Web Assembly agus GopherJS. Chì sinn dè an inbhe a th’ aig na fuasglaidhean sin agus dè ghabhas dèanamh.

Dè tha ceàrr air an aghaidh?

A bheil a h-uile duine ag aontachadh gu bheil a h-uile dad gu math leis an aghaidh?

Alexei Grachev: Rach air beulaibh

Nach eil deuchainnean gu leòr ann? Togail mall? Eag-shiostam? Gu math.

A thaobh an aghaidh, is toil leam an abairt a thuirt fear de luchd-leasachaidh aghaidh na leabhar aige:

Alexei Grachev: Rach air beulaibh

Chan eil siostam seòrsa aig Javascript. A-nis ainmichidh mi na duilgheadasan a choinnich mi ri mo chuid obrach agus mìnichidh mi mar a tha iad air am fuasgladh.

Cha mhòr gu bheil an siostam seòrsa san fharsaingeachd air ainmeachadh mar shiostam seòrsa ann an Javasript - tha loidhnichean ann a tha a’ comharrachadh an seòrsa nì, ach gu dearbh chan eil dad aig seo ri seòrsaichean. Tha an duilgheadas seo air a fuasgladh ann an TypeScript (tuilleadan gu Javasript) agus Flow (seiceadair seòrsa statach ann an Javascript). Gu fìrinneach, tha an frontend mu thràth air ìre fuasgladh fhaighinn air duilgheadas siostam droch sheòrsa ann an Javascript.

Alexei Grachev: Rach air beulaibh

Chan eil leabharlann àbhaisteach sa bhrobhsair mar sin - tha cuid de stuthan togte agus gnìomhan “draoidheachd” ann am brobhsairean. Ach ann an Javascript chan eil leabharlann àbhaisteach ann mar sin. Chaidh an duilgheadas seo fhuasgladh aon uair le jQuery (chleachd a h-uile duine jQuery leis na prototypes, luchd-cuideachaidh, gnìomhan a bha a dhìth airson obrachadh). A-nis tha a h-uile duine a’ cleachdadh Lodash:

Alexei Grachev: Rach air beulaibh

Callback ifrinn. Tha mi a’ smaoineachadh gum faca a h-uile duine còd Javascript mu 5 bliadhna air ais, agus bha e a ’coimhead coltach ri“ noodle ”de dh’ iom-fhillteachd iongantach de ghairm air ais. A-nis chaidh an duilgheadas seo fhuasgladh (le sgaoileadh ES-15 no ES-16), chaidh geallaidhean a chuir ri Javascript agus faodaidh a h-uile duine anail a tharraing nas fhasa airson ùine.

Alexei Grachev: Rach air beulaibh

Gus an do ràinig ifrinn Promice ... chan eil fhios agam ciamar a tha gnìomhachas an aghaidh a’ riaghladh, ach bidh iad an-còmhnaidh gan gluasad fhèin a-steach do jungle neònach. Chaidh againn cuideachd air ifrinn a dhèanamh air geallaidhean. An uairsin dh’ fhuasgail sinn an duilgheadas seo le bhith a’ cur primitive ùr ris - async/wait:

Alexei Grachev: Rach air beulaibh

Tha an duilgheadas le asynchrony air fhuasgladh. Tha Async / await na phrìomhachas mòr-chòrdte ann an grunn chànanan. Tha an dòigh-obrach seo aig Python agus feadhainn eile - tha e math. Duilgheadas air fhuasgladh.

Dè an duilgheadas nach eil fuasgladh? Iom-fhillteachd nam frèaman a tha a’ sìor fhàs nas iom-fhillte, iom-fhillteachd an eag-shiostam agus na prògraman fhèin.

Alexei Grachev: Rach air beulaibh

  • Tha co-chòrdadh javascript car neònach. Tha fios againn uile air na duilgheadasan le bhith a’ cur sreath agus nì agus fealla-dhà eile ris.
  • Tha javascript ioma-paradigm. Is e siostam gu sònraichte èiginneach a tha seo a-nis nuair a tha an eag-shiostam glè mhòr:
    • bidh a h-uile duine a’ sgrìobhadh ann an diofar stoidhlichean - bidh cuid a’ sgrìobhadh gu structarail, cuid a’ sgrìobhadh gu gnìomhach, bidh luchd-leasachaidh eadar-dhealaichte a’ sgrìobhadh ann an diofar dhòighean;
    • bho phasganan eadar-dhealaichte, diofar paradigms nuair a bhios tu a’ cleachdadh diofar phasgan;
    • tha tòrr “spòrs” ann le prògramadh gnìomh ann an Javasript - nochd an leabharlann rambda agus a-nis chan urrainn dha duine prògraman a tha sgrìobhte san leabharlann seo a leughadh.

  • Tha seo uile a’ toirt buaidh mhòr air an eag-shiostam, agus tha e air fàs gu h-iongantach. Tha na pacaidean neo-chòrdail ri chèile: tha cuid stèidhichte air geallaidhean, cuid stèidhichte air async / feitheamh, cuid stèidhichte air fios air ais. Bidh iad cuideachd a’ sgrìobhadh ann an diofar paradigms!
  • Tha seo ga dhèanamh duilich am pròiseact a chumail suas. Tha e doirbh bug a lorg mura h-urrainn dhut an còd a leughadh.

Dè th' ann an Web Assembly?

Thàinig na daoine gaisgeil bho Bhunait Mozilla agus grunn chompanaidhean eile suas le leithid de rud ri Web Assembly. Dè tha seo?

Alexei Grachev: Rach air beulaibh

  • Is e inneal brìgheil a tha seo a chaidh a thogail a-steach don bhrobhsair a bheir taic don chruth dà-chànanach.
  • Bidh prògraman binary a’ faighinn ann agus gan cur gu bàs cha mhòr gu dùthchasach, is e sin, chan fheum am brabhsair na “noodles” de chòd javascript a pharsadh a h-uile uair.
  • Tha a h-uile brobhsair air taic ainmeachadh.
  • Leis gur e bytecode a tha seo, faodaidh tu compiler a sgrìobhadh airson cànan sam bith.
  • Tha ceithir prìomh bhrobhsairean air an cur air falbh mu thràth le taic Web Assembly.
  • Tha sinn an dùil taic dhùthchasach ann an Go a dh’ aithghearr. Chaidh an ailtireachd ùr seo a chur ris mu thràth: GOARCH=wasm GOOS=js (a dh'aithghearr). Gu ruige seo, mar a tha mi ga thuigsinn, chan eil e obrachail, ach tha aithris ann gum bi e gu cinnteach ann an Go.

Dè a nì thu a-nis? GopherJS

Ged nach eil taic againn airson Web Assembly, tha transpiler mar GopherJS ann.

Alexei Grachev: Rach air beulaibh

  • Tha còd Go air a thionndadh gu Javascript “fìor-ghlan”.
  • A ’ruith anns a h-uile brobhsair - chan eil feartan ùra ann a tha a’ faighinn taic bho bhrobhsairean an latha an-diugh (is e seo Vanilla JS, a bhios a ’ruith air rud sam bith).
  • Tha taic ann airson cha mhòr a h-uile càil a th’ aig Go, a’ toirt a-steach goroutines agus seanalan… a h-uile dad air a bheil sinn dèidheil agus cho eòlach.
  • Tha cha mhòr an leabharlann àbhaisteach gu lèir a’ faighinn taic, ach a-mhàin na pacaidean sin nach eil e ciallach taic a thoirt dhaibh sa bhrobhsair: syscall, eadar-obrachaidhean lìon (tha teachdaiche lìon/http ann, ach chan eil frithealaiche ann, agus tha an teachdaiche air aithris tro XMLHttpRequest). San fharsaingeachd, tha an leabharlann àbhaisteach gu lèir ri fhaighinn - an seo tha e sa bhrobhsair, seo Go's stdlib, air a bheil sinn dèidheil.
  • Faodar an eag-shiostam pacaid gu lèir ann an Go, a h-uile fuasgladh treas-phàrtaidh (template, msaa) a chuir ri chèile a’ cleachdadh GopherJS agus ruith sa bhrobhsair.

Tha GopherJS gu math furasta fhaighinn - chan eil ann ach pasgan Go cunbhalach. Bidh sinn a’ faighinn, agus tha òrdugh GopherJS againn airson an tagradh a thogail:

Alexei Grachev: Rach air beulaibh

Is e saoghal cho beag hello a tha seo ...

Alexei Grachev: Rach air beulaibh

...Prògram Go cunbhalach, pasgan àbhaisteach fmt leabharlainn agus Binding Js gus API a’ bhrabhsair a ruighinn. Thèid Println a thionndadh gu log tòcan mu dheireadh agus sgrìobhaidh am brabhsair “Hello gophers”! Tha e cho sìmplidh sin: bidh sinn a’ togail GopherJS - bidh sinn ga chuir air bhog sa bhrobhsair - bidh a h-uile dad ag obair!

Dè th' agad an-dràsta? Ceangalaichean

Alexei Grachev: Rach air beulaibh

Tha ceanglachan ann airson a h-uile frèam js mòr-chòrdte:

  • JQuery;
  • Angular.js;
  • D3.js airson dealbhadh agus obrachadh le dàta mòr;
  • React.js;
  • VueJS;
  • tha eadhon taic ann airson Electron (is e sin, is urrainn dhuinn tagraidhean deasg a sgrìobhadh air Electron mu thràth);
  • agus is e WebGL an rud as èibhinn (is urrainn dhuinn tagraidhean làn-grafaigeach a dhèanamh, a’ toirt a-steach geamannan le grafaigean 3D, ceòl agus a h-uile rud math);
  • agus iomadh ceangal eile ris a h-uile frèam javascript agus leabharlann mòr-chòrdte.

Frèam-obrach

  1. Tha frèam lìn ann mu thràth air a leasachadh gu sònraichte airson GopherJS - Vecty. Is e analog làn-chuimseach a tha seo de React.js, ach cha deach a leasachadh ach ann an Go, le mion-fhiosrachadh GopherJS.
  2. Tha pocannan geam (iongnadh!). Lorg mi an dà rud as mòr-chòrdte:
    • Engo;
    • Ebiten.

Seallaidh mi dhut eisimpleir no dhà air cò ris a tha e coltach agus dè as urrainn dhut a sgrìobhadh mu thràth ann an Go:

Alexei Grachev: Rach air beulaibh

No an roghainn seo (cha b’ urrainn dhomh neach-losgaidh 3D a lorg, ach is dòcha gu bheil e ann):

Alexei Grachev: Rach air beulaibh

Dè tha mi a 'tabhann?

A-nis tha an gnìomhachas aghaidh ann an leithid de staid is gum bi a h-uile cànan a bha ag èigheach roimhe bho Javascript a’ reubadh an sin. A-nis thèid a h-uile càil a chuir ri chèile ann an “Co-chruinneachaidhean Lìn”. Dè a dh’ fheumas sinn gus ar n-àite dligheach a ghabhail an sin mar Gophers?

Alexei Grachev: Rach air beulaibh

Tha Go gu traidiseanta air gabhail ris gur e cànan prògramadh System a th’ ann, agus cha mhòr nach eil leabharlannan ann airson a bhith ag obair leis an UI. Tha rudeigin ann, ach tha e air a thrèigsinn gu leth, leth neo-ghnìomhach.

Agus a-nis tha deagh chothrom ann leabharlannan UI a dhèanamh ann an Go a ruitheas air GopherJS! Faodaidh tu am frèam agad fhèin a sgrìobhadh mu dheireadh! Is e seo an àm nuair as urrainn dhut frèam a sgrìobhadh, agus bidh e mar aon den chiad fheadhainn agus gheibh thu uchd-mhacachd tràth, agus bidh thu nad rionnag (ma tha e na fhrèam math).

Faodaidh tu tòrr phasgan eadar-dhealaichte a tha mar-thà san eag-shiostam Go atharrachadh gu mion-fhiosrachadh a’ bhrobhsair (mar eisimpleir, einnsean Template). Obraichidh iad mu thràth, is urrainn dhut ceanglaichean goireasach a dhèanamh gus an urrainn dhut an susbaint a thoirt seachad gu dìreach sa bhrobhsair. A bharrachd air an sin, faodaidh tu, mar eisimpleir, seirbheis a dhèanamh as urrainn an aon rud a thoirt seachad air an fhrithealaiche agus air an aghaidh, a ’cleachdadh an aon chòd - a h-uile dad a tha luchd-leasachaidh aghaidh a’ còrdadh (dìreach a-nis ann an Go).

Faodaidh tu geama a sgrìobhadh! Dìreach airson spòrs ...

Sin a h-uile rud a bha mi airson a ràdh.

Alexei Grachev: Rach air beulaibh

Do cheistean

Ceist (air ainmeachadh an-seo mar Q): – Am bi mi a’ sgrìobhadh ann an Go neo Js?

AG: - Bidh thu a’ sgrìobhadh cleachdaidhean, seanalan, structaran, in-ghabhail - a h-uile càil ann an Go ... Bidh thu a’ fo-sgrìobhadh do thachartas, a’ dol seachad air gnìomh an sin.

AT: - Mar sin bidh mi a’ sgrìobhadh ann an “rùisgte” Js?

AG: - Chan e, bidh thu a’ sgrìobhadh mar gum biodh ann an Rach agus ceangail ri API a’ bhrobhsair (chan eil an API air atharrachadh). Faodaidh tu na ceanglachan agad fhèin a sgrìobhadh gus an tèid teachdaireachdan a chuir chun t-seanail - chan eil e duilich.

AT: - Dè mu dheidhinn fòn-làimhe?

AG: - Chunnaic mi gu cinnteach: tha ceanglaichean ann airson bad Cordova a tha Js a’ ruith. Ann an React Native - chan eil fhios agam; is dòcha gu bheil, is dòcha nach eil (cha robh ùidh shònraichte agam). Bidh an einnsean geama N-go a’ toirt taic do gach tagradh gluasadach - gach cuid iOS agus Android.

AT: - Ceist mu Cho-chruinneachadh Lìn. Thathas a’ gabhail barrachd is barrachd rùm, a dh’aindeoin an teannachadh agus an “zipping”... Nach marbhadh sinn an saoghal aghaidh san dòigh seo eadhon nas motha?

AG: - 'S e cruth dà-chànanach a th' ann an Web Assembly, agus chan urrainn dha binary a bhith san fhoillseachadh mu dheireadh nas motha na teacsa... Tha thu air do tharraing gu àm ruith, ach tha seo an aon rud ri bhith a' slaodadh a-mach an leabharlann àbhaisteach Javascript nuair nach eil e ann, mar sin cleachd beagan Lodash. Chan eil fhios agam cia mheud a bheir Lodash.

AT: - Gu dearbh nas lugha na ùine ruith ...

AG: - Ann an Javascript “fìor-ghlan”?

AT: - Tha. Bidh sinn ga dhlùthadh mus cuir sinn e ...

AG: - Ach is e seo teacsa... San fharsaingeachd, tha megabyte coltach ri tòrr, ach tha sin uile (tha an ùine ruith gu lèir agad). An uairsin, bidh thu a’ sgrìobhadh loidsig do ghnìomhachas fhèin, a mheudaicheas do dhànachd le 1%. Gu ruige seo chan eil mi a 'faicinn seo a' marbhadh an aghaidh. A bharrachd air an sin, obraichidh Web Assembly nas luaithe na Javascript airson an adhbhar follaiseach - chan fheumar a pharsadh.

AT: - 'S e puing connspaideach a tha seo fhathast ... Gu bun-bheachdail, tha: tha sinn uile a’ tuigsinn gum bu chòir binary a bhith nas luaithe, ach tha buileachadh gnàthach an aon V8 gu math èifeachdach.

AG: - Tha.

AT: - Tha cruinneachadh an sin ag obair gu math fionnar agus chan eil e na fhìrinn gum bi buannachd mhòr ann.

AG: - Bidh co-chruinneachadh lìn cuideachd air a dhèanamh le daoine mòra.

AT: - Tha e coltach rium gu bheil e fhathast duilich breithneachadh a dhèanamh air Web Assembly. Tha còmhraidhean air a bhith ann airson grunn bhliadhnaichean a-nis, ach chan eil ach glè bheag de choileanaidhean fìor ann a dh'fhaodar fhaicinn.

AG: - 'S dòcha. Chì sinn.

AT: - Chan eil trioblaidean againn air an backend... Is dòcha gum bu chòir dhuinn na duilgheadasan sin fhàgail air an aghaidh? Carson a dhol ann?

AG: - Feumaidh sinn luchd-obrach de luchd-obrach aghaidh a chumail.

Cuid de shanasan 🙂

Tapadh leibh airson fuireach còmhla rinn. An toil leat na h-artaigilean againn? A bheil thu airson susbaint nas inntinniche fhaicinn? Thoir taic dhuinn le bhith a’ cur òrdugh no a’ moladh do charaidean, sgòth VPS airson luchd-leasachaidh bho $4.99, analog sònraichte de luchd-frithealaidh ìre inntrigidh, a chaidh a chruthachadh leinn dhut: An fhìrinn gu lèir mu VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps bho $ 19 no ciamar a roinn thu frithealaiche? (ri fhaighinn le RAID1 agus RAID10, suas ri 24 cores agus suas ri 40GB DDR4).

Dell R730xd 2x nas saoire ann an ionad dàta Equinix Tier IV ann an Amsterdam? A-mhàin an seo 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV bho $199 anns an Òlaind! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - bho $99! Leugh mu dheidhinn Ciamar a thogail bun-structair Corp. clas le bhith a’ cleachdadh frithealaichean Dell R730xd E5-2650 v4 luach 9000 iùro airson sgillinn?

Source: www.habr.com

Cuir beachd ann