Lil' Fun Langs' Guts | Mewayz Blog Skip to main content
Hacker News

Lil' Fun Langs' Guts

نظرات

1 min read Via taylor.town

Mewayz Team

Editorial Team

Hacker News

چرا نگاه کردن زیر کلاه زبان های برنامه نویسی کوچک شما را سازنده بهتری می کند

هر نرم افزاری که استفاده می کنید - از CRM که سرنخ های شما را ردیابی می کند تا موتور اتوماسیونی که فاکتورها را در نیمه شب ارسال می کند - با یک زبان برنامه نویسی ساخته شده است. اما آیا تا به حال به این فکر کرده اید که چه چیزی باعث تیک شدن یک زبان برنامه نویسی می شود؟ نه اکوسیستم‌های عظیم مانند پایتون یا جاوا اسکریپت، بلکه اکوسیستم‌های کوچک، ناقص و بسیار عجیبی که توسعه‌دهندگان در یک آخر هفته برای حل یک مشکل یا فقط برای یادگیری می‌سازند. این زبان‌های سرگرم‌کننده - زبان‌های اسباب‌بازی، زبان‌های دامنه خاص (DSL) و مترجم‌های آموزشی- جایی هستند که برخی از ظریف‌ترین ایده‌ها در علوم کامپیوتر زندگی می‌کنند. درک جرات آنها فقط شما را به یک برنامه نویس بهتر تبدیل نمی کند. این اساساً طرز فکر شما را در مورد ساخت ابزار، خودکارسازی گردش کار و طراحی سیستم‌هایی که واقعاً برای مردم کار می‌کنند، تغییر می‌دهد.

"Lil' Fun Langs" دقیقاً چیست؟

دنیای برنامه نویسی پر از زبان هایی است که هرگز برای سرورهای تولیدی یا پردازش میلیون ها تراکنش طراحی نشده اند. زبان‌هایی مانند Lox (از مترجمان کاردستی رابرت نیستروم)، میمون (از Writing an Interpreter in Go تورستن بال)، یا حتی زبان‌های شوخی مانند Brainfuck و Chef برای آموزش، سرگرمی و فراتر رفتن از مرزهای معنای "زبان" وجود دارند. این زبان‌های کوچک پیچیدگی زنجیره‌های ابزار دنیای واقعی را از بین می‌برند و مکانیک خام چگونگی تبدیل کد به عمل را نشان می‌دهند.

اما "لنگ های سرگرم کننده lil" به تمرینات آموزشی محدود نمی شود. زبان‌های دامنه خاص برخی از مؤثرترین ابزارهای تجاری موجود در بازار را تقویت می‌کنند. هر بار که فرمولی را در صفحه گسترده می نویسید، یک قانون فیلتر را در سرویس گیرنده ایمیل خود تعریف می کنید، یا یک گردش کار اتوماسیون را در پلتفرمی مانند Mewayz پیکربندی می کنید، با یک زبان کوچک و هدفمند در تعامل هستید. 207 ماژول داخل Mewayz - شامل CRM، صورتحساب، منابع انسانی، مدیریت ناوگان و موارد دیگر - متکی به موتورهای قوانین داخلی و تجزیه‌کننده‌های بیان هستند که در هسته‌شان، زبان‌های کوچکی هستند که بدون نیاز به مدرک علوم کامپیوتر به کاربران قدرت می‌دهند.

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

Lexer: Breaking Words Into Atoms

هر زبانی، هر چقدر هم که کوچک باشد، با یک مرحله اساسی شروع می‌شود: تحلیل واژگانی یا «لکسینگ». یک lexer یک رشته خام از کاراکترها را می گیرد - چیزی شبیه total = قیمت * مقدار + مالیات - و آن را به تکه های معنی دار به نام نشانه ها تقسیم می کند. lexer هنوز به معنی اهمیت نمی دهد. فقط مشخص می کند که total یک شناسه است، = یک عملگر انتساب است، price یک شناسه دیگر، * ضرب است، و غیره.

ساختن یک لکسر برای یک زبان کوچک به طرز شگفت انگیزی رضایت بخش است. در کمتر از 100 خط کد، می توانید برنامه ای را برای تشخیص اعداد، رشته ها، کلمات کلیدی و عملگرها آموزش دهید. نکته اصلی سادگی است - شما را مجبور می کند به حداقل مجموعه "کلمات" زبان شما فکر کنید. این تفکر در هنگام طراحی ابزارهای رو به رو کاربر نیز صدق می کند. هنگامی که موتور اتوماسیون Mewayz به صاحب یک کسب و کار کوچک اجازه می‌دهد تا قانونی مانند «وقتی صورت‌حساب 7 روز عقب افتاده است، ایمیل یادآوری ارسال کنید» تنظیم کند، سیستم به آرامی این قانون را در توکن‌های ساختاریافته‌ای که می‌تواند بر اساس آن عمل کند، تنظیم می‌کند. بهترین رابط‌ها دقیقاً به این دلیل که کسی عمیقاً در مورد اینکه کوچک‌ترین واحدهای معنی‌دار قصد کاربر چگونه به نظر می‌رسند فکر کرده است.

تجزیه: تبدیل نمادهای مسطح به درختان زنده

هنگامی که توکن دارید، به ساختار نیاز دارید. تجزیه یک دنباله مسطح از نشانه ها را به یک درخت نحو انتزاعی (AST) تبدیل می کند - یک نمایش سلسله مراتبی که روابط بین بخش های مختلف یک عبارت را نشان می دهد. عبارت 3 + 4 * 5 فقط دنباله ای از پنج نشانه نیست. این درختی است که در آن ضرب محکم‌تر از جمع پیوند می‌گیرد و به جای 35 عدد 23 تولید می‌کند.

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

دروس تجزیه بسیار فراتر از طراحی زبان است. هر سیستمی که ورودی ساختاریافته را پردازش می کند - فرم رزرو با محدوده تاریخ، پیکربندی حقوق و دستمزد با قوانین شرطی، خط لوله CRM با منطق انشعاب - مشکل تجزیه را حل می کند. بیش از 138000 کاربر در پلتفرم Mewayz هر روز داده های پیچیده و ساختار یافته تولید می کنند. درک اینکه چگونه تجزیه‌کننده‌ها ورودی مبهم را به ساختاری بدون ابهام تبدیل می‌کنند، تفاوت بین ساختن سیستمی است که موارد لبه را به‌خوبی مدیریت می‌کند و سیستمی که لحظه‌ای که شخصی تاریخ را در قالبی غیرمنتظره وارد می‌کند، شکسته می‌شود.

مفسر: جایی که کد زنده می‌شود

مفسر جایی است که جادو اتفاق می افتد. AST را، گره به گره راه می‌دهد و اجرا می‌کند. یک گره عددی مقدار خود را برمی گرداند. یک گره عملیات باینری فرزندان چپ و راست خود را ارزیابی کرده و آنها را ترکیب می کند. فراخوانی تابع تابع را در یک محیط جستجو می کند، آرگومان ها را پیوند می دهد و بدنه را ارزیابی می کند. در یک زبان اسباب‌بازی، کل مترجم ممکن است 200 تا 300 خط باشد - به اندازه‌ای کوچک که بتوان آن را در سر نگه داشت، اما به اندازه‌ای قدرتمند برای اجرای برنامه‌های واقعی.

دو رویکرد گسترده برای اجرا وجود دارد: مفسرهای راه رفتن درختی و ماشین‌های مجازی بایت کد. درخت‌بازان ساده‌تر اما کندتر هستند. آنها مستقیماً از AST عبور می کنند. ماشین‌های مجازی بایت کد AST را به دنباله‌ای از دستورالعمل‌های ساده (مانند یک زبان اسمبلی کوچک) کامپایل می‌کنند و در عوض آن‌ها را اجرا می‌کنند و پیچیدگی پیاده‌سازی را برای عملکرد بسیار بهتر معامله می‌کنند. CPython، پیاده سازی استاندارد پایتون، از VM بایت کد استفاده می کند. Lua، یکی از کارآمدترین زبان‌های قابل جاسازی، پیشگام طراحی VM مبتنی بر ثبت است که بر موتورهای بازی در سراسر جهان تأثیر گذاشت.

بینش کلیدی: قدرتمندترین ابزارهای کسب و کار آنهایی نیستند که بیشترین ویژگی ها را داشته باشند - آنها بهترین "زبان" داخلی را برای بیان آنچه کاربران واقعاً نیاز دارند دارند. هر موتور قانون، سیستم فرمول، و سازنده اتوماسیون یک مفسر کوچک در ظاهر است. کیفیت آن مفسر تعیین می کند که مقیاس ابزار از 10 کاربر به 100000 باشد.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

محیط ها و محدوده: معماری پنهان دولت

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

این الگو در همه جا در نرم افزارهایی که به خوبی طراحی شده اند نشان داده می شود. مجوزهای کاربر در یک پلتفرم کسب‌وکار به همین ترتیب کار می‌کنند - دسترسی اعضای تیم ابتدا با بررسی مجوزهای فردی، سپس مجوزهای نقش آنها، سپس پیش‌فرض‌های سازمان تعیین می‌شود. سیستم ماژول Mewayz که همه چیز را از صفحات پیوند در بیو گرفته تا پردازش کامل حقوق و دستمزد را در بر می گیرد، از پیکربندی لایه ای استفاده می کند که دقیقاً این اصل را منعکس می کند. یک مالک کسب و کار پیش‌فرض‌های کل سازمان را تنظیم می‌کند، مدیران بخش می‌توانند تنظیمات خاصی را لغو کنند، و کاربران فردی می‌توانند فضای کاری خود را سفارشی کنند — همه بدون تداخل.

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

در واقع ساختن یک زبان کوچک به شما چه می آموزد

اگر هرگز یک زبان برنامه نویسی کوچک ساخته اید، در اینجا چیزی است که این تجربه به طور مشخص به شما می آموزد — و چرا مهم است که آیا شما یک توسعه دهنده هستید، یک بنیانگذار فنی، یا کسی که فقط می خواهد ابزارهایی را که هر روز استفاده می کند درک کند:

  • دقت فکر: هنگام تعریف دستور زبان نمی توانید مبهم باشید. هر ابهامی در مشخصات زبان شما به یک اشکال در تجزیه کننده شما تبدیل می شود. این رشته مستقیماً به نوشتن مشخصات بهتر، اسناد واضح‌تر و الزامات ویژگی دقیق‌تر منتقل می‌شود.
  • همدلی برای کاربران: وقتی زبانی را طراحی می‌کنید، در حال طراحی رابطی برای افکار انسان هستید. یاد می گیرید که بپرسید: "کاربر منظور آن چیست؟" - سوالی که باید هر تصمیم محصول را هدایت کند.
  • شهود عملکرد: شما متوجه می‌شوید که چرا برخی از عملیات‌ها سریع و برخی دیگر کند هستند، نه از خواندن معیارها، بلکه با دیدن دقیق چند مرحله مترجم. این شما را در طراحی سیستم هایی با مقیاس بهتر می کند.
  • تسلط بر اشکال زدایی: وقتی زبان شما خروجی اشتباه تولید می کند، جایی برای پنهان شدن ندارید. هیچ چارچوبی برای سرزنش وجود ندارد، هیچ تضاد نسخه کتابخانه ای وجود ندارد. این منطق شما، ساختار داده ها، الگوریتم شما است. این نوعی مهارت اشکال زدایی عمیق را ایجاد می کند که مهندسان خوب را از مهندسان بزرگ جدا می کند.
  • قدردانی از انتزاع: می‌دانید که چرا زبان‌های سطح بالاتر انتخاب‌هایی را انجام دادند - چرا جاوا اسکریپت بسته می‌شود، چرا پایتون فضای خالی قابل توجهی را انتخاب کرد، چرا جستجوگر قرض Rust وجود دارد. اینها تصمیمات خودسرانه نیستند. آنها راه حل هایی برای مشکلات واقعی هستند که در اجرای خود با آن مواجه خواهید شد.

از زبان های اسباب بازی تا اتوماسیون دنیای واقعی

فاصله بین زبان اسباب بازی و موتور اتوماسیون تولید کمتر از آن چیزی است که بیشتر مردم فکر می کنند. زبان قالب Liquid Shopify به عنوان یک سیستم قالب ساده و ایمن شروع به کار کرد و اکنون میلیون ها ویترین فروشگاه را تامین می کند. سینتکس گردش کار GitHub Actions یک زبان دامنه خاص است که بر روی YAML ساخته شده است. زبان پرس و جوی Sigma Stripe به تیم های مالی اجازه می دهد تا داده های پرداخت را بدون نوشتن SQL بازجویی کنند. هر کدام از اینها با پرسیدن شخصی شروع شد: "کوچکترین و ساده ترین زبانی که این مشکل خاص را حل می کند چیست؟"

این همان فلسفه پشت پلتفرم هایی است که هدفشان تجمیع عملیات تجاری در یک اکوسیستم واحد است. وقتی Mewayz به یک فریلنسر خدمت می‌کند که نیاز به یک صفحه پیوند در بیو و یک شرکت متوسط ​​دارد که حقوق و دستمزد 50 کارمند را در 207 ماژول خود دارد، چالش اساسی همان چالشی است که هر طراح زبان با آن مواجه است: چگونه می‌توانید سیستمی ایجاد کنید که برای مبتدیان به اندازه کافی ساده باشد و در عین حال به اندازه کافی قدرتمند برای موارد استفاده پیچیده باشد؟ پاسخ، همانطور که هر پیاده‌کننده زبانی به شما خواهد گفت، در درست کردن اصول اولیه نهفته است - بلوک‌های ساختمانی کوچک و قابل ترکیب که کاربران می‌توانند آن‌ها را به روش‌هایی که طراح هرگز پیش‌بینی نمی‌کرد ترکیب کنند.

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

امروز سیستم عامل کسب و کار خود را بسازید

از فریلنسرها گرفته تا آژانس‌ها، Mewayz بیش از 138000 کسب‌وکار را با 207 ماژول یکپارچه قدرت می‌دهد. رایگان شروع کنید، وقتی رشد کردید ارتقا دهید.

رایگان ایجاد کنید

سوالات متداول

"لنگ های سرگرم کننده lil" چیست و چرا باید اهمیت بدهم؟

زبان‌های سرگرم کننده Lil' زبان‌های برنامه‌نویسی کوچک و تجربی هستند که برای کشف ایده‌های خاص یا آموزش مفاهیم اصلی ساخته شده‌اند. آنها از مترجم های اسباب بازی نوشته شده در آخر هفته گرفته تا زبان های دامنه خاص (DSL) که برای کارهای محدود طراحی شده اند را شامل می شوند. درک نحوه عملکرد آنها به شما بینش عمیق تری در مورد نحوه عملکرد همه نرم افزارها می دهد - از جمله ابزارهای تجاری که روزانه به آنها تکیه می کنید. این دانش شما را در هنگام انتخاب یا ساختن سیستم‌های اتوماسیون توسعه‌دهنده دقیق‌تر و تصمیم‌گیرنده‌ای آگاه‌تر می‌سازد.

چگونه یادگیری در مورد داخلی زبان به اتوماسیون کسب و کار کمک می کند؟

وقتی مفاهیمی مانند تجزیه، ارزیابی و مفسرها را درک می‌کنید، اتوماسیون را متفاوت می‌بینید. شما الگوها را در سازندگان گردش کار، موتورهای قالب و سیستم های قانون تشخیص می دهید. پلتفرم‌هایی مانند Mewayz از این اصول در ماژول‌های 207 خود استفاده می‌کنند تا به شما امکان می‌دهند صورت‌حساب، گردش‌های کاری CRM و موارد دیگر را خودکار کنید - همه بدون نوشتن کد. دانستن اصول اولیه به شما کمک می کند این ابزارها را بیشتر پیش ببرید و سریعتر مشکلات را عیب یابی کنید.

آیا برای ساختن یک زبان کوچک به مدرک علوم کامپیوتر نیاز دارم؟

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

آیا درک DSL ها می تواند به من در انتخاب ابزارهای تجاری بهتر کمک کند؟

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