O usłudze
PrzetłumaczoneJestem programistą Racket i Scheme i pracuję w tej części świata Lispa, do której zwykli inżynierowie backendowi prawie nigdy nie zaglądają: tworzę języki, a nie tylko używam gotowych. Kiedy zadanie uporczywie przewraca twój kod ogólnego przeznaczenia na lewą stronę, szczera odpowiedź często brzmi — potrzebujesz małego języka specyficznego dla danej dziedziny do samego zadania. To jest to, co projektuję i wdrażam. Piszę starannie, dobrze zorganizowane programy funkcyjne, higieniczne makra, niestandardowe czytniki i ewaluatory, a także narzędzia, które przekształcają surowy pomysł w działający interpreter, o którym można myśleć.
Moja praca zazwyczaj dzieli się na trzy formy. Pierwsza to DSL i systemy makr: wykorzystuję możliwości językowe Racket, aby dać twojemu zespołowi notację dla konkretnego zadania, z kontrolą składni, jasnymi komunikatami o błędach i czytnikiem, który wydaje się natywny, a nie przyklejony. Druga to interpretery i małe kompilatory: analizatory, ewaluatory, przechodniki drzew i backendy bajtowe dla formatów konfiguracyjnych, silników reguł, warstw skryptowych i eksperymentalnych języków. Trzecia to narzędzia edukacyjne i badawcze: zależy mi na programach, które same się wyjaśniają, więc tworzę wizualizatory, debugery krok po kroku, kontrolery ćwiczeń i materiały interaktywne dla tych, którzy uczą się programowania funkcyjnego i rachunku lambda, który go podtrzymuje.
Ponieważ dorastałem w rodzinie Lispa, a nie w mainstreamowej pracy backendowej lub Clojure, poprawność i minimalny rdzeń są dla mnie szczególnie ważne. Polegam na kontraktach, testach opartych na właściwościach i małych funkcjach kompozycyjnych, dokumentuję gramatykę i inwarianty, aby następna osoba nie musiała rozkładać twojego analizatora na części. Jeśli masz półdziałający prototyp, stos makr, których nikt nie odważy się dotknąć, lub świeży pomysł na mały język — przekształcę go od szkicu do niezawodnego wyniku.
— Języki dziedzinowe i higieniczne makra w Racket
— Interpretery, ewaluatory i małe kompilatory w Scheme
— Analizatory, niestandardowe czytniki i silniki reguł
— Narzędzia edukacyjne: debugery krok po kroku, wizualizatory, sprawdzanie ćwiczeń
— Refaktoryzacja funkcyjna, kontrakty i testy oparte na właściwościach
— Migracja i modernizacja starego kodu Scheme i Lisp
Moja praca zazwyczaj dzieli się na trzy formy. Pierwsza to DSL i systemy makr: wykorzystuję możliwości językowe Racket, aby dać twojemu zespołowi notację dla konkretnego zadania, z kontrolą składni, jasnymi komunikatami o błędach i czytnikiem, który wydaje się natywny, a nie przyklejony. Druga to interpretery i małe kompilatory: analizatory, ewaluatory, przechodniki drzew i backendy bajtowe dla formatów konfiguracyjnych, silników reguł, warstw skryptowych i eksperymentalnych języków. Trzecia to narzędzia edukacyjne i badawcze: zależy mi na programach, które same się wyjaśniają, więc tworzę wizualizatory, debugery krok po kroku, kontrolery ćwiczeń i materiały interaktywne dla tych, którzy uczą się programowania funkcyjnego i rachunku lambda, który go podtrzymuje.
Ponieważ dorastałem w rodzinie Lispa, a nie w mainstreamowej pracy backendowej lub Clojure, poprawność i minimalny rdzeń są dla mnie szczególnie ważne. Polegam na kontraktach, testach opartych na właściwościach i małych funkcjach kompozycyjnych, dokumentuję gramatykę i inwarianty, aby następna osoba nie musiała rozkładać twojego analizatora na części. Jeśli masz półdziałający prototyp, stos makr, których nikt nie odważy się dotknąć, lub świeży pomysł na mały język — przekształcę go od szkicu do niezawodnego wyniku.
— Języki dziedzinowe i higieniczne makra w Racket
— Interpretery, ewaluatory i małe kompilatory w Scheme
— Analizatory, niestandardowe czytniki i silniki reguł
— Narzędzia edukacyjne: debugery krok po kroku, wizualizatory, sprawdzanie ćwiczeń
— Refaktoryzacja funkcyjna, kontrakty i testy oparte na właściwościach
— Migracja i modernizacja starego kodu Scheme i Lisp