Първо, честит ден на програмиста! Всъщност се наслаждавам на ваканция далеч от каквато и да е цивилизация или по този въпрос от IDE.

Въпреки това взех лаптопа си със себе си и след няколко спокойни дни реших да продължа проект, който започнах, където имам отчаяна нужда от транспилер. Мислете за това по този начин, има приложение NextJS, което се захранва от SWC и комуникира с atrix уеб бекенд, който в крайна сметка обслужва статично генерирано следващо собствено приложение. Да, достатъчно главоболие за страничен проект.

Но тъй като имам нужда от някои ruby ​​корекции в кода и той трябва да бъде автоматизиран, си помислих тази сутрин, хей защо да не направя чист транспилер в rust, който ще вземе този javascript код и ще го експортира като ruby, трябва да е лесно. грешно! И така, с цял куп кафе започвам да се гмуркам в транспилерите и най-добрите практики. Тъй като все повече и повече хора говорят за Rust и тъй като бекендът по същество също е ръждясал, това беше очевидният избор. Неговата C-подобна семантика, съчетана с гарантирана безопасност на типа, му придават уникално и важно място в езиците за програмиране днес, страхотен език за компилатори и в тенденция. Пишейки този транспилатор, се надявам да променя начина, по който мислим за JavaScript и Ruby, и също така да сложа край на забравеното от бога монотонно четене за езици за програмиране ден след шибан ден.

Едно очевидно първоначално предизвикателство при решаването на този проблем е разрешаването на някои от основните несъвместимости на двата езика. Тъй като JavaScript е слабо типизиран и има склонност към недефинирано поведение, това повдига въпроса как трябва да се справим с поведението в JavaScript, което е противоположно на същите модели, които правят Ruby толкова нежелан език. Ако внедря безопасно подмножество на JavaScript, това ще ме освободи ли от проклятието ми да упражнявам големи количества енергия, спорейки за антимодели на React в интернет? Ако използвам опасните функции на Rust, за да позволя пълно изпълнение на ES6/ES2015, ще мога ли отново да водя разговори с нормални човешки същества? Ще мога ли да чувствам? Ако ме порежеш, ще кървя ли?

Всяка сутрин се събуждам, пия чаша пенливо вино и рецитирам следното: „Днес ще решавам трудни задачи. Утре ще решавам и трудни задачи. Всеки ден ще решавам предизвикателни проблеми, а след това роботите ще поемат и аз ще умра като пълноценен човек и някой ще признае статистиката ми в github.

„След това влизам в моята машина с помощта на персонализиран скрипт за стартиране.“

> $ Welcome, Admir. Would you like to not enjoy the benefits of a vacation and do some on/off coding sessions? y/n

y

> $ Very good. You may now enjoy root access to your system, you fool.

Rust предлага редица функции, които го правят отличен избор за писане на компилатор. Въпреки че компилаторът обикновено е написан или на изходния, или на целевия език, нито JavaScript, нито шибаният Ruby предлагат пълното богатство на рекурсивните алгебрични типове данни на Rust. Също така има смисъл да се използва чисто функционален език, за да се напише компилатор, тъй като компилаторът е в основата си поредица от трансформации, които могат и трябва да бъдат направени по елегантен начин без състояние.

В заключение, това е амбициозен проект, но аз съм благодарен за целия ентусиазъм, който получих от общностите на JavaScript, Rust и Ruby (е не наистина, тъй като е мъртъв хахахаха), както и общността на компилаторите.

Бъдете нащрек за скорошно стабилно издание.

Моля, спасете ме, умолявам ви.