Hacker News

A’ tuigsinn an Go Compiler: The Linker

A’ tuigsinn an Go Compiler: The Linker Tha an sgrùdadh coileanta seo air tuigse a’ toirt seachad sgrùdadh mionaideach air na prìomh phàirtean aige agus builean nas fharsainge. Prìomh Raointean Fòcas Tha an deasbad stèidhichte air: Innealan bunaiteach agus pro ...

10 min read Via internals-for-interns.com

Mewayz Team

Editorial Team

Hacker News

A’ tuigsinn an Go Compiler: The Linker

Is e an ceangal Go an ìre mu dheireadh den t-sreath innealan cruinneachaidh Go, le uallach airson a bhith a’ cothlamadh fhaidhlichean nì cruinnichte ann an aon dàna so-ghnìomhaichte. Fuasglaidh e iomraidhean samhla, sònraichidh e seòlaidhean cuimhne, agus cruthaichidh e prògram fèin-chumte as urrainn don t-siostam-obrachaidh a luchdachadh is a ruith gun eisimeileachd bhon taobh a-muigh.

Airson sgiobaidhean innleadaireachd a bhios a’ togail shiostaman cinneasachaidh - a’ gabhail a-steach a’ bhun-structair air cùl àrd-ùrlaran leithid Mewayz agus an OS gnìomhachais 207-modal aige - tha tuigse air na thachras aig ìre ceangail deatamach airson bathar-bog sgrìobhaidh a ghabhas cleachdadh.

Dè dha-rìribh a bhios an Go Linker a’ dèanamh?

San inneal Go, bidh cruinneachadh a’ tachairt ann an dà phrìomh ìre. An toiseach, bidh an t-inneal-cruinneachaidh (gc) ag eadar-theangachadh Go tùs faidhlichean gu faidhlichean nì a tha sònraichte do dh’ailtireachd. An uairsin bheir an ceangal ( cmd/link) na faidhlichean nì sin agus gan cur còmhla ann an gnìomh crìochnaichte. Fhad ‘s a bhios an neach-cruinneachaidh a’ làimhseachadh mion-sgrùdadh co-chòrdaidh, sgrùdadh seòrsa, agus gineadh còd, bidh an neach-ceangail a’ làimhseachadh obair spàsail is dàimheil a bhith a’ cur ri chèile prògram.

Nì an ceangalaiche grunn obrachaidhean riatanach tron phròiseas seo. Bidh e a’ rèiteach a h-uile iomradh samhla thar pacaidean, a’ ciallachadh gu bheil a h-uile gairm gnìomh no iomradh caochlaideach a tha a’ dol thairis air crìoch pacaid ceangailte ris a’ bhuileachadh fhèin. Bidh e a’ sònrachadh sheòlaidhean cuimhne brìgheil do gach gnìomh agus caochladair cruinne. Bidh e cuideachd a’ sgrìobhadh an dàna mu dheireadh anns a’ chruth ris am biodh dùil aig an t-siostam-obrachaidh targaid - ELF airson Linux, Mach-O airson macOS, no PE airson Windows.

Eu-coltach ri luchd-ceangail C no C++, tha an ceangal Go sgrìobhte gu tur ann an Go fhèin. Tha an co-dhùnadh seo, a chaidh a chrìochnachadh rè oidhirp bootstrap Go 1.5, a’ toirt làn smachd don sgioba Go air a’ phròiseas ceangail agus a’ cur às don eisimeileachd air slabhraidhean innealan bhon taobh a-muigh airson a’ mhòr-chuid de thogalaichean.

Ciamar a tha Go's Linker diofraichte bho luchd-ceangail traidiseanta?

Bidh luchd-ceangail traidiseanta san eag-shiostam C/C++ — GNU ld, gold, no lld LLVM - ag obair air fòrmatan faidhle nì àbhaisteach leithid ath-shuidheachadh ELF. Bidh an linker Go's a’ cleachdadh a chruth nì a-staigh fhèin, a bheir sùbailteachd dha ach a tha cuideachd a’ ciallachadh gu bheil e ann an eag-shiostam caran iomallach.

  • Ceangal statach a ghnàth: Bidh Go a’ toirt a-mach binaries ceangailte gu staitigeach sa mhòr-chuid de chùisean, a’ fighe a-steach an ùine ruith gu lèir agus a h-uile eisimeileachd ann an aon fhaidhle. Tha seo gu math eadar-dhealaichte bho phrògraman C a bhios mar as trice an urra ri leabharlannan co-roinnte fiùghantach.
  • Chan eil ceum ro-ghiollachd fa-leth ann: Chan eil feum aig a’ cheangail Go air rùn samhla fa leth cuir seachad mar a nì luchd-ceangail dà-bhealaich traidiseanta. Bidh e a' pròiseasadh phasganan ann an òrdugh eisimeileachd, a tha an t-ùghdar air co-dhùnadh mar-thà.
  • A' cur às do chòd marbh: Bheir an ceanglaiche air falbh gnìomhan agus caochladairean nach gabh ruigsinn gu làidir, rud a tha deatamach a chionn 's gu bheil leabharlann àbhaisteach Go mòr. Às aonais seo, ghiùlaineadh a h-uile binary cuideam pacaidean nach deach a chleachdadh.
  • Amalachadh àm ruith: Feumaidh an ceangal Go an ùine ruith Go - a’ toirt a-steach an neach-cruinneachaidh sgudail, clàr-ama goroutine, agus còd riaghlaidh stac - a-steach do gach binary. Is e uallach a tha seo nach eil co-shìnte dìreach ri ceangal C.
  • drochaid CGo: Nuair a bhios CGo an comas, feumaidh an ceanglaiche Go co-òrdanachadh le ceangal C an t-siostaim gus faidhlichean cuspair measgaichte Go/C a làimhseachadh, a’ cur tòrr iom-fhillteachd ris a’ phròiseas.

Prìomh shealladh: Tha feallsanachd dealbhaidh The Go Linker a’ toirt prìomhachas do shìmplidheachd cleachdadh thairis air astar togail. Le bhith a’ toirt a-mach binaries làn statach le ùine ruith freumhaichte, bidh Go a’ cuir às do roinn iomlan de chùisean cinneasachaidh - a’ call leabharlannan co-roinnte, còmhstri dreach, agus fuasgladh eisimeileachd runtime - aig cosgais amannan ceangail nas fhaide agus binaries nas motha.

Carson a tha coileanadh Linker air a bhith na dhùbhlan leantainneach?

Fad bhliadhnaichean, b’ e an ceanglaiche Go aon de na pàirtean as slaodaiche den phròiseas togail. Leis gu bheil e ag obair air a’ phrògram gu lèir aig an aon àm seach pacaidean fa-leth, chan urrainnear a cho-thaobhadh mar a dh’ fhaodas cruinneachadh. Tha an sgioba Go air tasgadh mòr a dhèanamh ann an leasachaidhean ceangail, gu sònraichte ann an Go 1.15 agus 1.16, a thug a-steach fòrmat faidhle nì ùr agus a lughdaich cleachdadh cuimhne ceangail timcheall air 30%.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Is e an dùbhlan bunaiteach gum feum an ceanglaiche gnìomhachd a’ phrògraim slàn a dhèanamh. Feumaidh e sealladh cruinneil de gach samhla, gach gluasad, agus gach seòrsa tuairisgeul sa phrògram. Airson còdan mòra - an seòrsa a bheir cumhachd do àrd-ùrlaran iomairt a tha a’ frithealadh 138,000+ neach-cleachdaidh - tha seo a’ ciallachadh gu bheil an ceangal a’ pròiseasadh milleanan de shamhlaidhean ann an aon bhealaich.

Tha leasachaidhean o chionn ghoirid air fòcas a chuir air obair a ghluasad bhon cheangal air ais dhan inneal-cruinneachaidh. Le bhith toirt air an inneal-cruinneachaidh faidhlichean nì nas coileanta a thoirt gu buil le gluasadan ro-shuidhichte, faodaidh an neach-ceangail nas lugha de dh’ obair a dhèanamh aig àm ceangail. Is e mean-fhàs ailtireil leantainneach a tha seo taobh a-staigh an toolchain Go.

Dè an dleastanas a bhios aig a’ cheangal ann an tèarainteachd dàna Go?

Tha uallach air a’ cheangail cuideachd airson grunn fheartan co-cheangailte ri tèarainteachd ann an Go binaries. Bidh e a’ suidheachadh ceadan so-ghnìomhaichte air earrannan cuimhne, a’ dèanamh cinnteach nach gabh earrannan dàta a chuir an gnìomh agus nach gabh earrannan còd a sgrìobhadh. Air àrd-ùrlaran le taic, bidh e a’ comasachadh ASLR (Address Space Layout Randomization) le bhith a’ toirt a-mach so-ghnìomhan neo-eisimeileach suidheachadh.

A’ tòiseachadh le Go 1.17, tha an ceangal cuideachd a’ toirt taic do bhith a’ gineadh binaries le fiosrachadh deasbaid DWARF ceart agus meata-dàta togail, a chuidicheas le sganadh so-leòntachd agus dearbhadh sèine solair bathar-bog. Tha a’ bhratach -buildid, air a phròiseasadh aig àm ceangail, a’ fighe a-steach aithnichear sònraichte anns a h-uile binary airson dearbhadh togail ath-ghinte.

Ceistean Bitheanta

An urrainn dhut ceanglaiche taobh a-muigh a chleachdadh le Go?

Tha. Nuair a bhios CGo air a chomasachadh no nuair a bheir thu seachad -linkmode=external dhan Go toolchain, bidh e a’ tiomnadh a’ cheum ceangail mu dheireadh gu ceangal an t-siostaim (mar as trice gcc no clang). Tha seo riatanach nuair a tha am prògram agad a’ ceangal ri leabharlannan C agus is e seo an giùlan bunaiteach air cuid de àrd-ùrlaran. Tha ceangal taobh a-staigh, a bhios a’ cleachdadh inneal-ceangail Go fhèin a-mhàin, nas luaithe agus a’ toirt a-mach toglaichean nas sìmplidh ach chan urrainn dha eisimeileachd C a làimhseachadh.

Carson a tha Go binaries tòrr nas motha na C binaries?

Bidh an ceangal Go a’ fighe a-steach an ùine ruith Go gu lèir anns a h-uile binary, a’ toirt a-steach an neach-cruinneachaidh sgudail, clàr-ama goroutine, netpoler, agus fiosrachadh seòrsa meòrachaidh. Tha eadhon prògram beag “Hello, World” a ’toirt a-steach an ùine ruith seo, a’ leantainn gu binaries a thòisicheas timcheall air 1-2 MB. Tha cuir às do chòd marbh an neach-ceangail a’ lughdachadh seo gu mòr bho na dh’ fhaodadh e a bhith, ach tha an làr runtime do-sheachanta. Le bhith a’ cleachdadh -ldflags="-s -w"> bidh fiosrachadh deasbaid a’ stialladh agus ’s urrainn dha meud dà-chànanach a lùghdachadh 20-30%.

Ciamar a làimhsicheas an ceanglaiche Go iomadh pasgan leis an aon ainm samhla?

Tha Go a’ cleachdadh ainmean samhla làn-theisteanas a tha a’ toirt a-steach slighe in-mhalairt iomlan a’ phacaid. Tha gnìomh Parse ann an còdachadh/json agus gnìomh Parse sa phasgan agad fhèin air an riochdachadh mar shamhlaidhean gu tur eadar-dhealaichte aig ìre a’ cheangail. Tha an t-àite ainmean seo air a bhruich ann an cruth faidhle an nì, agus mar sin tha e do-dhèanta a thaobh structarail a bhith a’ bualadh air samhlaidhean eadar pacaidean Go. Bidh còmhstri ag èirigh a-mhàin ann an co-theacsan CGo far a bheil samhla C a’ roinn àite-ainm cruinneil rèidh.

Tog nas fheàrr leis na h-innealan ceart

Tha a bhith a’ tuigsinn meacanaig inneal-inneal ìre ìosal mar an Go linker a’ toirt cothrom a ghabhas tomhas do sgiobaidhean innleadaireachd nuair a thathar a’ lorg chùisean togail, a’ dèanamh an fheum as fheàrr de phìoban CI, agus a’ lìbhrigeadh bathar-bog earbsach. Tha an aon phrionnsapal a’ buntainn ri bhith a’ ruith gnìomhachas – mar as motha a thuigeas tu an t-sreath-innealan obrachaidh agad, ’s ann as èifeachdaiche a nì thu.

Bheir Mewayz dhut 207 modal amalaichte gus do ghnìomhachas gu lèir a riaghladh - bho stiùireadh pròiseict agus CRM gu fàirdeal agus co-obrachadh sgioba - a’ tòiseachadh aig $19/mo. Thig còmhla ri 138,000+ neach-cleachdaidh a tha air na sruthan-obrach aca a sgioblachadh. Tòisich le Mewayz an-diugh.