پیکربندی TOML (.toml)

TOML استاندارد

زبان مینی‌مال آشکار تام (TOML) یک فرمت پیکربندی صریح و کاربرمحور است که توسط تام پرستون-ورنر، یکی از بنیان‌گذاران گیت‌هاب، ایجاد شده و در اکوسیستم‌های برنامه‌نویسی مدرن از جمله Rust (Cargo) و Python (pyproject.toml) به طور گسترده پذیرفته شده است.

تبدیل TOML به JSON

مبدل رایگان TOML به JSON درون مرورگر. فایل‌ها را فورا روی دستگاه خود تبدیل کنید.

بررسی و فراداده

سیستم‌عامل‌ها و تحلیلگرهای فایل، فایل‌های TOML را با بررسی توالی بایت‌های دودویی ابتدایی شناسایی می‌کنند:

انتخاب یا رها کردن فایل‌ها در اینجا

تبدیل ۱۰۰٪ خصوصی در مرورگر - فایل‌ها هرگز دستگاه شما را ترک نمی‌کنند

یا جای‌گذاری کنید Ctrl+V
تضمین حریم خصوصی بدون انتقال شبکه: صفر بایت به سرورهای خارجی آپلود می‌شود. تمام پردازش‌ها به صورت محلی در سندباکس مرورگر شما انجام شد.

امضای هدر در سطح بایت (Magic Bytes)

سیستم‌عامل‌ها و تحلیلگرهای فایل، فایل‌های TOML را با بررسی توالی بایت‌های دودویی ابتدایی شناسایی می‌کنند:

امضای HEX (آفست 0):

5B ... 5D

نمایش ASCII: [...]

استانداردسازی: TOML v1.0.0 Specification

مشخصات فنی

معماری کانتینرHuman-readable configuration file mapping unequivocally to a hash table, structured with [tables] and key = value pairs
فشرده‌سازیUncompressed text stream
ترتیب بایت‌ها (Endianness)UTF-8 text stream
فضاهای رنگیN/A (Configuration File)
کانال‌ها و ساختارTables, arrays of tables, inline tables, strings, integers, floats, booleans, and RFC 3339 datetimes
حداکثر ابعادUnbounded text length
شفافیت مشخصاتNone
استریمینگ و پیش‌روندهSequential line-by-line configuration parsing

ماتریس مقایسه فنی: TOML در برابر رقبا

ویژگی فنیTOML (فعلی)YAMLJSONINI
خطر ابهامصفر (مشخصات کاملاً صریح و بدون ابهام)بالا (خطاهای باگ بولی «مشکل نروژ» در YAML)صفر (انواع داده‌ی سخت‌گیرانه)متوسط (بدون استاندارد رسمی)
انواع تاریخ و زمان بومیپشتیبانی بومی از تاریخ و زمان RFC 3339تجزیه ضمنی رشته / تاریخهیچ‌کدام (فقط رشته)هیچ‌کدام (فقط رشته)
پشتیبانی از نظرات (Comments)بومی (نظرات با #)بومی (نظرات با #)نظرات مجاز نیستندبومی (نظرات با ; و #)
اکوسیستم اصلیRust (Cargo)، Python (PEP 518)، Goکوبرنتیز، انسیبل، خطوط لوله CI/CDرابط‌های برنامه‌نویسی وب، ارتباطات مرورگرویندوز قدیمی، پیکربندی Git

حالت‌های رایج خرابی و راهنمای بازیابی هگز

خطای تجزیه‌کننده: «کلید تکراری در جدول» یا «سربرگ جدول نامعتبر».

علت ریشه‌ای: تلاش برای باز تعریف یک کلید موجود یا فضای نام جدول در داخل سند.

بازیابی: اعتبارسنجی و فرمت مجدد نحو TOML با استفاده از ابزار فرمت‌کننده TOML در File2File.

تحلیل امنیتی و بردارهای حمله تجزیه‌کننده (Parser)

تجزیه‌کننده‌های TOML باید در برابر آلودگی پروتوتایپ (Prototype Pollution) و اتمام منابع پردازنده ناشی از تو در تویی غیرعادی آرایه‌های جدول محافظت شوند.

بردارهای حمله شناخته‌شده

  • آلودگی پروتوتایپ در تجزیه‌کننده‌های JavaScript TOML که ویژگی‌ها را به Object.prototype تزریق می‌کند.
  • حمله محرومیت از سرویس (DoS) از طریق اعلامیه‌های آرایه جدول بسیار تو در تو.
  • تخصیص حافظه بی‌رویه هنگام تجزیه آرایه‌های درون‌خطی عظیم.

بهترین روش‌های پدافندی:

تاریخچه و نقاط عطف

2021نسخه ۱.۰.۰ از TOML به طور رسمی منتشر شد و مشخصات اصلی نحو را تثبیت کرد.
2018پایتون فایل pyproject.toml (استاندارد PEP 518) را به عنوان استاندارد مدرن پیکربندی ساخت استانداردسازی کرد.
2013تام پرستون-ورنر TOML را منتشر کرد تا یک فرمت پیکربندی تمیز بدون پیچیدگی‌های YAML ارائه دهد.

مزایا و نقاط قوت کلیدی

  • کاملاً صریح و بدون ابهام: به طور تمیز و قابل پیش‌بینی روی یک جدول هش (Hash Table) با صفر نوع‌داده ناخواسته نگاشت می‌شود.
  • پشتیبانی بومی درجه یک از تاریخ و زمان (مهر زمانی RFC 3339، تاریخ‌ها و زمان‌ها) بدون نیاز به کاراکترهای گریز (Escaping).
  • پذیرفته شده به عنوان فرمت پیکربندی استاندارد رسمی برای ابزارهای زبان مدرن (Cargo.toml در Rust، pyproject.toml در پایتون).

محدودیت‌ها و معایب فنی

  • درخت‌های شیء تو در تو و چندسطحی عمیق ممکن است در مقایسه با YAML بسیار طولانی و پرجزئیات شوند.
  • نحو مربوط به آرایه‌های جدول ([[table.array]]) ممکن است برای افراد مبتدی غیرشهودی باشد.
  • در مقایسه با JSON برای تبادل داده‌های API ماشین به ماشین با سرعت بالا، حجم کمتری ندارد.

نکات فنی جالب

  • زبان TOML توسط تام پرستون-ورنر ایجاد شد که او نیز گیت‌هاب را هم‌بنیان‌گذاری کرده و Gravatar و SemVer (نسخه‌سازی معنایی) را پدید آورده است.
  • فایل Cargo.toml در هر پروژه زبان Rust تمام وابستگی‌های بسته و پرچم‌های کامپایلر را در فرمت TOML مشخص می‌کند.
  • برخلاف JSON، زبان TOML به طور بومی از نظرات (با استفاده از کاراکتر '#') و رشته‌های چندخطی پشتیبانی می‌کند.

سوالات فنی متداول

TOML برای چه منظوری استفاده می‌شود؟

فرمت TOML برای پیکربندی نرم‌افزار، به ویژه در Cargo.toml زبان Rust، pyproject.toml زبان Python، تنظیمات Go Hugo و ابزارهای کانتینر استفاده می‌شود.

چرا TOML برای پیکربندی بر YAML ترجیح داده می‌شود؟

فرمت TOML از باگ‌های پارسینگ بدنام YAML (مانند تبدیل شدن عبارت بدون نقل‌قول 'NO' به مقدار بولی false) جلوگیری می‌کند، در حالی که با داشتن نظرات (Comments) و جداول واضح، برای انسان نیز کاملاً دوستانه و خوانا باقی می‌ماند.

چگونه می‌توانم TOML را به JSON یا YAML تبدیل کنم؟

شما می‌توانید فایل‌های TOML را با استفاده از File2File.app مستقیماً در مرورگر وب خود، فوراً به JSON یا YAML تبدیل کنید.