Dall'archivio articoli > .NET Standard
Sviluppare codice nativo per Windows e Linux con .NET Core
Per poter utilizzare questa funzionalità, devi fare il login o iscriverti.
La tecnologia .NET è ormai presente da 20 anni, dapprima nata esclusivamente per i sistemi Windows, ma da alcuni anni è disponibile sulle piattaforme Linux e Mac e su architetture diverse (x86, x64, ARM). Ormai troviamo librerie di tutti i tipi, distribuite tramite NuGet e, nelle maggior parte dei casi, sono disponibili per tutte le piattaforme, grazie alla natura agnostica delle DLL. Esse vengono compilate in un linguaggio intermediario IL (intermediate language) per poi essere convertite in linguaggio macchina in fase di esecuzione, a seconda del runtime che lo esegue.
Una parte di queste librerie, soprattutto quelle del CoreCLR, espongono funzionalità che vengono implementate nativamente sulla piattaforma in cui girano. Funzionalità come allocare la memoria, I/O su disco e su rete e il threading sono possibili, perché sfruttati a seconda del sistema operativo. Queste librerie sono in grado di effettuare le rispettive chiamate verso le API del Kernel nelle quali vengono eseguite dandoci apparentemente l'impressione che il nostro codice sia identico su tutti i sistemi operativi, ma che in realtà viene eseguito con delle differenze, seppur minimali.
E' inevitabile quindi che ci siano delle situazioni in cui da .NET Core dobbiamo sfruttare delle funzionalità di un sistema operativo specifico, o delle istruzioni specifiche di un processore. E' facile trovarsi di fronte a degli SDK per dispositivi esterni (camere, lettori, ecc) la cui unica libreria è in stile C/C++. Oppure ancora ci sono delle librerie ad alte prestazioni che per trarre il massimo dal sistema operativo e dai processori, sono scritte in C++, lavorano con puntatori e generano librerie per ogni rispettiva piattaforma.
In questo articolo vogliamo affrontare di conseguenza come possiamo realizzare delle librerie per .NET che sfruttino codice nativo, appositamente scritto, per supportare le nostre esigenze. L'idea è quella di:
Per prendere in considerazione un caso reale, utilizziamo una libreria sviluppata dal sottoscritto e disponibile all'indirizzo https://github.com/Ricciolo/libfacedetection.net. Essa espone un algoritmo di ricerca dei visi basato su intelligenza artificiale, molto rapido che non necessità di alcuna dipendenza.
Partiamo quindi dal realizzare il primo passo: la libreria nativa.
Per realizzare una libreria nativa è necessario prima di tutto avere un compilatore per un linguaggio specifico che sia in grado di supportare le piattaforme da noi desiderate. Nell'ambito Windows il compilatore di Visual C++ è sicuramente tra i migliori e lo troviamo all'interno di Visual Studio. Con l'introduzione della versione 2019, inoltre, è in grado anche di supportare lo sviluppo per Linux permettendoci di sfruttare altri due compilatori famosi: gcc e clang. Essi possono essere usati anche per compilare su macOS e su architetture ARM. Infine, è stato aggiunto anche il supporto a make, una utility molto diffusa nell'ambito dello sviluppo in C++, in particolar modo sulle piattaforme UNIX like.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.