{"id":121335,"date":"2025-01-14T09:46:13","date_gmt":"2025-01-14T07:46:13","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/dostupen-emscripten-4-0-kompilyator-iz-c-c-v-webassembly"},"modified":"2025-01-14T09:46:13","modified_gmt":"2025-01-14T07:46:13","slug":"dostupen-emscripten-4-0-kompilyator-iz-c-c-v-webassembly","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/news\/dostupen-emscripten-4-0-kompilyator-iz-c-c-v-webassembly","title":{"rendered":"\u00c8 disponibile Emscripten 4.0, un compilatore da C\/C++ a WebAssembly","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00c8 stato pubblicato il rilascio dell'insieme di strumenti Emscripten 4.0, che consente di compilare codice in C\/C++ e in altri linguaggi che hanno front-end basati su LLVM, in un codice intermedio universale a basso livello chiamato WebAssembly. Il risultato ottenuto pu\u00f2 essere utilizzato per l'integrazione con progetti JavaScript, per l'esecuzione in web browser, per l'uso in Node.js o per la creazione di applicazioni multipiattaforma isolate, eseguite tramite wasm runtime. Il codice del progetto \u00e8 distribuito sotto licenza MIT. Nel compilatore sono utilizzati i risultati del progetto LLVM e per la generazione di WebAssembly e l'ottimizzazione \u00e8 impiegata la libreria Binaryen.    <\/p>\n<p>L'obiettivo principale di Emscripten \u00e8 dichiarato essere la creazione di uno strumento che consenta di eseguire codice Web indipendentemente dal linguaggio di programmazione in cui tale codice \u00e8 inizialmente scritto. Nelle applicazioni compilate possono essere utilizzate chiamate a librerie standard C e C++ (libc, libcxx), estensioni C++, multithreading basato su pthreads, API POSIX e molte librerie multimediali. Sono forniti separatamente API per l'integrazione con API Web e codice JavaScript.    <\/p>\n<p>Emscripten supporta la traduzione dell'output della libreria SDL2 tramite Canvas e implementa anche il supporto per OpenGL e EGL tramite API WebGL, consentendo di convertire applicazioni grafiche e giochi in WebAssembly (ad esempio, \u00e8 disponibile un porting del toolkit Qt, supporta i motori di gioco Unreal Engine e Unity, oltre al motore di simulazione dei processi fisici Bullet).     <\/p>\n<p>Oltre alla compilazione di codice in C\/C++ si stanno sviluppando progetti separati per l'esecuzione in browser di interpreti e <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/it\/vps\/\"   title=\"macchine virtuali\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"2133\">macchine virtuali<\/a> per i linguaggi Lua, C#, Python, Ruby e Perl. Inoltre, \u00e8 possibile utilizzare front-end per LLVM diversi da Clang, ad esempio front-end per linguaggi come Swift, Rust, D e Fortran.      <\/p>\n<p>L'assegnazione del numero di versione 4.0 \u00e8 legata all'introduzione di modifiche che rompono la compatibilit\u00e0 a livello ABI (alla ricompilazione del progetto in Emscripten 4.0 sar\u00e0 necessaria la ricompilazione di file oggetto e librerie compilati dalle versioni precedenti di Emscripten). Le principali modifiche in Emscripten 4.0:  <\/p>\n<ul>\n<li class=\"l\"> \u00c8 stata aggiunta l'opzione &#171;-sWASM_LEAGCY_EXCEPTIONS&#187; per scegliere tra i vecchi e i nuovi meccanismi di gestione delle eccezioni. Per impostazione predefinita, continua a essere utilizzato il vecchio meccanismo, poich\u00e9 non tutti i browser hanno implementato le funzionalit\u00e0 di WebAssembly per gestire i nuovi gestori delle eccezioni.\n<li class=\"l\"> I componenti compiler-rt, libcxx, libcxxabi e libunwind sono stati aggiornati alla branch LLVM 19.\n<li class=\"l\"> La versione minima supportata in compilazione per il browser Safari (impostazione MIN_SAFARI_VERSION) \u00e8 stata aumentata da 14.1 a 15.0, consentendo di abilitare di default diverse funzionalit\u00e0 avanzate di WebAssembly:\n<ul>\n<li class=\"l\"> \u00c8 stato incluso l'uso di nuove istruzioni per la conversione del tipo float in int (nontrapping-fptoint), che invece di generare un'eccezione in caso di overflow del risultato restituiscono il valore minimo o massimo possibile (necessario per SIMD).\n<li class=\"l\"> \u00c8 stata abilitata l'opzione WASM_BIGINT, per cui per lo scambio di valori interi a 64 bit tra WebAssembly e codice JavaScript viene utilizzato il tipo BigInt.\n<li class=\"l\"> \u00c8 stata attivata l'opzione BULK_MEMORY, in cui le funzioni C memcpy e memset utilizzano le istruzioni WebAssembly memory.copy e memory.fill.    <\/ul>\n<li class=\"l\"> Nella funzione PATH.basename() \u00e8 stata disabilitata la normalizzazione dei percorsi (PATH.normalize()), cio\u00e8 la chiamata &#8216;PATH.basename(&#171;a\/.&#187;)&#8217; ora restituir\u00e0 &#171;.&#187; invece di &#171;a&#187;, e &#8216;PATH.basename(&#171;a\/b\/..&#187;)&#8217; restituir\u00e0 &#171;..&#187; invece di &#171;a&#187;.\n<li class=\"l\"> Utilizzando l'opzione &#171;-sMODULARIZE&#187;, le funzioni factory che creano e restituiscono istanze di moduli e oggetti WebAssembly per JavaScript sono ora contrassegnate con il flag &#171;async&#187; quando vengono compilate in modalit\u00e0 WASM_ASYNC_COMPILATION, applicata per impostazione predefinita.\n<li class=\"l\"> \u00c8 stata aggiunta la possibilit\u00e0 di specificare librerie JavaScript utilizzando l'opzione &#171;-lfoo.js&#187;. A differenza dell'opzione &#171;&#8212;js-library&#187;, la ricerca della libreria viene eseguita in tutti i percorsi specificati tramite l'opzione &#171;-L&#187;.\n<li class=\"l\"> Durante il linking in modalit\u00e0 di debug (-O0 o -sASSERTIONS) viene utilizzata di default la variante di debug della funzione malloc con i controlli assert attivati, che rilevano errori come la doppia chiamata alla funzione free().        <\/ul>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/opennews\/art.shtml?num=62553\">opennet.ru<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u0432\u044b\u043f\u0443\u0441\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f Emscripten 4.0, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 C\/C++ \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0444\u0440\u043e\u043d\u0442\u044d\u043d\u0434\u044b \u043d\u0430 \u0431\u0430\u0437\u0435 LLVM, \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 WebAssembly. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 JavaScript-\u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432 web-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 Node.js \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u043d\u043e\u0433\u043e\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 wasm runtime. \u041a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-121335","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u0432\u044b\u043f\u0443\u0441\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f Emscripten 4.0, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 C\/C++ \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0444\u0440\u043e\u043d\u0442\u044d\u043d\u0434\u044b \u043d\u0430 \u0431\u0430\u0437\u0435 LLVM, \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 WebAssembly.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/news\/dostupen-emscripten-4-0-kompilyator-iz-c-c-v-webassembly\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d Emscripten 4.0, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438\u0437 C\/C++ \u0432 WebAssembly | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u0432\u044b\u043f\u0443\u0441\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f Emscripten 4.0, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 C\/C++ \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0444\u0440\u043e\u043d\u0442\u044d\u043d\u0434\u044b \u043d\u0430 \u0431\u0430\u0437\u0435 LLVM, \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 WebAssembly.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/news\/dostupen-emscripten-4-0-kompilyator-iz-c-c-v-webassembly\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2025-01-14T07:46:13+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-01-14T07:46:13+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Disponibile Emscripten 4.0, il compilatore da C\/C++ a WebAssembly | ProHoster","description":"\u00c8 stata pubblicata la versione 4.0 dell'Emscripten Toolkit, che consente di compilare codice C\/C++ e altri linguaggi per cui sono disponibili front-end basati su LLVM, in un codice intermedio WebAssembly universale a basso livello.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/news\/dostupen-emscripten-4-0-kompilyator-iz-c-c-v-webassembly","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d Emscripten 4.0, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438\u0437 C\/C++ \u0432 WebAssembly | ProHoster","og:description":"\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d \u0432\u044b\u043f\u0443\u0441\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f Emscripten 4.0, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 C\/C++ \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0444\u0440\u043e\u043d\u0442\u044d\u043d\u0434\u044b \u043d\u0430 \u0431\u0430\u0437\u0435 LLVM, \u0432 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 WebAssembly.","og:url":"https:\/\/prohoster.info\/it\/blog\/news\/dostupen-emscripten-4-0-kompilyator-iz-c-c-v-webassembly","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2025-01-14T07:46:13+00:00","article:modified_time":"2025-01-14T07:46:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"121335","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-02-09 17:39:23","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2026-01-23 09:39:24","updated":"2026-02-09 17:39:23","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/121335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=121335"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/121335\/revisions"}],"predecessor-version":[{"id":159377,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/121335\/revisions\/159377"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=121335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=121335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=121335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}