Meson | |
---|---|
| |
Tip de | software gratuit și open source și instrument de automatizare a construirii [d] |
Dezvoltator | Jussi Pakkanen [d] [1] |
Scris in | Python [2] |
Sistem de operare | Sistem de operare asemănător Unix [3] și Microsoft Windows |
Limbi de interfață | Engleză |
Prima editie | 2 martie 2012 |
Platformă hardware | multiplatformă [3] |
ultima versiune |
|
Stat | activ |
Licență | Licență Apache 2.0 [5] [1] |
Site-ul web | mesonbuild.com _ |
Fișiere media la Wikimedia Commons |
Meson ( MFA [ ˈ m i ː z ɒ n ]; din engleză - „ meson ” ) este un utilitar de consolă multiplatformă care automatizează procesul de construire a software -ului din codul sursă . Meson este open source și licențiat sub licența Apache . Ideea principală a lui Meson este să construiască cât mai repede posibil și să nu petreacă o singură picătură de timp pentru depanare și testare , precum și să aștepte ca procesul de compilare să înceapă . Utilitarul are, de asemenea, un nume mai lung, complet - „The Meson build system” (Meson Assembly System). Dar, în ciuda faptului că Meson este poziționat oficial ca un sistem de construcție, de fapt nu este, deoarece folosește practic un alt utilitar - sistemul de construcție Ninja și o serie de alte utilități [6] [7] .
Prima versiune a lui Meson a apărut în timpul sărbătorilor de Crăciun în 2012 și a fost dezvoltată de fizicianul finlandez - programatorul Jussi Pakkanen. Dezvoltatorul a fost abătut de starea în care au ajuns la acea vreme sistemele de automatizare a montajului. Mulți îi displăceau pentru că erau prea lente, unele erau prea greu de pus în practică, iar altele aveau o sintaxă prea complicată și obscură . Nefiind găsit sistemul de construcție pe care și-l dorea, Jussi a decis să-și petreacă timpul liber în acest weekend de vacanță și să-și creeze propriul sistem de construcție care să se potrivească nevoilor sale [8] [9] .
Numele utilitarului a fost ales ținând cont de faptul că nu trebuie să coincidă cu numele niciunui pachet din baza de date a managerului de pachete de sistem Debian sau cu niciun proiect din baza de date SourceForge . Deoarece Jussi este un fizician-programator, la un moment dat a decis să folosească numele particulei elementare - Gluon (ing. Gluon, de la cuvântul lipici - lipici), sugerând că „gluonii sunt particule elementare care țin împreună protonii și neutronii, la fel ca sarcina sistemului de construire este să ia bucăți de cod sursă și un compilator și apoi să le conecteze împreună.” Dar, din păcate, acest nume a fost deja luat, apoi, după ce a sortat mai multe particule subatomice rămase , a aflat că numele particulei de mezon s-a dovedit a fi liber [10] .
Scopul declarat al lui Meson este de a promova metode moderne de dezvoltare. Cum ar fi utilizarea metodei „ single asamblare ”, asamblare cu acoperire de cod , optimizare LTO ( optimizare timp de legătură ), etc. Fără ca programatorul să fie nevoit să scrie suport pentru aceasta.
Scris în Python , Meson rulează nativ pe sisteme de operare asemănătoare Unix , inclusiv macOS , precum și Microsoft Windows și o serie de alte sisteme de operare.
Meson suportă C , C++ , CUDA , D , Objective-C , Fortran , Java , C# , Rust , Vala [11] și are un mecanism de gestionare a dependențelor numit „Wrap” [12] .
Meson acceptă GNU Compiler Collection , Clang , Microsoft Visual C++ și alte compilatoare, inclusiv compilatoare netradiționale precum Emscripten și Cython [13] [14] . În același timp, Meson decide independent ce compilator și cu ce parametri ar trebui să fie utilizat. Și proiectele de compilare încrucișată necesită o configurație suplimentară, pe care Meson o menține ca fișier separat care poate fi extern unui proiect Meson [15] .
Meson folosește Ninja ca sistem principal de construcție, dar poate folosi și Microsoft Visual Studio sau Xcode .
Meson poate găsi și utiliza automat dependențe externe cu pkg-config , CMake și căutare specifică proiectului [16] , dar aceasta găsește numai dependențe instalate despre care Meson nu poate face nimic. Alternativ, sau ca alternativă, dependența poate fi furnizată ca subproiect - un proiect Meson în altul, sau conținută ca un link extern de descărcare, eventual cu patch-uri [12] . Acest lucru îi permite lui Meson să rezolve „ iad de dependență ” pentru confortul utilizatorilor obișnuiți care doresc să compileze un proiect, dar poate contribui și la umflarea software -ului dacă ar putea fi folosită o dependență instalată comună. Astfel, modul preferat de utilizare a pachetelor Linux dispare în fundal.
Meson, pe lângă propriul său sistem de subproiect, acceptă și sistemul de subproiect CMake. Fișierul de asamblare Meson se poate referi și la serviciul Wrap DB [17] .
Meson are inițial suport încorporat pentru Visual Studio și XCode, dar pentru a simplifica integrarea cu o mare varietate de ISR , a fost dezvoltat un API special pentru a rezolva această problemă. Pentru a face acest lucru, de fiecare dată când Meson construiește, acesta creează un folder „meson-info” și pune fișiere de informații JSON în el . Cu ajutorul acestor fișiere, orice program poate obține informații detaliate despre proiectele care se construiesc [18] .
Sintaxa fișierelor de descriere a ansamblului Meson (limbaj Meson) este împrumutată de la Python, dar nu este în sine un limbaj Python. A fost conceput în așa fel încât să poată fi reimplementat în orice altă limbă [19] [20] . De exemplu, Meson++ [21] este o implementare C++, dependența Python este doar un detaliu de implementare.
Limbajul Meson nu este Turing complet și, prin urmare, nu poate exprima un program arbitrar [22] . În schimb, pașii de construcție arbitrari dincolo de scopul compilarii limbilor acceptate pot fi reprezentați ca ținte personalizate [23] .
Limbajul Meson este puternic tipizat, astfel încât tipurile încorporate precum bibliotecă, executabil, șiruri de caractere și listele lor nu sunt interschimbabile [24] . Variabilele nu au un tip vizibil, ceea ce face ca Meson să fie tastat dinamic. Spre deosebire de același Make , tipul de listă nu separă șiruri pe spații [25] .
Să creăm „ Bună, lume!” " proiect în limbaj C, fișierul se va numi " main.c ".
#include <stdio.h> int main () { pune ( "Bună, lume!" ); returnează 0 ; }Apoi, lângă el, creați un fișier - " meson.build ".
proiect ( 'tutorial' , 'c' ) # tutorial este numele proiectului, # c - limbaj de programare executabil ( 'demo' , 'main.c' ) # demo este numele executabilului, # "main.c" - fișier cod sursăMai întâi, să inițializam proiectul.
$ meson setup builddirVa apărea directorul „ builddir ”, să intrăm în el și să ne construim proiectul.
$ cd builddir $ meson compileFișierul executabil este gata, rămâne doar să îl rulați.
$ ./demoDin lista proiectelor software, pot fi remarcate cele mai semnificative și influente [26] :
Asamblare sisteme de automatizare | |
---|---|