«زبان دامنهاختصاصی» (DSL) زبانی کوچک است که برای یک دامنهی مشخص بهینه شده است. از آنجا که DSL هدفمند است، با این امکان را به نویسنده میدهد که بهجای چگونه، بگوید چه میخواهد؛ همین میتواند بهرهوری و درک را بهشدت افزایش دهد.
یکی از حوزههایی که این زبانها در آن به کار میروند، سفارشیسازیها و پیکربندیهای پیچیده است.
برای مثال، زبان DOT به شما اجازه میدهد توصیف متنی یک گراف را بنویسید که سپس یکی از ابزارهای Graphviz (مانند dot) آن را به تصویر تبدیل میکند.
یک گراف ساده اینگونه است:
graph {
graph [bgcolor="yellow"]
a [color="red"]
b [color="blue"]
a -- b [color="green"]
}
اگر این را در فایلی به اسم example.dot قرار دهید و dot example.dot -T png -o example.png را اجرا کنید، تصویری به اسم example.png ساخته میشود که در آن دایرهای قرمز و دایرهای آبی روی پسزمینهای زرد با خطی سبز به هم وصل شدهاند.
یک زبان دامنهاختصاصی مشابه زبان dot در Graphviz بنویسید.
DSL ما از این نظر مشابه زبان dot در Graphviz است که برای ساختن ساختارهای دادهی گراف به کار میرود. اما برخلاف زبان DOT، DSL ما یک DSL درونی است که فقط در زبان خودمان به کار میرود.
دربارهی تفاوت DSLهای درونی و بیرونی بیشتر بدانید.
در این تمرین انتظار میرود چند struct را با استفاده از builder pattern بسازید.
بهطور خلاصه، این الگو به شما امکان میدهد تابع ساخت struct خود را، که آرگومانهای زیادی دارد، به چند تابع جداگانه تقسیم کنید. این رویکرد به شما امکان میدهد ساخت و پیکربندی struct را فشرده اما بسیار انعطافپذیر انجام دهید.
میتوانید دربارهی آن بیشتر در صفحهی زیر بخوانید.