Rhyddhau'r llyfrgell C safonol Cosmopolitan 2.0, a ddatblygwyd ar gyfer ffeiliau gweithredadwy cludadwy

Mae rhyddhau'r prosiect Cosmopolitan 2.0 wedi'i gyhoeddi, gan ddatblygu'r llyfrgell safonol C a fformat ffeil gweithredadwy cyffredinol y gellir ei ddefnyddio i ddosbarthu rhaglenni ar gyfer gwahanol systemau gweithredu heb ddefnyddio dehonglwyr a pheiriannau rhithwir. Mae'r canlyniad a geir trwy lunio GCC a Clang yn cael ei lunio'n ffeil gweithredadwy gyffredinol wedi'i chysylltu'n statig y gellir ei rhedeg ar unrhyw ddosbarthiad Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, a hyd yn oed ei alw o'r BIOS. Dosberthir cod y prosiect o dan drwydded ISC (fersiwn symlach o MIT/BSD).

Mae'r cynhwysydd ar gyfer cynhyrchu ffeiliau gweithredadwy cyffredinol yn seiliedig ar gyfuno segmentau a phenawdau sy'n benodol i wahanol systemau gweithredu (PE, ELF, MACHO, OPENBSD) mewn un ffeil, gan gyfuno sawl fformat gwahanol a ddefnyddir yn Unix, Windows a macOS. Er mwyn sicrhau bod un ffeil gweithredadwy yn rhedeg ar systemau Windows ac Unix, tric yw amgodio ffeiliau Windows PE fel sgriptiau cregyn, gan fanteisio ar y ffaith nad yw Thompson Shell yn defnyddio'r marciwr sgript "#!". Er mwyn creu rhaglenni sy'n cynnwys sawl ffeil (gan gysylltu'r holl adnoddau i un ffeil), mae'n cefnogi ffurfio ffeil gweithredadwy ar ffurf archif ZIP a ddyluniwyd yn arbennig. Cynllun y fformat arfaethedig (enghraifft cais hello.com):

MZqFpD='BIOS BOOT SECTOR' gweithred 7 $(command -v $0) printf '\177ELF...LINKER-ENCODED-FREEBSD-HEADER' >&7 gweithred "$0" "$@" exec qemu-x86_64 "$0" "$ @" ymadael 1 MODD GO IAWN … SEGMENTS ELF… OPENBSD NODYN … PENNAETH MACHO… COD AND DATA… ZIP CYFEIRIADUR …

Ar ddechrau'r ffeil, nodir y label "MZqFpD", sy'n cael ei weld fel pennawd fformat Windows PE. Mae'r dilyniant hwn hefyd wedi'i ddadgodio yn y cyfarwyddyd “pop % r10; jno 0x4a; jo 0x4a", a'r llinell "\177ELF" i'r cyfarwyddyd "jg 0x47", a ddefnyddir i anfon ymlaen i'r pwynt mynediad. Mae systemau Unix yn rhedeg cod cragen sy'n defnyddio'r gorchymyn exec, gan basio'r cod gweithredadwy trwy bibell ddienw. Cyfyngiad ar y dull arfaethedig yw'r gallu i redeg ar systemau gweithredu tebyg i Unix gan ddefnyddio cregyn sy'n cefnogi modd cydnawsedd Thompson Shell yn unig.

Mae'r alwad qemu-x86_64 yn darparu hygludedd ychwanegol ac yn caniatáu i god a luniwyd ar gyfer y bensaernïaeth x86_64 redeg ar lwyfannau nad ydynt yn x86, megis byrddau Raspberry Pi a dyfeisiau Apple sydd â phroseswyr ARM. Gellir defnyddio'r prosiect hefyd i greu cymwysiadau hunangynhwysol sy'n rhedeg heb system weithredu (metel noeth). Mewn cymwysiadau o'r fath, mae cychwynnydd ynghlwm wrth y ffeil gweithredadwy, ac mae'r rhaglen yn gweithredu fel system weithredu y gellir ei chychwyn.

Mae'r llyfrgell llyfrgell C safonol a ddatblygwyd gan y prosiect yn cynnig 2024 o swyddogaethau (yn y datganiad cyntaf roedd tua 1400 o swyddogaethau). O ran perfformiad, mae Cosmopolitan yn gweithio mor gyflym â glibc ac yn amlwg ar y blaen i Musl a Newlib, er gwaethaf y ffaith bod Cosmopolitan yn drefn maint sy'n llai o ran maint cod na glibc ac yn cyfateb yn fras i Musl a Newlib. Er mwyn optimeiddio swyddogaethau a elwir yn aml fel memcpy a strlen, defnyddir y dechneg “perfformiad diferu” hefyd, lle defnyddir rhwymiad macro i alw'r swyddogaeth, lle mae'r casglwr yn cael ei hysbysu am y cofrestrau CPU sy'n ymwneud â gweithredu'r cod. proses, sy'n caniatáu arbed adnoddau wrth arbed cyflwr CPU trwy arbed cofrestrau cyfnewidiol yn unig.

Ymhlith y newidiadau yn y datganiad newydd:

  • Mae'r cynllun ar gyfer cyrchu adnoddau mewnol y tu mewn i ffeil zip wedi'i newid (wrth agor ffeiliau, mae'r llwybrau arferol /zip/... bellach yn cael eu defnyddio yn lle defnyddio'r rhagddodiad zip:..). Yn yr un modd, i gael mynediad i ddisgiau yn Windows, mae'n bosibl defnyddio llwybrau fel "/c/..." yn lle "C:/...".
  • Mae llwythwr APE (Gwirioneddol Gludadwy Gweithredadwy) newydd wedi'i gynnig, sy'n diffinio fformat ffeiliau gweithredadwy cyffredinol. Mae'r llwythwr newydd yn defnyddio mmap i osod y rhaglen yn y cof ac nid yw bellach yn newid y cynnwys ar y hedfan. Os oes angen, gellir trosi'r ffeil gweithredadwy gyffredinol yn ffeiliau gweithredadwy rheolaidd sy'n gysylltiedig â llwyfannau unigol.
  • Ar y platfform Linux, mae'n bosibl defnyddio'r modiwl cnewyllyn binfmt_misc i redeg rhaglenni APE. Nodir mai defnyddio binfmt_misc yw'r dull lansio cyflymaf.
  • Ar gyfer Linux, mae gweithrediad y galwadau system addewid() a dadorchuddio() a ddatblygwyd gan y prosiect OpenBSD wedi'i gynnig. Darperir API ar gyfer defnyddio'r galwadau hyn mewn rhaglenni yn C, C++, Python a Redbean, yn ogystal â chyfleustodau pledge.com ar gyfer ynysu prosesau mympwyol.
  • Mae'r adeilad yn defnyddio cyfleustodau Landlock Make - rhifyn o GNU Make gyda gwirio dibyniaeth fwy llym a'r defnydd o alwad system Landlock i ynysu'r rhaglen oddi wrth weddill y system a gwella effeithlonrwydd caching. Fel opsiwn, cedwir y gallu i adeiladu gyda GNU Make rheolaidd.
  • Mae swyddogaethau ar gyfer multithreading wedi'u gweithredu - _spawn() a _join(), sy'n rhwymiadau cyffredinol dros APIs sy'n benodol i systemau gweithredu gwahanol. Mae gwaith hefyd ar y gweill i roi cymorth POSIX Threads ar waith.
  • Mae'n bosibl defnyddio'r allweddair _Thread_local i ddefnyddio storfa ar wahân ar gyfer pob edefyn (TLS, Thread-Local Storage). Yn ddiofyn, mae'r amser rhedeg C yn cychwyn TLS ar gyfer y prif edefyn, sydd wedi achosi i'r maint gweithredadwy lleiaf gynyddu o 12 KB i 16 KB.
  • Mae cefnogaeth ar gyfer y paramedrau “--ftrace” a “--strace” wedi'i ychwanegu at ffeiliau gweithredadwy i allbynnu gwybodaeth am yr holl alwadau swyddogaeth a galwadau system i stderr.
  • Cefnogaeth ychwanegol ar gyfer galwad system closefrom (), a gefnogir ar Linux 5.9+, FreeBSD 8+ ac OpenBSD.
  • Ar y platfform Linux, mae perfformiad galwadau cloc_gettime a gettimeofday wedi'i gynyddu hyd at 10 gwaith trwy ddefnyddio'r mecanwaith vDSO (gwrthrych deinamig rhithwir a rennir), sy'n ei gwneud hi'n bosibl symud y triniwr galwadau system i ofod defnyddwyr ac osgoi switshis cyd-destun.
  • Mae ffwythiannau mathemategol ar gyfer gweithio gyda rhifau cymhlyg wedi'u symud o'r llyfrgell Mwslemiaid. Mae gwaith llawer o swyddogaethau mathemategol wedi'i gyflymu.
  • Mae'r swyddogaeth nointernet() wedi'i chynnig i analluogi galluoedd rhwydwaith.
  • Ychwanegwyd swyddogaethau newydd ar gyfer atodi llinynnau'n effeithlon: atodi, atodiad, atodiad, atodiadau, atodiad, appendz, kappendf, kvappendf a vappendf.
  • Ychwanegwyd fersiwn gwarchodedig o deulu swyddogaethau kprintf(), wedi'i gynllunio i weithio gyda breintiau uchel.
  • Gwelliant sylweddol mewn perfformiad o ran gweithrediadau SSL, SHA, curve25519 ac RSA.

Ffynhonnell: opennet.ru

Ychwanegu sylw