Hacker News

Lil' Fun Langs' Guts

Коментари

1 min read Via taylor.town

Mewayz Team

Editorial Team

Hacker News

Зошто ѕиркањето под капата на малите програмски јазици ве прави подобар градител

Секое парче софтвер што го користите - од CRM што ги следи вашите води до моторот за автоматизација што испраќа фактури на полноќ - е направен со програмски јазик. Но, дали некогаш сте се запрашале што прави програмскиот јазик штиклира? Не масивните екосистеми како Python или JavaScript, туку малите, скршени, прекрасно чудни што програмерите ги градат за еден викенд за да решат еден проблем или само да научат. Овие „лил забавни јазици“ - јазици за играчки, јазици специфични за домен (DSL) и образовни преведувачи - се местата каде живеат некои од најелегантните идеи во компјутерската наука. Разбирањето на нивните храброст не ве прави само подобар програмер; фундаментално го менува начинот на кој размислувате за градење алатки, автоматизирање на работните текови и дизајнирање системи кои всушност работат за луѓето.

Што точно се „Lil' Fun Langs“?

Програмскиот свет е полн со јазици кои никогаш не биле наменети да ги напојуваат серверите за производство или да обработуваат милиони трансакции. Јазици како Lox (од Crafting Interpreters на Роберт Нистром), Monkey (од Торстен Бол Writing an Interpreter in Go), па дури и јазиците на шега како Brainfuck и Chef постојат за да учат, да се забавуваат и да ги поместат границите на тоа што значи „јазик“. Овие мали јазици ја отстрануваат сложеноста на синџирите со алатки од реалниот свет и ја откриваат необработената механика за тоа како кодот станува акција.

Но, „lil' fun langs“ не се ограничени на едукативни вежби. Јазиците специфични за доменот ги напојуваат некои од најефикасните деловни алатки на пазарот. Секогаш кога пишувате формула во табеларна пресметка, дефинирате правило за филтрирање во клиентот за е-пошта или конфигурирате работен тек на автоматизација на платформа како Mewayz, вие комуницирате со мал, наменски изграден јазик. 207-те модули во Mewayz - кои опфаќаат CRM, фактурирање, човечки ресурси, управување со флота и многу повеќе - се потпираат на мотори со внатрешни правила и парсери за изразување кои се, во основата, мали јазици дизајнирани да им дадат моќ на корисниците без да бараат диплома за компјутерски науки.

Разбирањето на анатомијата на овие јазици открива зошто некои алатки се чувствуваат интуитивно, додека други се чувствуваат како да се борат со прирачник напишан во друга димензија.

The Lexer: Breaking Words Into Atom

Секој јазик, без разлика колку е мал, започнува со истиот фундаментален чекор: лексичка анализа или „лексирање“. Лексерот зема необработена низа знаци - нешто како total = цена * количина + данок — и ја дели на значајни парчиња наречени токени. Лексерот сè уште не се грижи за значењето. Само идентификува дека total е идентификатор, = е оператор за доделување, price е друг идентификатор, * е множење, и така натаму.

Да се изгради лексир за мал јазик е изненадувачки задоволувачко. Во помалку од 100 линии код, можете да научите програма да препознава броеви, низи, клучни зборови и оператори. Едноставноста е поентата - ве принудува да размислите за тоа што му е потребно на апсолутниот минимален сет на „зборови“ на вашиот јазик. Истото размислување важи и при дизајнирање алатки со кои се соочува корисникот. Кога моторот за автоматизација на Mewayz му дозволува на сопственикот на мал бизнис да постави правило како „кога фактурата доцни за 7 дена, испратете е-пошта за потсетување“, системот тивко го препишува тоа правило во структурирани токени на кои може да дејствува. Најдобрите интерфејси се чувствуваат без напор токму затоа што некој длабоко размислувал за тоа како изгледаат најмалите значајни единици на корисничка намера.

Парсирање: Претворање на рамни жетони во живи дрвја

Откако имате токени, потребна ви е структура. Парсирањето трансформира рамна низа од токени во Апстрактно синтаксно стебло (AST) - хиерархиска претстава што ги доловува односите помеѓу различни делови од изразот. Изразот 3 + 4 * 5 не е само низа од пет токени; тоа е дрво каде што множењето се врзува поцврсто од собирањето, создавајќи 23 наместо 35.

Овде работите стануваат вистински забавни. Алгоритмите за парсирање како рекурзивното потекло или парсирањето Прат се елегантни делови од инженерството што се вклопуваат во една датотека, но можат да се справат со изненадувачки сложени граматики. Посебно, рекурзивните парсери за потекло читаат речиси како спецификација на самиот јазик - секоја функција одговара на граматичко правило, што го прави кодот самодокументиран на начин што е редок во развојот на софтверот.

Лекциите од парсирањето се многу подалеку од јазичниот дизајн. Секој систем што обработува структуриран влез - формулар за резервација со временски опсег, конфигурација на платен список со условни правила, цевковод CRM со логика на разгранување - решава проблем со парсирање. 138.000+ корисници на платформата на Mewayz генерираат сложени, структурирани податоци секој ден. Разбирањето како парсерите го претвораат двосмислениот влез во недвосмислена структура е разликата помеѓу изградбата на систем кој грациозно се справува со рабовите и оној што го прекинува моментот кога некој внесува датум во неочекуван формат.

Толковникот: Каде кодот оживува

Преведувачот е местото каде што се случува магијата. Го движи AST, јазол по јазол и го извршува. Бројниот јазол ја враќа својата вредност. Бинарниот оперативен јазол ги проценува своите леви и десни деца и ги комбинира. Повикувањето на функцијата ја бара функцијата во околина, ги врзува аргументите и го оценува телото. Во јазикот на играчките, целиот преведувач може да биде од 200-300 линии - доволно мал за да се држи во вашата глава, но сепак доволно моќен за да се извршуваат вистински програми.

Постојат два широки пристапи за извршување: преведувачи на дрво и виртуелни машини со бајтекод. Шетачите на дрвја се поедноставни, но побавни; тие директно го минуваат AST. Bytecode VMs го компајлираат AST во низа од едноставни инструкции (како мал асемблерски јазик) и наместо тоа ги извршуваат, тргувајќи ја сложеноста на имплементацијата за драматично подобри перформанси. CPython, стандардната имплементација на Python, користи бајтекод VM. Lua, еден од најефикасните јазици за вградување, беше пионер на дизајнот на VM базиран на регистри кој влијаеше на моторите на игри ширум светот.

Клучен увид: Најмоќните деловни алатки не се оние со најмногу функции - тие се оние со најдобриот внатрешен „јазик“ за изразување на она што навистина им треба на корисниците. Секој мотор на правила, формули систем и градител на автоматизација е мал преведувач прикриен. Квалитетот на тој преведувач одредува дали алатката се зголемува од 10 корисници до 100.000.

💡 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, кој опфаќа сè, од страници за поврзување во био до целосна обработка на платен список, користи слоевити конфигурации што го отсликуваат токму овој принцип. Сопственикот на бизнис поставува стандардни поставки за целата организација, менаџерите на одделот можат да отфрлат одредени поставки, а индивидуалните корисници можат да го приспособат својот работен простор - сето тоа без конфликти.

Грешка на опсегот во програмскиот јазик предизвикува грешки. Грешката на опсегот во деловната платформа предизвикува протекување на податоци, ескалација на дозволите и вид на оперативен хаос што чини вистински пари. Лекциите се исти на секое ниво на апстракција.

Што всушност ве учи градењето мал јазик

Ако никогаш не сте изградиле мал програмски јазик, еве што конкретно учи искуството - и зошто е важно дали сте развивач, технички основач или некој што само сака да ги разбере алатките што ги користат секој ден:

  • Прецизност на мислата: Не можете да бидете нејасни кога дефинирате граматика. Секоја двосмисленост во спецификацијата на јазикот станува грешка во вашиот парсер. Оваа дисциплина директно се пренесува на пишување подобри спецификации, појасна документација и попрецизни барања за карактеристики.
  • Емпатија за корисниците: Кога дизајнирате јазик, вие дизајнирате интерфејс за човечката мисла. Учиш да прашуваш: "Што корисникот значи со ова?" — прашање кое треба да ја поттикне секоја одлука за производ.
  • Интуиција за изведба: Дознавате зошто некои операции се брзи, а други се бавни, не од читање мерила, туку од гледање точно колку чекори прави преведувачот. Ова ве прави подобри во дизајнирањето на системи со размер.
  • Местерство за отстранување грешки: Кога вашиот јазик произведува погрешен излез, немате каде да се скриете. Нема рамка за обвинување, нема конфликт со верзијата на библиотеката. Тоа е вашата логика, вашите структури на податоци, вашиот алгоритам. Ова го гради видот на вештина за длабоко дебагирање што ги одвојува добрите инженери од големите.
  • Почитување на апстракцијата: Вие разбирате зошто јазиците на повисоко ниво го направија изборот што го направија - зошто JavaScript има затворања, зошто Python избра значителен празен простор, зошто постои проверката на заеми на Rust. Ова не се произволни одлуки; тие се решенија за вистински проблеми со кои ќе се сретнете при вашата сопствена имплементација.

Од јазици на играчките до автоматизација во реалниот свет

Јазот помеѓу јазикот на играчките и моторот за автоматизација на производството е помал отколку што мислат повеќето луѓе. Течниот јазик за шаблони на Shopify започна како едноставен, безбеден систем за шаблони и сега напојува милиони излози. Синтаксата на работниот тек на GitHub Actions е јазик специфичен за домен изграден на YAML. Сигма јазикот за пребарување на Stripe им дозволува на финансиските тимови да ги испрашуваат податоците за плаќање без да пишуваат SQL. Секој од нив започна со некој прашува: „Кој е најмалиот, наједноставниот јазик што го решава овој конкретен проблем?“

Ова е истата филозофија зад платформите кои имаат за цел да ги консолидираат деловните операции во единствен екосистем. Кога Мевејз му служи на хонорарец кому му треба страница за врска во био и компанија со средна големина која работи на платен список за 50 вработени низ нејзините 207 модули, основниот предизвик е истиот со кој се соочува секој дизајнер на јазици: како да креирате систем што е доволно едноставен за почетници, а сепак доволно моќен за сложени случаи на употреба? Одговорот, како што ќе ви каже секој имплементатор на јазици, лежи во правилното поставување на примитивите - мали, составливи градежни блокови кои корисниците можат да ги комбинираат на начини на кои дизајнерот никогаш не очекувал.

Следниот пат кога ќе конфигурирате правило за автоматизација, ќе изградите приспособена контролна табла или ќе поставите условен работен тек во која било деловна алатка, запомнете: пишувате програма на многу забавен јазик. Некој го дизајнирал умот на тој јазик - неговиот лексер, парсер и преведувач - за да ја направи вашата намера извршна. А квалитетот на нивната работа е невидливата сила која одредува дали вашето искуство се чувствува како магија или беда. Разбирањето на тие храброст, дури и на ниво на површина, ви дава супермоќ: способност да ја видите машината под интерфејсот, да предвидите каде ќе се скрши и да ја турнете подалеку отколку што нејзините дизајнери некогаш замислувале.

Изградете го вашиот бизнис оперативен систем денес

Од хонорарци до агенции, Mewayz напојува над 138.000 бизниси со 207 интегрирани модули. Започнете бесплатно, надградете го кога ќе пораснете.

Креирај

Често поставувани прашања

Што се „lil' fun langs“ и зошто треба да се грижам?

Lil' fun langs се мали, експериментални програмски јазици создадени да истражуваат конкретни идеи или да ги учат основните концепти. Тие се движат од преведувачи на играчки напишани во викенд до јазици специфични за домен (DSL) дизајнирани за тесни задачи. Разбирањето како тие функционираат ви дава подлабок увид во тоа како функционира целиот софтвер - вклучувајќи ги и деловните алатки на кои се потпирате секојдневно. Тоа знаење ве прави поостар развивач и поинформиран носител на одлуки при изборот или изградбата на системи за автоматизација.

Како учењето за јазичните внатрешни работи помага во деловната автоматизација?

Кога ги разбирате концептите како парсирање, евалуација и толкувачи, почнувате да ја гледате автоматизацијата поинаку. Ги препознавате шемите во создавачите на работниот тек, моторите на шаблони и системите за правила. Платформите како Mewayz ги користат истите овие принципи низ нивните 207 модули за да ви овозможат да го автоматизирате фактурирањето, работните текови на CRM и повеќе - сето тоа без пишување код. Познавањето на основите ви помага понатаму да ги туркате овие алатки и побрзо да ги решавате проблемите.

Дали ми треба диплома за компјутерски науки за да изградам мал јазик?

Воопшто не. Многу програмери го градат својот прв преведувач во еден викенд користејќи упатства и водичи со отворен код. Јазиците како Python и JavaScript го прават едноставно да се напише основен лексир, парсер и оценувач. Целта не е да се создаде следниот јазик за производство - тоа е да се учи преку правење. Дури и едноставен јазик на калкулаторот ве учи како изразите се анализираат и извршуваат, вештини кои директно се пренесуваат во развојот на реалниот свет.

Дали разбирањето на DSL може да ми помогне да изберам подобри деловни алатки?

Апсолутно. Многу деловни платформи вградуваат јазици специфични за домен за формули, филтри и правила за работниот тек. Кога ќе разберете како функционираат DSL уредите под капакот, можете покритички да ги оцените алатките. На пример, Mewayz нуди сеопфатен деловен оперативен систем со почеток од 19 долари/месечно со вградена логика за автоматизација низ неговите модули. Познавањето на концептите на DSL ви помага целосно да ги искористите тие функции наместо да ја чешате површината.