**مزون** (به انگلیسی: Meson) یک ابزار نرم‌افزاری برای ساخت خودکار یا تدوین نرم‌افزار است. هدف کلی مزون بالا بردن سطح بهره‌وری برنامه‌نویس است. مسون نرم‌افزاری رایگان و منبع باز است که با پایتون و تحت مجوز آپاچی ۲٫۰ نوشته شده‌است.

قابلیت همکاری
-------------

مسون که به زبان پایتون نوشته شده‌است، قالبا بر روی سیستم عامل‌های مشابه یونیکس مثل macOS، ویندوز مایکروسافت و سایر سیستم عامل‌ها قابل اجراست.

مسون از C, C ++, cuda, D, Objective - C, Fortran, جاوا، C , C , Rust و Vala پشتیبانی می‌کند و مکانیزمی برای کنترل وابستگی‌های به نام پیچشی دارد.

مسون از مجموعه Compiler گنو، Clang, مایکروسافت ویژوال ++ و دیگر compilerهای پشتیبانی می‌کند. این پروژه از نینجا به عنوان the backend اولیه استفاده می‌کند، اما همچنین می‌تواند از استودیو بصری مایکروسافت یا Xcode استفاده کند.

زبان
----

دستور زبان مسون از پایتون الگو برداری شده‌است، اما پایتون نیست. به گونه ای طراحی شده‌است که می‌تواند در هر زبان دیگری دوباره پیاده‌سازی شود. برای مثال، Meson++ یک پیاده‌سازی C++ است – وابستگی به پایتون یک جزئیات پیاده‌سازی است.

زبان مسون تورینگ کامل نیست و بنابراین نمی‌تواند یک برنامه دلخواه را توصیف کند. در عوض، گام‌های ساخت دل‌خواه فراتر از پردازش زبان‌های پشتیبانی شده می‌تواند به عنوان اهداف سفارشی نمایش داده شود.

زبان مسون سخت تایپ می‌شود، به طوری که انواع داخلی مانند کتابخانه، اجرایی، رشته و لیست آن‌ها غیرقابل تعویض هستند. به‌طور خاص، برخلاف درست کردن، این نوع لیست نوار را به فاصله تقسیم نمی‌کند؛ بنابراین، فاصله و دیگر کاراکترها در نام پرونده‌ها و آرگومان‌های برنامه، به نحو احسن انجام می‌شوند.

|  | مسون | CMake | بسازید |
| --- | --- | --- | --- |
| انواع داده‌ها | آری | نه | نه |
| لیست نوع داده | آری | semicolon delimited string | whitespace delimited string |
| نوع داده دیکشنری | since 0.47.0 | نه | نه |
| globbing فایل | نه | آری | آری |
| قابل توسعه از طریق توابع سفارشی | نه | آری | آری |
| می‌تواند خروجی دستورات دلخواه را بخواند (در زمان پیکربندی) | run\_command | آری | آری |
| می‌تواند دستورات دلخواه را در زمان ساخت به عنوان دستور العمل‌های اهداف سفارشی اجرا کند | آری | آری | آری |

سرعت و صحت
----------

همانند هر روش معمول، ایجاد الگوی افزایشی صحیح، مهم‌ترین ویژگی سرعت است (چون همه پیشرفت افزایشی در زمانی که کاربر مجبور به انجام یک ساختمان تمیز می‌شود، دور ریخته می‌شود).

بر خلاف Make, مرحله پیکربندی جداگانه تضمین می‌کند که تغییرات در آرگومان، متغیرهای محیطی و خروجی فرمان تا حدی در ساخت بعدی به کار نمی‌روند، که منجر به ساخت بی‌مزه می‌شود.

مانند Ninja, مسون از globbing فایل‌های منبع پشتیبانی نمی‌کند. با نیاز به تمام فایل‌های منبع که باید در فهرست تعاریف ساخت فهرست شوند، در صورتی که مجموعه فایل‌های منبع تغییر کرده باشد، در نتیجه مطمین شوید که فایل‌های منبع حذف می‌شوند. CMake از globbing پشتیبانی می‌کند، اما به همین دلیل مخالفت را توصیه می‌کند.

مسون در صورت نصب به‌طور خودکار از ccache استفاده می‌کند. همچنین تغییرات در جداول نشانه کتابخانه‌های اشتراکی را شناسایی می‌کند تا از برنامه‌های اجرایی relinking در برابر کتابخانه زمانی که هیچ تغییر ABI وجود ندارد، صرف‌نظر کند. headers Precompiled پشتیبانی می‌شوند، اما نیازمند پیکربندی هستند. به‌طور پیش‌فرض، اشکال‌زدایی بدون بهینه‌سازی هستند.

| ویژگی سرعت | مسون | CMake | بسازید |
| --- | --- | --- | --- |
| ساخت‌های قدیمی را ممنوع می‌کند (بازسازی جزئی در برابر تغییر ورودی) | آری (unless there are bugs) | If not globbing source files |
| هدفی که آزمایش‌ها را اجرا می‌کند به آزمایش‌های در حال ساخت بستگی دارد{{سخ}} (مثلا `test` `all` بستگی دارد) | آری | Trivial to add |
| حافظه پنهان | Automatic | Trivial to add | Trivial to add |
| Distcc | Trivial to add | Trivial to add | Trivial to add |
| نماد جدول آگاه پیوند مجدد | آری | Do it yourself | Do it yourself |
| هدرهای از پیش کامپایل شده | اختیاری | CMake ≥ 3.16 | Do it yourself |

امکانات
-------

هدف بیان‌شده از meson آسان‌تر شدن فعالیت‌های توسعه‌ای جدید است. به این ترتیب، meson می‌داند چگونه می‌توان اتحاد را دوباره ساخت، پوشش آزمایش، بهینه‌سازی زمان پیوند و … را بدون اینکه برنامه‌نویس مجبور به نوشتن پشتیبانی برای این کار شود، می‌سازد.

|  | مزون | CMake | ابزارهای خودکار |
| --- | --- | --- | --- |
| یک اسکریپت `configure` | نه | نه | فاصله انداختن |
| دایرکتوری نصب کتابخانه صحیح را روی x86\_64 Unix تنظیم کنید | Automatic | Not standardized | `./configure --libdir=/usr/lib64` |

### پروژه‌های فرعی

Meson می‌تواند به‌طور خودکار وابستگی‌های خارجی را از طریق pkg-config پیدا کرده و از آن استفاده کند، اما این فقط وابستگی‌های نصب شده را پیدا می‌کند، که Meson نمی‌تواند کاری در مورد آنها انجام دهد. به همین ترتیب، یا به عنوان یک پشتیبان، یک وابستگی می‌تواند به عنوان یک پروژه فرعی فرعی در درون یک پروژه فرعی دیگر، یا شامل یا به عنوان یک لینک دانلود، یا به عنوان یک لینک دانلود در نظر گرفته شود. این مسئله باعث می‌شود تا meson وابستگی برای راحتی کاربرانی که می‌خواهند پروژه را کامپایل کنند را حل کند، اما اگر به جای آن یک وابستگی نصب شده رایج استفاده شود، ممکن است به software کمک کند؛ بنابراین حالتی که بسته‌بندی کننده‌های لینوکس ترجیح می‌دهند بازگشتی است.

meson از meson و CMake subprojects پشتیبانی می‌کند. یک فایل ساخت meson نیز می‌تواند به سرویس WrapDB اشاره کند.

مقایسه موارد استفاده از تفکیک وابستگی در سیستم‌های ساخت مختلف

| مورد استفاده | مزون | CMake | بار |
| --- | --- | --- | --- |
| پیدا کردن وابستگی‌های نصب شده | pkg-config، بسته‌های CMake | ماژول CMake, pkg-config | ؟ |
| دانلود خودکار وابستگی‌ها | زیر پروژه | FetchContent | وابستگی بار |
| یافتن وابستگی‌های نصب شده، با بارگیری مجدد | pkg-config + subproject | CMake module/pkg-config + FetchContent | ؟ |
| مولد فایل pkg-config | آری | نه | نه |
| استفاده به عنوان یک وابستگی قابل دانلود خودکار را آسان کنید | Can be used as a Meson subproject | نه | With registration to crates.io |

### تلفیقی متقابل

ترجمه متقابل نیاز به پیکربندی اضافه دارد که meson به شکل یک فایل صلیب جداگانه پشتیبانی می‌کند، که می‌تواند خارج از پروژه meson باشد.

پذیرندگان
---------

GNOME هدف خود را انتقال پروژه‌های خود به Meson قرار داده‌است. از اواخر سال ۲۰۱۷، گنوم شل پس از کنار گذاشتن Autotools به‌طور انحصاری به Meson نیاز دارد، و اجزای مرکزی مانند GTK+، Clutter-GTK، GLib و GStreamer را می‌توان با Meson ساخت.

systemd از زمان انداختن Autotools در نسخه ۲۳۴ به meson تکیه دارد.

صفحه اصلی meson پروژه‌های بیشتری را با استفاده از meson فهرست می‌کند.

منابع
-----

1. ↑  "Releases - mesonbuild/meson". Retrieved 19 February 2022 – via GitHub.
2. 1 2  "Making build systems not suck (linux.conf.au video)".
3. ↑  "mesonbuild/meson: The Meson Build System". *GitHub*. Retrieved 13 April 2016.
4. ↑  Baker, Dylan (2021-05-28), *dcbaker/meson-plus-plus*, retrieved 2021-05-28
5. ↑
6. 1 2  "GNOME Goal: Port modules to use Meson build system".
7. ↑  "GNOME 3.26 Beta Debuts: More Meson Porting, Wayland Action".