Hacker News

Fahamka Go Compiler: Linker-ka

Fahamka Go Compiler: Linker-ka Falanqayntan dhammaystiran ee fahamku waxay bixisaa baadhitaan faahfaahsan oo ku saabsan qaybaheeda asaasiga ah iyo saamaynta ballaadhan. Meelaha Muhiimka ah ee Diirada Dooddu waxay ku saabsan tahay: Farsamooyinka asaasiga ah iyo pro...

8 min read Via internals-for-interns.com

Mewayz Team

Editorial Team

Hacker News

Fahamka Go Compiler: Xiriiriyaha

Xidhiidhiyaha Go waa marxaladda ugu dambaysa ee silsiladda qalabaynta ururinta Go, oo ka mas'uul ah isku-darka faylalka shayga la ururiyay ee hal-ku-dheg ah oo la fulin karo. Waxay xallisaa tixraacyada calaamadda, waxay u xilsaartaa cinwaannada xusuusta, waxayna soo saartaa barnaamij iskiis u shaqeynaya oo nidaamka hawlgalka uu ku shuban karo oo socon karo iyada oo aan ku tiirsanayn dibadda.

Kooxaha injineernimada ee dhisaya nidaamyada wax soo saarka - oo ay ku jiraan kaabayaasha ka dambeeya aaladaha sida Mewayz iyo ganacsigeeda 207-module OS - fahamka waxa dhacaya marxaladda isku xirka ayaa lama huraan u ah qorista hawl wadeen, software la diri karo.

Muxuu Dhab ahaantii Qabaa Go Linker-ka?

Qalabka Go, isku-dubaridku wuxuu u dhacaa laba weji oo waaweyn. Marka hore, iskudubariduhu (gc) waxa uu u turjumayaa faylalka isha isha faylalka shayga gaarka ah ee qaab-dhismeedka. Kadib xiriiriyaha (cmd/link) wuxuu qaadaa faylalka shayga oo isku daraa mid dhameystiran oo la fulin karo. Iyadoo iskudubariduhu uu gacanta ku hayo falanqaynta syntax, nooca hubinta, iyo abuurista koodhka, xidhiidhiyuhu waxa uu qabtaa shaqada baaxadda iyo xidhiidhka ee ururinta barnaamijka.

Xidhiidhiyuhu waxa uu qabtaa dhawr hawlgal oo muhiim ah inta lagu jiro hawshan. Waxay xallisaa dhammaan tixraacyada calaamadaha guud ahaan xirmooyinka, taasoo la micno ah wicitaan kasta oo shaqo ama tixraac doorsoome oo ka gudba xadka xirmada wuxuu ku xiran yahay hirgelintiisa dhabta ah. Waxay u xilsaartaa cinwaannada xusuusta dalwaddii hawl kasta iyo doorsoome caalami ah. Waxa kale oo ay u qortaa binary-ga kama dambaysta ah qaabka uu filayo nidaamka hawlgalka ee bartilmaameedka - ELF ee Linux, Mach-O ee macOS, ama PE ee Windows.

Si ka duwan xiriiriyeyaasha C ama C++, xiriiriyaha Go wuxuu ku qoran yahay Go laftiisa. Go'aankan, oo la dhammeeyay intii lagu jiray dadaalka bootstrap-ka Go 1.5, wuxuu siinayaa kooxda Go inay si buuxda u maamulaan habka isku xirka waxayna meesha ka saaraysaa ku-tiirsanaanta qalabka dibadda ee dhismooyinka badankood.

Siduu Go's Linker uga duwan yahay Xiriiriyayaasha Dhaqanka?

Xidhiidhiyayaasha dhaqameed ee C/C++ deegaanka - GNU ld, dahab, ama LLVM's lld - waxay ku shaqeeyaan qaababka faylka shayga caadiga ah sida ELF dib loo dejin karo. Xiriiriyaha Go's wuxuu isticmaalaa qaab shayga gudaha ah, kaas oo siinaya dabacsanaan laakiin sidoo kale waxay la macno tahay inay ka jirto deegaan go'doonsan.

  • isku xidhka joogtada ah sida caadiga ah:Go waxay soo saartaa binaries si toos ah ugu xidhan inta badan, ku darida wakhtiga runtime oo dhan iyo dhammaan ku tiirsanaanta hal fayl. Tani waxay si aad ah uga duwan tahay barnaamijyada C ee sida caadiga ah ku tiirsan maktabadaha la wadaago ee firfircoon.
  • Ma jirto tallaabo hore u qaadis gaar ah: Xiriiriyaha Go uma baahna xalin calaamad gaar ah oo ka gudubta habka dhaqameedka labada-baas ay sameeyaan. Waxay u habaysaa baakadaha sida ay u kala horreeyaan, kaas oo isku-dubariduhu uu mar hore go'aamiyay.
  • Dead code elimination: Xidhiidhiyaha ayaa si adag u saaraya hawlaha aan la gaadhi karin iyo doorsoomayaasha, taas oo muhiim ah sababtoo ah maktabadda caadiga ah ee Go waa mid weyn. Taas la'aanteed, binary kasta wuxuu qaadi lahaa miisaanka xirmooyinka aan la isticmaalin.
  • Is-dhexgalka Runtime: Xidhiidhiyaha Go waa in uu geliyaa Go runtime-ka oo ay ku jiraan qashin ururiyaha, jadwaleeyaha goroutine, iyo koodhka maaraynta kaydka-binaari kasta. Tani waa mas'uuliyad aan si toos ah ula mid ahayn C isku xirka.
  • Xidhiidhinta Cgo: Marka CGo la furo, xidhiidhiyaha Go waa in uu isku xidhaa nidaamka C xidhiidhiyaha si uu u qabto faylalka shayga Go/C ee isku dhafan, isaga oo ku daraya kakanaanta hawsha.

Aragtida Furaha: Falsafada naqshadaynta Go linker waxa ay mudnaanta siisaa fududaynta hawlgelinta marka loo eego xawaaraha dhismaha. Adigoo soo saaraya binaries si buuxda u taagan oo wata runtime-ku-xidhan, Go waxay meesha ka saaraysaa dhammaan arrimaha wax soo saarka - maktabadaha la wadaago ee maqan, khilaafyada nooca, iyo xallinta ku-tiirsanaanta runtime - oo ay ku kacayso waqtiyo dheer oo isku xidhidh iyo binary waaweyn.

Waa maxay sababta Linker Performance u noqotay caqabad joogto ah?

Muddo sanado ah, xiriiriyaha Go wuxuu ahaa mid ka mid ah qaybaha ugu hooseeya ee habka dhisidda. Sababtoo ah wuxuu ku shaqeeyaa barnaamijka oo dhan hal mar halkii uu ka ahaan lahaa xirmo gaar ah, lama barbar dhigi karo habka la isku dubaridi karo. Kooxda Go ayaa si weyn u maalgalisay hagaajinta isku xidhka, gaar ahaan Go 1.15 iyo 1.16, kaas oo soo bandhigay qaab cusub oo faylka shay iyo hoos u dhigista isticmaalka xusuusta isku xidhaha qiyaastii 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 →
Caqabadda aasaasiga ahi waa in xidhiidhiyuhu uu fuliyo hawlo barnaamij oo dhan ah. Waxay u baahan tahay aragti caalami ah oo calaamad kasta ah, guuritaan kasta, iyo nooc kasta oo qeexaya barnaamijka. Saldhigyada kood ee waaweyn - nooca ay ku shaqeeyaan aaladaha awoodda u leh ee u adeegaya 138,000+ isticmaale - tani waxay la macno tahay xiriiriyaha wuxuu ku socodsiiyaa malaayiin calaamado hal baas.

Horumari dhawaa waxa ay diirada saareen in shaqada laga bedelo iskuxiraha oo lagu soo celiyo isuduwaha. Markaad haysato iskudubariduhu soo saaro faylal shay oo dhamaystiran oo leh dib-u-dejin horay loo xaliyay, xiriiriyaha wuxuu qaban karaa shaqo yar wakhtiga isku xirka. Kani waa horumar dhismeed oo socda oo ka dhex jira silsiladda qalabka Go.

Doorkee ayuu Linker-ku ka ciyaaraa Go's Security binary Security?

Xiriiriyaha ayaa sidoo kale mas'uul ka ah dhowr astaamood oo la xiriira amniga gudaha Go binaries. Waxay dejisaa rukhsad la fulin karo qaybaha xusuusta, iyadoo hubinaysa in qaybaha xogta aan la fulin karin iyo qaybaha koodka aan la qori karin. Goobaha la taageero, waxa ay awood u siinaysaa ASLR (Cinwaanka Meelaynta Layout Randomization) iyada oo soo saarta hawl-fulinyaal madax-banaan oo boos ah.

Laga bilaabo Go 1.17, xiriiriyaha ayaa sidoo kale taageera soo saarida binaries leh macluumaadka saxda ah ee DWARF iyo dhisidda xogta badan, taas oo ka caawisa iskaanka nuglaanta iyo xaqiijinta silsiladda sahayda software. Calankii -dhistay, oo la farsameeyay wakhtiga isku xidhka, waxa uu dhexgeliyaa aqoonsi gaar ah binary kasta si loo xaqiijiyo dhismaha dib loo soo saari karo.

Su'aalaha Inta badan La Isweydiiyo

Ma isticmaali kartaa iskuxiraha dibadda ee Go?

Haa. Marka CGo la furo ama marka aad -linkmode=external u gudubto Go toolchain, waxay u wakiishay isku xirka ugu dambeeya ee isku xirka nidaamka (sida caadiga ah gccama clang). Tan waxa loo baahan yahay marka barnaamijkaagu uu ka soo horjeedo maktabadaha C oo uu yahay habdhaqanka caadiga ah ee goobaha qaarkood. Isku xirka gudaha, kaas oo si gaar ah u adeegsada iskuxiraha Go, waa dheereya oo waxay soo saartaa dhismo ka fudud laakiin ma xamili karto ku tiirsanaanta C.

Muxuu Go binaries aad uga weyn yahay C binary?

Xidhiidhiyaha Go waxa uu geliyaa Go runtime-ga oo dhan binary kasta, oo ay ku jiraan qashin ururiyaha, jadwaleeyaha goroutine, netpoller, iyo nooca macluumaadka. Xitaa barnaamijka "Hello, World" ugu yar waxaa ku jira wakhtigan runtime, taasoo keentay in laba-jibaaranayaasha bilaabmaan qiyaastii 1-2 MB. Ciribtirka koodka dhintay xiriiriyaha ayaa tan si weyn u yareynaya waxa ay noqon karto, laakiin sagxadda runtime waa lama huraan. Isticmaalka -ldflags="-s -w" waxay tirtirtaa xogta oo waxay yarayn kartaa cabbirka binary 20-30%.

Sidee ayuu xiriiriyaha Go u maamulaa baakado badan oo leh magac calaamad ah?

Go waxa ay isticmaashaa magacyo calaamado ah oo dhamaystiran oo ay ku jiraan dariiqa soo dejinta ee xidhmada oo dhamaystiran. Shaqada Parse ee encoding/json iyo shaqada Paarse ee ku jirta xirmadaada waxay u taagan yihiin gabi ahaan calaamado kala duwan heerka xiriiriyaha. Magacaabista waxa lagu dubey qaabka faylka shayga, markaa isku dhaca calaamada u dhexeeya xidhmooyinka Go qaab ahaan waa wax aan macquul ahayn. Isku dhacyadu waxay ka dhashaan kaliya xaaladaha CGo halkaas oo calamadaha C ay wadaagaan meel magac caalami ah oo siman.

Si ka fiican ugu dhis Aaladaha Saxda ah

Fahamka makaanikada qalabka heerka hoose sida Go linker waxay siisaa kooxaha injineerada gees la qiyaasi karo marka la baarayo arrimaha dhismaha, wanaajinta dhuumaha CI, iyo dhoofinta software la isku halayn karo. Isla mabda'a ayaa quseeya socodsiinta ganacsiga - mar kasta oo aad fahamto silsiladda qalabkaaga, si hufan ayaad u fulinaysaa.

Mewayzku wuxuu ku siinayaa 207 qaybood oo isku dhafan si aad u maamusho ganacsigaaga oo dhan - laga bilaabo maamulka mashruuca iyo CRM ilaa qaansheegadka iyo wada shaqaynta kooxda - laga bilaabo $19/bishii. Ku biir 138,000+ isticmaalayaasha kuwaas oo habeeyey socodkooda shaqo. Ka bilow Mewayz maanta.