Lëshimi i versionit standard të bibliotekës C Cosmopolitan 2.0, që po zhvillohet për skedarë ekzekutivë të përshtatshëm.

ËshtĂ« publikuar versioni i projektit Cosmopolitan 2.0, i cili zhvillon bibliotekĂ«n standard tĂ« C dhe formatin univers tĂ« skedarĂ«ve ekzekutivĂ«, tĂ« cilin mund ta pĂ«rdorni pĂ«r shpĂ«rndarjen e programeve pĂ«r sisteme tĂ« ndryshme operative pa pĂ«rdorur interpreterĂ« dhe makina virtuale. Rezultati i marrĂ« pĂ«rmes kompikimit nĂ« GCC dhe Clang Ă«shtĂ« i ndĂ«rtuar nĂ« njĂ« skedar ekzekutiv univers tĂ« lidhur statikisht, i cili Ă«shtĂ« i pĂ«rshtatshĂ«m pĂ«r tĂ« nyjtuar nĂ« çdo shpĂ«rndarje Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, madje edhe thirret nga BIOS. Kodi i projektit shpĂ«rndahet nĂ«n licencĂ«n ISC (njĂ« version i thjeshtuar i MIT/BSD).

Konteineri për formimin e skedarëve ekzekutivë univers është i bazuar në kombinimin e segmenteve dhe titujve specifikë për sisteme të ndryshme operative (PE, ELF, MACHO, OPENBSD) në një skedar, duke kombinuar në të disa formate të ndryshme që përdoren në Unix, Windows dhe macOS. Për të siguruar ekzekutimin e një skedari ekzekutiv në Windows dhe sistemet Unix, aplikohet një nqëllim që lidhet me kodimin e skedarëve Windows PE si një skenar shell, duke përfituar nga fakti se Thompson Shell nuk përdor treguesin e skenarëve «#!». Për të krijuar programe që përfshijnë disa skedarë (kompozimi i të gjithë burimeve në një skedar), mbështetet formimi i skedarit ekzekutiv si një arkiv ZIP i dizajnuar posaçërisht. Schemat e formatit të propozuar (shembulli i aplikacionit hello.com):

MZqFpD=’ BIOS BOOT SECTOR’ exec 7 $(command -v $0) printf ‘\177ELF
HEAD-ENCODED-FREEBSD-HEADER’ >&7 exec «$0» «$@» exec qemu-x86_64 «$0» «$@» exit 1 REAL MODE
 ELF SEGMENTS
 OPENBSD NOTE
 MACHO HEADERS
 CODE AND DATA
 ZIP DIRECTORY


Fillimisht, skedari tregoi etiketën «MZqFpD», e cila perceptohet si titulli i formatit Windows PE. Kjo sekuencë gjithashtu dekodohet në instruktionin «pop %r10 ; jno 0x4a ; jo 0x4a», dhe stringu «\177ELF» në instruktionin «jg 0x47», të cilat përdoren për kalimin në pikën e hyrjes. Në sistemet Unix, ekzekutohet kodi shell, në të cilin përdoret komanda exec me kalimin e kodit ekzekutiv përmes një kanali të paemruar. Kufizimi i metodës së propozuar është mundësia e ekzekutimit në OS të ngjashme me Unix vetëm duke përdorur shell-e që mbështesin modin e pajtueshmërisë me Thompson Shell.

Thirrja e qemu-x86_64 është parashikuar për të realizuar portabilitet të shtuar dhe lejon ekzekutimin e kodit të kompiliuar për arkitekturën x86_64 në platforma të tjera përveç x86, si në pllakëza Raspberry Pi dhe pajisje Apple të pajisura me procesorë ARM. Projekti gjithashtu mund të përdoret për të krijuar aplikacione autonome që punojnë pa një sistem operativ (bare metal). Në këto aplikacione, një ngarkues i bashkangjitet skedarit të ekzekutueshëm dhe programi vepron si një sistem operativ që ngarkohet.

Në bibliotekën standarde të zhvilluar nga projekti, libc ofrohen 2024 funksione (në numrin e parë kishte rreth 1400 funksione). Nga pikëpamja e performancës, Cosmopolitan punon po aq shpejt sa glibc dhe i përgjigjet dukshëm Musl dhe Newlib, meqë Cosmopolitan ka një madhësi kodi që është një rend më e vogël se glibc dhe pothuajse shkon përkrah Musl dhe Newlib. Për optimizimin e funksioneve që thirren shpesh, si memcpy dhe strlen, përdoret teknika "trickle-down performance", ku për thirrjen e funksionit aplikohet një makro-përkufizues, në të cilën kompajleri njofton për regjistrat e CPU të angazhuar gjatë ekzekutimit të kodit, duke lejuar kështu ruajtjen e burimeve përmes ruajtjes vetëm të regjistrave të modifikueshëm.

Mes ndryshimeve në versionin e ri:

  • Schemi i aksesit ndaj burimeve tĂ« brendshme brenda skedarit zip Ă«shtĂ« ndryshuar (nĂ« hapjen e skedarĂ«ve tani pĂ«rdoren rrugĂ« tĂ« zakonshme /zip/... nĂ« vend tĂ« pĂ«rdorimit tĂ« prefiksit zip:..). Po ashtu, pĂ«r aksesin nĂ« disqet nĂ« Windows Ă«shtĂ« ofruar mundĂ«sia e pĂ«rdorimit tĂ« rrugĂ«ve tĂ« tilla " /c/..." nĂ« vend tĂ« "C:/...".
  • NjĂ« ngarkues i ri APE (Actually Portable Executable) Ă«shtĂ« propozuar, i cili pĂ«rcakton formatin e skedarĂ«ve tĂ« ekzekutueshĂ«m universale. Ngarkuesi i ri pĂ«rdor mmap pĂ«r ta vendosur programin nĂ« memorje dhe nuk e ndryshon mĂ« pĂ«rmbajtjen nĂ« flakĂ«. NĂ«se Ă«shtĂ« e nevojshme, skedari universale i ekzekutueshĂ«m mund tĂ« konvertohet nĂ« skedarĂ« tĂ« zakonshĂ«m ekzekutues, tĂ« lidhur me platforma tĂ« veçanta.
  • NĂ« platformĂ«n Linux Ă«shtĂ« realizuar mundĂ«sia e pĂ«rdorimit tĂ« modulit tĂ« bĂ«rthamĂ«s binfmt_misc pĂ«r tĂ« ekzekutuar programe APE. Theksohet se pĂ«rdorimi i binfmt_misc Ă«shtĂ« metoda mĂ« e shpejtĂ« pĂ«r tĂ« nisur.
  • PĂ«r Linux Ă«shtĂ« propozuar njĂ« implementim i funksionaliteteve tĂ« thirrjeve sistemore pledge() dhe unveil(), qĂ« zhvillohen nga projekti OpenBSD. Ofron njĂ« API pĂ«r pĂ«rdorimin e kĂ«tyre thirrjeve nĂ« programe nĂ« gjuhĂ«t C, C++, Python dhe Redbean, si dhe njĂ« utilitar pledge.com pĂ«r izolimin e proceseve tĂ« rastĂ«sishme.
  • PĂ«r ndĂ«rtim Ă«shtĂ« pĂ«rdorur utilitari Landlock Make — njĂ« redaktim i GNU Make me verifikim mĂ« tĂ« rreptĂ« tĂ« varĂ«sive dhe pĂ«rdorimin e thirrjes sistemore Landlock pĂ«r tĂ« izoluara programin nga sistemi tjetĂ«r dhe pĂ«r tĂ« rritur efikasitetin e keq-rafinimit. Si opsion, janĂ« ruajtur mundĂ«sitĂ« e ndĂ«rtimit edhe me GNU Make tĂ« zakonshĂ«m.
  • JanĂ« implementuar funksionet pĂ«r shumĂ«fijezĂ«sinĂ« — _spawn() dhe _join(), qĂ« pĂ«rbĂ«jnĂ« mbĂ«shtjellje universale mbi API specifike pĂ«r sisteme tĂ« ndryshme operimi. Po ashtu, po punohet pĂ«r implementimin e mbĂ«shtetjes pĂ«r POSIX Threads.
  • ËshtĂ« ofruar mundĂ«sia e pĂ«rdorimit tĂ« fjalĂ«s kyçe _Thread_local pĂ«r pĂ«rdorimin e depozita tĂ« veçantĂ« pĂ«r çdo fije (TLS, Thread-Local Storage). NĂ« mĂ«nyrĂ« tĂ« paracaktuar, runtime i C inicializon TLS pĂ«r fijen kryesore, qĂ« ka çuar nĂ« rritjen e madhĂ«sisĂ« minimale tĂ« skedarit ekzekutues nga 12 nĂ« 16 KB.
  • NĂ« skedarĂ«t ekzekutues Ă«shtĂ« shtuar mbĂ«shtetje pĂ«r parametrat «—ftrace» dhe «—strace» pĂ«r tĂ« nxjerrĂ« nĂ« stderr informacionin pĂ«r tĂ« gjitha thirrjet e funksioneve dhe thirrjet sistemore.
  • Shtuar mbĂ«shtetje pĂ«r thirrjen sistemore closefrom(), e mbĂ«shtetur nĂ« Linux 5.9+, FreeBSD 8+ dhe OpenBSD.
  • NĂ« platformĂ«n Linux Ă«shtĂ« rritur deri nĂ« 10 herĂ« performanca e thirrjeve clock_gettime dhe gettimeofday pĂ«rmes pĂ«rdorimit tĂ« mekanizmit vDSO (virtual dynamic shared object), qĂ« lejon tĂ« kalosh pĂ«rpunuesin e thirrjes sistemore nĂ« hapĂ«sirĂ«n e pĂ«rdoruesit dhe tĂ« shmangĂ«sh kalimet e kontekstit.
  • Funksionet matematikore pĂ«r punĂ«n me numra kompleksĂ« janĂ« transferuar nga biblioteka Musl. ShpejtĂ«sia e shumĂ« funksioneve matematikore Ă«shtĂ« pĂ«rshpejtuar.
  • ËshtĂ« propozuar funksioni nointernet(), qĂ« çon nĂ« ndalimin e mundĂ«sive rrjet.
  • Shtuar funksione tĂ« reja pĂ«r bashkimin efikas tĂ« strings: appendd, appendf, appendr, appends, appendw, appendz, kappendf, kvappendf dhe vappendf.
  • Shtuar njĂ« variant tĂ« sigurt tĂ« familjes sĂ« funksioneve kprintf(), i cili Ă«shtĂ« projektuar pĂ«r tĂ« punuar nĂ«n privilegje tĂ« larta.
  • Performanca e implementimeve Ă«shtĂ« rritur ndjeshĂ«m SSL, SHA, curve25519 dhe RSA.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster