۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

معرفی مختصری از سیستم ساخت شلوار

Pants یک ابزار ساخت سریع، سازگار از راه دور و ارگونومیک برای چندین زبان از جمله Python، Go، Java و Scala است. بیا یک نگاهی بیندازیم.

Pants یک ابزار ساخت سریع، سازگار از راه دور و ارگونومیک برای چندین زبان از جمله Python، Go، Java و Scala است. بیا یک نگاهی بیندازیم.

سیستم ساخت شلوار یک ابزار چند زبانه با تعدادی ویژگی خوب از جمله موازی سازی کامل و پشتیبانی از راه دور است. شلوار چندین سال است که وجود دارد، اما از آنجایی که نسخه ۲.۰ روی Rust کاملاً بازسازی شده اجرا می شود موتوری که برای سرعت طراحی شده است

Pants تا زمان نگارش این مقاله در نسخه ۲.۹ موجود است و اکنون شامل پشتیبانی آلفا برای جاوا و اسکالا و همچنین پشتیبانی از Python و Go است. به خواندن ادامه دهید تا نگاهی به این ابزار ساخت منبع باز امیدوارکننده داشته باشید.

ویژگی های شلوار

چند ویژگی جالب وجود دارد که شلوار را به سیستم ساختنی تبدیل می‌کند که به عنوان جایگزینی برای انتخاب‌های سنتی ارزش در نظر گرفتن دارد. در اینجا آنها با یک توضیح هستند.

  • استنتاج وابستگی خودکار. یک نفس عمیق بکشید و نفس راحتی بکشید: شلوار می تواند اظهارات واردات شما را تجزیه و تحلیل کند و بفهمد که چه چیزی را بدون حجم زیادی از ابرداده دانلود کنید.
  • بی اعتباری ریزدانه. شلوار روی کوچکترین واحد ممکن کار می کند، بنابراین شکست حداقل کار جدید را باطل می کند.
  • ذخیره سازی هوشمند نتایج. شلوار طوری طراحی شده است که نتایج را دقیقاً بر اساس ورودی‌ها ذخیره می‌کند، بنابراین اجرای یکسان در طول زمان نیازی به انجام مجدد کار مشابه ندارد.
  • اجرای همزمان. شلوار به رنگ Rust نوشته شده است و برای استفاده کامل از ماشین‌های چند هسته‌ای طراحی شده است، بنابراین موازی‌سازی را در ساخت‌های شما ممکن می‌سازد.
  • کارگران از راه دور. شلوار را می توان بر روی ماشین های ساخت از راه دور نصب کرد. در ترکیب با حافظه پنهان و همزمان، Pants به تیم‌ها اجازه می‌دهد تا از نتایج ساخت یکدیگر استفاده مجدد کنند و از عملکرد بالا بهره ببرند.
  • چند زبان. چندین زبان و پلتفرم از طریق یک رابط یکپارچه پشتیبانی می شوند.
  • API افزونه. یک سیستم افزونه پیشرفته به پلاگین ها اجازه می دهد از همه این امکانات استفاده کنند.

مدیریت وابستگی در شلوار

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

JFrog از سرویس توزیع نرم افزار رونمایی کرد

همانطور که می‌توانید تصور کنید، انجام این کار در پلتفرم‌های بسیار متفاوت (مثلاً پایتون در مقابل جاوا) کار ساده‌ای نیست. به این شرح تلاش در دنیای JVM.

در برخی موارد، همچنان باید نکاتی را به سیستم ارائه دهید که کجا می‌توانید وابستگی‌های خارجی را برای جاوا پیدا کنید. همانطور که تیم در افزودن پشتیبانی آلفا اشاره می کند:

[…] وابستگی‌های شخص ثالث اغلب در فایل‌های JAR هستند که Pants حتی آن‌ها را دانلود نمی‌کنند تا زمانی که مطمئن شوند به آن‌ها نیاز دارند. گاهی اوقات نام گروه مصنوع می‌تواند به ما سرنخی بدهد – یک مصنوع در گروه com.google.truth ممکن است حاوی فایل‌های کلاس com.google.truth باشد – اما بقیه مواقع به داده‌های بیشتری نیاز داریم. هنگام تعریف وابستگی‌های خود، می‌توانید فهرستی از بسته‌های JVM ارائه‌شده توسط آرتیفکت Maven ارائه دهید، و برای سایر مصنوعات، ما از یک پایگاه داده داخلی بسته‌ها به مختصات Maven بدون نسخه استفاده می‌کنیم.

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

در مورد پایتون، شما به طور مشابه یک فایل مرکزی برای ترسیم «جهان» وابستگی‌های مورد استفاده توسط مخزن ایجاد می‌کنید، اما Pants در مورد وابستگی‌هایی که واقعاً استفاده می‌شوند هوشمند است. (این بر خلاف رویکرد پتویی است که توسط ابزارهای دیگر استفاده می شود.)

همانطور که در اسناد Pants بیان می‌شود، “Pants دقیقاً می‌داند که هر فایل در پروژه شما به چه وابستگی‌هایی نیاز دارد، و به طور موثر از زیرمجموعه‌ای از وابستگی‌های مورد نیاز برای کار استفاده می‌کند.”

در Pants، شما نگاشت‌های نیازمندی‌ها را در فایلی تعریف می‌کنید که برای Python شبیه فهرست ۱ است.

فهرست ۱. فایل python_requirements شلوار

python_requirement(
    name="Django",
    requirements=["Django==3.2.1"],
)

طیف وسیعی از گزینه‌ها برای تنظیم دقیق موتور مدیریت وابستگی وجود دارد. جزئیات را اینجا خواهید یافت.

گل شلوار

مشابه سایر ابزارهای خط فرمان، Pants هنگام اجرا از مفهوم اهداف به عنوان دستورات اصلی استفاده می کند. برای مثال، می‌توانید با اجرای ./pants help، هدف کمک ساده را اجرا کنید.

هدف‌ها می‌توانند اهداف فرعی داشته باشند (./pants help goal)، می‌توانند با گزینه‌های مختلف پیکربندی شوند، و همچنین می‌توانند مانند به هم متصل شوند./pants fmt lint :: ، که هدف قالب را اجرا می کند، به دنبال آن هدف lint، با :: پیکربندی شده است، که به معنای همه فایل ها به صورت بازگشتی است. (می توانید اطلاعات بیشتر در مورد نحو فایل و فهرست راهنمای خط فرمان Pants را در اینجا بیابید. .)

CheerpJ مبتنی بر Wasm جاوا را در مرورگرهای وب اجرا می کند

Pants همچنین از قابلیت اجرا در حالت “حلقه” پشتیبانی می کند، به موجب آن موتور تغییرات را مشاهده می کند و دستورات را به ترتیب تکرار می کند. به عنوان مثال:

./pants --loop check test project/app_test.py

به پرچم --loop توجه کنید.

فایل های شلوار بساز

متادیتا برای ساخت‌های Pants شما در فایل‌های BUILD تعریف می‌شود. یکی از اصلی‌ترین چیزهایی که این فایل‌ها تعریف می‌کنند هدف‌ها است که به‌عنوان تکه‌هایی از اطلاعات نام‌گذاری می‌شوند که برای یک نوع هدف اعمال می‌شوند. هر هدف در یک دایرکتوری زندگی می کند و نام مسیر به اضافه یک شناسه منحصر به فرد برای آدرس دادن به آن هدف در پیکربندی سایر اهداف یا پارامترسازی اهداف در خط فرمان ارائه می کند.

پشتیبان شلوار

در شلوارها، قابلیت‌های مختلفی که اهداف را هدایت می‌کنند به عنوان backends شناخته می‌شوند. در فایل پیکربندی جهانی pants.toml، پشتیبان پروژه خود را فعال می کنید. می‌توانید نحوه فعال کردن چند قابلیت مرتبط با پایتون را در فهرست ۲ ببینید.

فهرست ۲. فعال کردن پشتیبان شلوار

backend_packages = [
  "pants.backend.shell",
  "pants.backend.python",
  "pants.backend.python.lint.black",
]

می‌توانید ببینید که قابلیت‌های Backend فضای نام سلسله مراتبی هستند. فهرست کامل پشتیبان‌های موجود در اینجا مشاهده می‌شود.

ریشه منبع شلوار

یک جنبه مهم دیگر که باید پیکربندی کنید ریشه‌های منبع در پروژه‌های خود است. . این کار در فایل سراسری pants.toml نیز انجام می شود. می توانید یک مثال ساده از شناسایی ریشه های پایتون و جاوا را در لیست ۳ ببینید.

فهرست ۳. ریشه های منبع برای پایتون

root_patterns = [
  '/src/python',
  '/test/python',
  ‘/src/java’
]

درون نگری پروژه در شلوار

شلوار دارای چند قابلیت درون نگری بسیار قدرتمند برای دریافت اطلاعات در مورد پروژه های شما است.

به عنوان مثال، با اجرای هدف list می‌توانید تمام اهداف پروژه‌های خود را بیابید. می‌توانید همه وابستگی‌های استفاده شده توسط یک هدف را با هدف وابستگی‌ها شناسایی کنید، یا با filedeps از چه فایل‌هایی استفاده می‌کند.

البته، هدف count-loc همیشه برای شمارش کل خطوط کد و تخمین پیچیدگی مفید است. اهدافی مانند اینها همچنین از تنظیم دقیق فایل‌ها و دایرکتوری‌هایی که می‌خواهند با استفاده از آرگومان‌های فایل و dir استفاده شوند، پشتیبانی می‌کنند.

مانیتورینگ تله متری مقیاس با InfluxDB

شلوار و ادغام مداوم

اسناد شلوار حاوی اطلاعات بسیار کمی در مورد نحوه بهترین استفاده از سیستم با CI (ادغام پیوسته). شما می توانید از بسیاری از مزایای ذاتی سیستم شلوار (موازی، سرعت، و حافظه پنهان) برای راه اندازی CI خود استفاده کنید، بنابراین ارزش تلاش برای در نظر گرفتن این گزینه ها را دارد.

شلوار و کار از راه دور

کار از راه دور در شلوار دو جنبه دارد:

  1. کش کردن از راه دور. Pants نتایج اجرای فرآیند محلی را در یک حافظه پنهان از راه دور ذخیره می کند و همچنین نتایج را از آن حافظه پنهان از راه دور مصرف می کند.
  2. اجرای از راه دور. Pants اجرای فرآیندها را به یک سرور راه دور بارگذاری می کند (و نتایج ذخیره شده را از آن سرور راه دور مصرف می کند).

ذخیره سازی از راه دور و اجرای از راه دور با راه اندازی یک سرور راه دور انجام می شود که یک API سازگار با REAPI، مانند BuildBarn. p>

مشتری های محلی Pants در دستگاه های توسعه دهنده شما، سپس با سرور راه دور تعامل می کنند تا از این ویژگی ها استفاده کنند. برای تیم های بزرگتر، اینها به طور بالقوه پیروزی های بزرگی برای بهره وری توسعه دهنده هستند.

پشتیبانی از زبان شلوار

هدف نهایی Pants ارائه یک تجربه ساخت یک مرحله ای برای همه زبان های برنامه نویسی شما است. این باعث می شود monorepo سیستم، که در آن شما فقط می توانید هر چیزی را به سمت ابزار پرتاب کنید و آن را درک کند.

از زمان نگارش این مقاله، Pants دارای پشتیبانی سطح اول برای موارد زیر است:

  • Python – از نسخه ۲.۰
  • Protobuf و gRPC – از نسخه ۲.۲
  • Shell – از نسخه ۲.۵
  • برو – از نسخه ۲.۸
  • جاوا – پشتیبانی آلفا در نسخه ۲.۹ آغاز می شود
  • Scala – پشتیبانی آلفا در نسخه ۲.۹ شروع می شود
  • جاوا اسکریپت – در نقشه راه

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