An fitar da aikin Cosmopolitan 2.0, wanda ke haɓaka ɗakin karatu na yau da kullun na C da kuma tsarin aiwatarwa na duniya wanda za a iya amfani da shi don rarraba shirye-shirye a cikin tsarin aiki daban-daban ba tare da buƙatar masu fassara ko injunan kama-da-wane ba. Tattara bayanai tare da GCC da Clang yana haifar da fayil ɗin aiwatarwa na duniya wanda ke da alaƙa da static wanda zai iya gudana akan kowace rarrabawa. Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, har ma da damar shiga BIOS. Lambar aikin an rarraba ta ne a ƙarƙashin lasisin ISC (wani sigar lasisin MIT/BSD mai sauƙi).
Akwatin da ake amfani da shi wajen ƙirƙirar fayilolin aiwatarwa na duniya ya dogara ne akan haɗa sassa da kanun labarai (PE, ELF, MACHO, OPENBSD) musamman ga tsarin aiki daban-daban a cikin fayil ɗaya, tare da haɗa tsare-tsare daban-daban da ake amfani da su a cikin Unix, Windows и macOSDon tabbatar da cewa za a iya ƙaddamar da fayil ɗaya da za a iya aiwatarwa a ciki Windows kuma tsarin Unix suna amfani da dabarar da ta shafi ɓoye fayiloli Windows PE a matsayin rubutun harsashi, ta hanyar amfani da rashin alamar rubutun "#!" ta Thompson Shell. Don ƙirƙirar shirye-shirye waɗanda suka haɗa da fayiloli da yawa (haɗa dukkan albarkatu zuwa fayil ɗaya), ana iya ƙirƙirar fayil ɗin da za a iya aiwatarwa azaman fayil ɗin ZIP da aka tsara musamman. Tsarin da aka gabatar (misali: aikace-aikacen hello.com):
MZqFpD = 'BIOS BOOT SECTOR' exec 7 $(umurni -v $0) printf ''\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7 exec "$ 0" "$ @" exec qemu-x86_64 "$0" "$@" fita 1 GASKIYA... BABU KYAUTA MODEBSD... HEADERS...CODE AND DATA...ZIP DIRECTORY...
A farkon fayil ɗin, ana nuna lakabin "MZqFpD", wanda ake ɗauka a matsayin taken tsari Windows PE. Wannan jerin yana kuma fassara zuwa umarnin "pop %r10; jno 0x4a; jo 0x4a," da kuma igiyar "\177ELF" zuwa cikin umarnin "jg 0x47," wanda ake amfani da shi don tura zuwa wurin shiga. A kan tsarin Unix, ana aiwatar da lambar harsashi ta amfani da umarnin aiwatarwa, yana wucewa da lambar aiwatarwa ta hanyar bututun da ba a san sunansa ba. Iyakance hanyar da aka gabatar ita ce ana iya gudanar da ita ne kawai akan tsarin aiki mai kama da Unix ta amfani da harsashi waɗanda ke tallafawa yanayin jituwa na Thompson Shell.
An tanadar da kiran qemu-x86_64 don ƙarin ɗawainiya kuma yana ba da damar ƙididdige lambar don gine-ginen x86_64 don gudana akan dandamali marasa x86, kamar allon Rasberi Pi da na'urorin Apple sanye take da na'urori masu sarrafa ARM. Hakanan za'a iya amfani da aikin don ƙirƙirar aikace-aikacen sarrafa kansa waɗanda ke gudana ba tare da tsarin aiki ba (ƙarfe bare). A cikin irin waɗannan aikace-aikacen, ana haɗe bootloader zuwa mai aiwatarwa, kuma shirin yana aiki azaman tsarin aiki na bootable.
Laburaren libc misali C, wanda aikin ya haɓaka, yana ba da ayyuka 2024 (sakin farko yana da kusan ayyuka 1400). Dangane da aiki, Cosmopolitan yana da sauri kamar glibc kuma yana da sauri fiye da MUSL da Newlib, duk da girman lambar Cosmopolitan kasancewa tsari na girma ƙasa da glibc kuma yayi daidai da MUSL da Newlib. Don inganta ayyukan da ake kira akai-akai kamar memcpy da strlen, ana kuma amfani da dabarar "ƙara-ƙasa-ƙasa". Wannan dabara tana amfani da macro wrapper don kiran aiki, yana sanar da mai tara rijistar CPU da aka yi amfani da shi yayin aiwatar da lambar. Wannan yana adana albarkatu yayin adana jihar CPU ta hanyar adana rajistar masu canzawa kawai.
Daga cikin canje-canje a cikin sabon sakin:
- An canza tsarin samun damar albarkatun ciki a cikin fayil ɗin zip (lokacin buɗe fayiloli, ana amfani da hanyoyin /zip/… da aka saba amfani da su yanzu maimakon shiga ta hanyar zip:.. prefix). Hakazalika, don samun damar faifan diski a cikin Windows An gabatar da ikon amfani da hanyoyi kamar "/c/..." maimakon "C:/...".
- An gabatar da sabon mai ɗaukar kaya na APE (Gaskiya Za a iya aiwatarwa) wanda ke bayyana tsarin fayil ɗin da za a iya aiwatarwa. Sabuwar loda tana amfani da mmap don rarraba shirye-shirye a cikin ƙwaƙwalwar ajiya kuma baya canza abubuwan da ke ciki akan tashi. Idan ya cancanta, ana iya canza fayil ɗin aiwatarwa na duniya zuwa daidaitattun fayilolin aiwatarwa musamman ga takamaiman dandamali.
- A kan dandalin Linux An aiwatar da ikon amfani da tsarin binfmt_misc kernel don ƙaddamar da shirye-shiryen APE. An lura cewa amfani da binfmt_misc shine hanyar ƙaddamarwa mafi sauri.
- domin Linux An gabatar da aiwatar da kiran tsarin alƙawari() da bayyana() wanda aikin OpenBSD ya ƙirƙiro. An samar da API don amfani da waɗannan kiran a cikin shirye-shiryen C, C++, Python, da Redbean, da kuma kayan aikin pledge.com don ware hanyoyin da ba a saba gani ba.
- Ginin yana amfani da Landlock Make, wani GNU Make edition tare da ƙarin ƙwaƙƙwaran dogaro da kuma kiran tsarin Landlock don ware shirin daga sauran tsarin da haɓaka ingantaccen caching. Hakanan ana samun ƙarfin ginin ta amfani da GNU Make na yau da kullun azaman zaɓi.
- Multithreading ayyuka _spawn() da _join() an aiwatar da su, suna samar da nade-nade na duniya don takamaiman tsarin aiki da APIs. Ana kuma ci gaba da aiki don aiwatar da tallafi ga POSIX Threads.
- An gabatar da mabuɗin _Thread_local don ba da damar ajiyar kowane zaren (TLS, Ma'ajiyar Gida-Zare). Ta hanyar tsoho, lokacin gudu na C yana fara TLS don babban zaren, wanda ya haɓaka mafi ƙarancin girman fayil ɗin aiwatarwa daga 12 zuwa 16 KB.
- Ƙara goyon baya ga sigogin "-ftrace" da "--strace" zuwa fayilolin aiwatarwa don buga bayanai game da duk kiran aiki da kiran tsarin zuwa stderr.
- An ƙara tallafi don kiran tsarin closefrom(), wanda aka goyan baya a cikin Linux 5.9+, FreeBSD 8+ da OpenBSD.
- A kan dandalin Linux An ƙara yawan aikin kiran clock_gettime da gettimeofday har sau 10 ta amfani da tsarin vDSO (virtual dynamic shared object), wanda ke ba da damar motsa mai kula da kiran tsarin zuwa sararin mai amfani da kuma guje wa sauyawar mahallin.
- An canza aikin lissafin lissafi don aiki tare da lambobi masu rikitarwa daga ɗakin karatu na Musl. An inganta ayyuka da yawa na lissafin lissafi.
- An gabatar da aikin nointernet() don kashe damar sadarwar.
- An ƙara sabbin ayyuka don ingantattun igiyoyi: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf, da vappendf.
- An ƙara amintaccen bambance-bambancen dangin kprintf() na ayyuka, ƙirƙira don gudana ƙarƙashin manyan gata.
- An inganta aikin aiwatarwa sosai SSL, SHA, curve25519 da RSA.
source: budenet.ru
