{"id":123981,"date":"2025-05-04T03:05:06","date_gmt":"2025-05-04T01:05:06","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/predstavleny-princzipy-dizajna-kompilyatora-nimony-dlya-budushhego-nim-3-0"},"modified":"2025-05-04T03:05:06","modified_gmt":"2025-05-04T01:05:06","slug":"predstavleny-princzipy-dizajna-kompilyatora-nimony-dlya-budushhego-nim-3-0","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/novosti-interneta\/predstavleny-princzipy-dizajna-kompilyatora-nimony-dlya-budushhego-nim-3-0","title":{"rendered":"Presentati i principi di design del compilatore Nimony per il futuro Nim 3.0","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Durante lo sviluppo del linguaggio di programmazione Nim 3.0, \u00e8 stato creato un nuovo compilatore chiamato Nimony, il cui principio fondamentale di progettazione \u00e8 raggiungere la prevedibilit\u00e0 del tempo di esecuzione nel caso peggiore (Worst Case Execution Time, WCET). Questa esigenza \u00e8 dettata dall'orientamento verso sistemi di tempo reale rigoroso, dove un comportamento non deterministico \u00e8 inaccettabile. Di conseguenza, l'architettura Nimony esclude l'uso di compilatori JIT e raccolte di oggetti con tracciamento (tracing garbage collectors), poich\u00e9 le loro operazioni possono introdurre ritardi imprevedibili.    <\/p>\n<p>Per raggiungere la prevedibilit\u00e0, i tipi di dati primitivi (numeri interi, caratteri) vengono mappati direttamente su parole e byte della macchina corrispondente. I tipi compositi (strutture, oggetti) sono formati senza utilizzare l'indirizzamento indiretto (indirection), posizionandosi direttamente nello stack o all'interno di altre strutture dati. Questo approccio minimizza gli overhead e garantisce una corrispondenza pi\u00f9 trasparente tra il codice sorgente e il codice macchina generato.    <\/p>\n<p>Nel campo della gestione automatica della memoria (MM), Nimony si discosta dalla variet\u00e0 di opzioni disponibili in Nim 2.0, offrendo un'unica modalit\u00e0 standardizzata: &#171;mm:atomicArc&#187;. Questa modalit\u00e0 si basa sul conteggio dei riferimenti utilizzando operazioni atomiche, arricchita dalla semantica di spostamento (move semantics) e dalla chiamata ai distruttori al momento della distruzione dell'oggetto, avvicinando l'approccio alle pratiche adottate in Rust e nel C++ moderno.    <\/p>\n<p>Una delle principali innovazioni \u00e8 la separazione esplicita degli oggetti in aciclici e potenzialmente ciclici. Per impostazione predefinita, gli oggetti sono considerati aciclici (.acyclic), il che rappresenta un nuovo comportamento. Per i tipi di dati le cui istanze possono formare riferimenti circolari, \u00e8 necessaria un'annotazione esplicita tramite la pragma .cyclic. Si segnala che \u00e8 in fase di sviluppo un nuovo algoritmo per la raccolta dei riferimenti circolari, ma attualmente non \u00e8 garantita la sua prontezza per l'uso in produzione. Un vantaggio del MM basato sui distruttori \u00e8 la sua componibilit\u00e0: la gestione delle risorse che richiedono liberazione (ad esempio, descrittori di file, socket di rete, canali) viene integrata naturalmente attraverso i distruttori dei tipi corrispondenti.    <\/p>\n<p>L'approccio alla gestione degli errori in Nimony ha subito cambiamenti significativi. L'autore di Nim esprime insoddisfazione per i tradizionali meccanismi di eccezione e la loro simulazione tramite tipi di dati algebrici (sum types). Invece, si propone il concetto di integrazione dello stato di errore direttamente nell'oggetto dati stesso. Esempi includono: la rappresentazione degli errori nei flussi di input-output attraverso uno stato speciale, l'uso di NaN per i numeri in virgola mobile, o low(int) per i valori interi non validi. Nei casi in cui l'oggetto non pu\u00f2 incapsulare lo stato di errore, si suggerisce di utilizzare una variabile locale al thread (thread-local) per segnalare.    <\/p>\n<p>Tuttavia, il tradizionale meccanismo di eccezioni di Nim rimane, ma con un'importante precisazione: ogni procedura capace di generare un'eccezione deve ora essere annotata obbligatoriamente tramite la pragma {.raises.}. Questa richiesta mira a designare esplicitamente potenziali passaggi di controllo non locali.    <\/p>\n<p>Come alternativa o complemento, viene introdotto un nuovo tipo enumerativo ErrorCode. Questo tipo \u00e8 sicuro rispetto ai tipi e richiede un'adeguata gestione di tutte le possibili varianti (simile al case per l'enum). ErrorCode \u00e8 progettato per consentire la mappatura su codici di errore standard di vari sistemi e protocolli, come POSIX errno, codici di errore dell'API di Windows e stati HTTP. L'obiettivo \u00e8 unificare la gestione degli errori tra le diverse librerie e garantire la possibilit\u00e0 di traslare direttamente gli errori di sistema (ad esempio, &#171;disco pieno&#187;) nei corrispondenti codici di stato (ad esempio, HTTP 507) senza ulteriori trasformazioni. L'uso di ErrorCode consente anche di gestire e propagare gli errori senza allocare memoria nel heap, il che \u00e8 cruciale per la gestione delle situazioni di esaurimento della memoria (OOM).    <\/p>\n<p>La gestione delle situazioni di esaurimento della memoria (Out of Memory, OOM) in Nimony \u00e8 realizzata allontanandosi dalla pratica comune di terminazione anomala del programma (&#171;die on OOM&#187;). Invece, viene proposto un meccanismo che consente all'applicazione di continuare a funzionare. I contenitori e le operazioni di allocazione della memoria, che non possono completare la richiesta, attivano un gestore oomHandler sostituibile. L'implementazione predefinita registra la dimensione della richiesta non riuscita in una variabile locale al thread e consente la continuazione dell'esecuzione. Lo stato di esaurimento della memoria per il thread corrente pu\u00f2 essere verificato chiamando threadOutOfMem().    <\/p>\n<p>Lo sviluppatore pu\u00f2 fornire la propria implementazione di oomHandler, ad esempio, per il logging o per terminare anormalmente l'applicazione, se tale comportamento \u00e8 preferito. Un aspetto importante \u00e8 la gestione delle operazioni di costruzione di oggetti referenziati (ref object), che possono fallire a causa di OOM. In Nimony, il risultato di tali operazioni (ad esempio, tramite new o costruttori simili) pu\u00f2 essere nil, e il compilatore costringe la gestione di questo caso in modo simile al lavoro con tipi opzionali (Option), prevenendo cos\u00ec errori di dereferenziazione di puntatori nulli. Nel contesto di procedure annotate con {.raises.}, il valore restituito nil pu\u00f2 essere automaticamente convertito in ErrorCode.OutOfMemError.    <\/p>\n<p>Il meccanismo di programmazione generica (generics) in Nimony \u00e8 stato sviluppato rispetto a Nim 2.0. Il miglioramento chiave \u00e8 che il controllo completo dei tipi del codice generico viene ora eseguito al momento della definizione, e non solo all'istanza con tipi specifici. Ci si aspetta che questo permetta di rilevare errori in fasi di compilazione pi\u00f9 precoci, fornendo messaggi di errore pi\u00f9 informativi e migliorando il supporto da parte degli strumenti di sviluppo (IDE), in particolare il completamento automatico del codice.    <\/p>\n<p>I concetti (concepts), gi\u00e0 presenti in Nim, mantengono il loro ruolo come meccanismo di descrizione statica dei requisiti per i parametri di tipo delle funzioni e dei tipi generici. Essi consentono di specificare formalmente quali operazioni o propriet\u00e0 deve soddisfare un tipo per essere utilizzato in un dato contesto generico.    <\/p>\n<p>Nimony mira a unificare i modelli di programmazione asincrona e multithreading sotto un'unica costruzione spawn. La decisione se un compito avviato tramite spawn venga eseguito nello stesso thread (in modo asincrono) o in un thread separato del pool (multithreading) viene presa dallo scheduler durante l'esecuzione (runtime). Questo impone requisiti specifici sugli argomenti passati a spawn: devono essere thread-safe.    <\/p>\n<p>L'implementazione interna del modello di concorrenza si baser\u00e0 sulle continuazioni (continuations) e il compilatore eseguir\u00e0 la trasformazione del programma nello stile di passaggio di continuazioni (Continuation-Passing Style, CPS). Va notato che la costruzione stessa di spawn non \u00e8 implementata come una funzionalit\u00e0 integrata del linguaggio, ma come un plugin del compilatore.    <\/p>\n<p>Il parallelismo \u00e8 considerato un compito pi\u00f9 semplice rispetto alla concorrenza. Per scrivere codice esclusivamente parallelo, orientato al calcolo (ad esempio, nell'elaborazione di array di dati), Nimony offrir\u00e0 costrutti speciali, come i cicli for paralleli, contrassegnati dall'operatore \u00ab||\u00bb. Questo permetter\u00e0 di implementare algoritmi paralleli senza la necessit\u00e0 di utilizzare variabili di flusso di controllo, cosa che pu\u00f2 essere utile per compiti di calcolo scientifico o programmazione per GPU.    <\/p>\n<p>Il sistema di metaprogrammazione di Nim, noto per i suoi macro, in Nimony si evolve verso i plugin per il compilatore (compiler plugins). I plugin rappresentano codice che viene compilato in istruzioni native e viene eseguito nelle fasi avanzate del lavoro del compilatore, dopo la fase di controllo dei tipi. Questo fornisce ai plugin accesso a informazioni complete sui tipi e sulla semantica del codice analizzato.    <\/p>\n<p>Sono promessi API migliorati e pi\u00f9 user-friendly per lo sviluppo di plugin. L'uso di un formato intermedio NIF (Nim Intermediate Format) dovrebbe anche semplificare l'implementazione di varie trasformazioni del codice. I plugin possono essere eseguiti in modo incrementale e parallelo, favorendo un aumento delle performance di compilazione.    <\/p>\n<p>Tipi di plugin:  <\/p>\n<ul>\n<li class=\"l\">  Plugin per template (Template Plugins): Sono legati a template specifici e elaborano il codice associato alle loro invocazioni.\n<li class=\"l\"> Plugin modulari (Module Plugins): Ricevono come input l'AST (Abstract Syntax Tree) dell'intero modulo e devono restituire l'albero trasformato. La costruzione spawn \u00e8 un esempio di implementazione attraverso un plugin modulare.\n<li class=\"l\"> Plugin per iteratori: Simili ai plugin per template, ma applicati agli iteratori.\n<li class=\"l\"> Plugin per tipi nominali: Possono essere legati a specifici tipi di dati, sostituendo il meccanismo \u00abmacros di riscrittura dei termini\u00bb (term rewriting macros) di Nim. Questo consente l'implementazione di ottimizzazioni, come l'eliminazione di oggetti temporanei durante l'esecuzione di operazioni su matrici.  <\/ul>\n<p>Per la documentazione di Nimony \u00e8 previsto un sito completamente generato dall'IA e verificato dall'autore di Nim per la sua accuratezza.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/opennews\/art.shtml?num=63182\">opennet.ru<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Nim 3.0 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Nimony, \u043e\u0441\u043d\u043e\u0432\u043e\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (Worst Case Execution Time, WCET). \u042d\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u0438\u043a\u0442\u043e\u0432\u0430\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0436\u0451\u0441\u0442\u043a\u043e\u0433\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0433\u0434\u0435 \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 Nimony \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 JIT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432 \u043c\u0443\u0441\u043e\u0440\u0430 \u0441 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u043e\u0439 (tracing garbage [&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-123981","post","type-post","status-publish","format-standard","hentry","category-novosti-interneta"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Nim 3.0 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Nimony, \u043e\u0441\u043d\u043e\u0432\u043e\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (Worst Case Execution Time, WCET). \u042d\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u0438\u043a\u0442\u043e\u0432\u0430\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0436\u0451\u0441\u0442\u043a\u043e\u0433\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0433\u0434\u0435 \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 Nimony \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 JIT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432 \u043c\u0443\u0441\u043e\u0440\u0430 \u0441 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u043e\u0439 (tracing garbage\" \/>\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\/novosti-interneta\/predstavleny-princzipy-dizajna-kompilyatora-nimony-dlya-budushhego-nim-3-0\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\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\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 Nimony \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e Nim 3.0 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Nim 3.0 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Nimony, \u043e\u0441\u043d\u043e\u0432\u043e\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (Worst Case Execution Time, WCET). \u042d\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u0438\u043a\u0442\u043e\u0432\u0430\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0436\u0451\u0441\u0442\u043a\u043e\u0433\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0433\u0434\u0435 \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 Nimony \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 JIT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432 \u043c\u0443\u0441\u043e\u0440\u0430 \u0441 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u043e\u0439 (tracing garbage\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/novosti-interneta\/predstavleny-princzipy-dizajna-kompilyatora-nimony-dlya-budushhego-nim-3-0\" \/>\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-05-04T01:05:06+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-05-04T01:05:06+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\udd47Presentati i principi di design del compilatore Nimony per il futuro Nim 3.0 | ProHoster","description":"Nel processo di sviluppo del linguaggio di programmazione Nim 3.0, si sta sviluppando un nuovo compilatore Nimony, il cui principio di design fondamentale \u00e8 il conseguimento della prevedibilit\u00e0 del tempo di esecuzione nel peggiore dei casi (Worst Case Execution Time, WCET). Questo requisito \u00e8 dettato dall'orientamento verso sistemi di tempo reale rigoroso, dove un comportamento non deterministico \u00e8 inaccettabile. Di conseguenza, l'architettura di Nimony esclude l'uso di compilatori JIT e di garbage collector con tracciamento.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/novosti-interneta\/predstavleny-princzipy-dizajna-kompilyatora-nimony-dlya-budushhego-nim-3-0","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\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 Nimony \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e Nim 3.0 | ProHoster","og:description":"\u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Nim 3.0 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Nimony, \u043e\u0441\u043d\u043e\u0432\u043e\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0449\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (Worst Case Execution Time, WCET). \u042d\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u0438\u043a\u0442\u043e\u0432\u0430\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0436\u0451\u0441\u0442\u043a\u043e\u0433\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0433\u0434\u0435 \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 Nimony \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 JIT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0438 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432 \u043c\u0443\u0441\u043e\u0440\u0430 \u0441 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u043e\u0439 (tracing garbage","og:url":"https:\/\/prohoster.info\/it\/blog\/novosti-interneta\/predstavleny-princzipy-dizajna-kompilyatora-nimony-dlya-budushhego-nim-3-0","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-05-04T01:05:06+00:00","article:modified_time":"2025-05-04T01:05:06+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"123981","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-01-23 12:39:14","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2026-01-23 12:39:14","updated":"2026-01-23 12:39:14"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/123981","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=123981"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/123981\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=123981"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=123981"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=123981"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}