Olympus (2024): De machtsdynamiek van code corrigeren
Wanneer we code schrijven, bevelen we de machine alsof we de controle hebben. Dit weerspiegelt echter niet onze werkelijke relatie met computers, die niet doen wat we willen — zeker niet wanneer ze de code volgen die wij hebben geschreven.
INTERCAL (1972) humaniseerde als eerste de interpreter door ons te vragen deze gunstig te stemmen met het PLEASE-commando. Als een taal één persoonlijkheid kan hebben, kan ze er ook zeven hebben, elk met een eigen kenmerkende stem en behoeften. In Olympus richten we ons tot de goden in de hoop dat zij onze smeekbeden gunstig stemmen.
Een voorbeeld van een regel code
Heer Zeus, meester van de stormen, vader van de goden, verdediger van steden, verdediger van huizen, verdediger van de reizigers en van hen die ver van huis zijn, ik smeek u om een functie genaamdprintBeerInsideLoopte creëren voor parameterndien,beerString, " on the wall",n,beerString, ".\nTake one down, pass it around, " print.
Hoe dit wordt geïnterpreteerd
Let op de epitheta (lofzangen) die voor Zeus worden gebruikt. Deze zijn gekozen op basis van passendheid en in voldoende hoeveelheid en variëteit om aan de complexiteit van ons verzoek te voldoen. Als u Zeus irriteert, zal hij alle verdere aanroepingen in uw programma negeren.
- Lord Zeus, → god
- master of storms, father of the gods, defender of cities, defender of homes, defender of the travelers and of those far from home, → epitheta
- I beg you to → smeekbede (supplication)
- create a function called → functie declareren
- printBeerInsideLoop → functienaam
- for parameter n → parameters
- that prints n, beerString, " on the wall", n, beerString, ".\nTake one down, pass it around, ". → initiële inhoud
De grammatica
De grammatica is gedefinieerd in een PEG (met gebruik van Peggy.JS), wat perfect is voor een woordrijke taal met veel tekstuele regels. Gebed is geformaliseerde spraak: het leest als natuurlijke taal, maar is gestructureerd en precies in zijn syntaxis, net als code.
De lof-factor (ego) van Zeus is hoog, dus er is overmatige vleierij nodig om zijn gunst te winnen (het verhogen van de "score" van het verzoek).
Zeus
= ("Lord" _)?
"Zeus," _
f:(
"who rules Olympus" "," _
/ "defender of cities" "," _
/
defender of homes" ","
_ /
"defender of the travelers and of those far from home" ","
_ /
"master of storms" ","
_ /
"father of the gods" ","
_ /
"of the lightning strike" ","
_ /
"of the sturdy oak" ","
_ /
"cloud-gathering" ","
_ )+
{
f = f.map(v => v[0]);
// remove "," _
const score = score_praise(f, 4,
"Zeus");
return {
god: "Zeus",
praise_factor: 3,
epithets: f,
score: score
};
} // Anything structural
In de JS-runtime overweegt Zeus ook of u hem te vaak achter elkaar heeft aangeroepen, waardoor u hem stoort met uw onbeduidende verzoeken (en hoe zouden uw verzoeken voor de goden niet onbeduidend kunnen lijken?). Daarom moet u uw programma in een niet-lineaire volgorde beschrijven: creëer een functie, voeg later meer parameters toe via currying, vul de lijst met commando's in — waarbij u heen en weer springt over het oppervlak van de programmatekst.
De juiste god benaderen voor uw doel
Voor vertakkingen (branching) roepen we Ariadne aan, meesteres van het labyrint. Om een variabele te declareren, wenden we ons tot Mnemosyne, godin van het geheugen.
O Mnemosyne, bewaarder van verhalen oud en nieuw, meesteres van het geheugen, indien u mij in het verleden gunstig gezind bent geweest, vraag ik u een vat genaamd beerString te creëren en daarin de boodschap "bottles of beer" te plaatsen.
Garbage collection wordt verzorgd door Hades.
Hades, wiens rijk een aards graf is, ver verwijderd van stervelingen in hun vleselijke omhulsel, wiens troon is vastgesteld in de sombere vlakten, ik smeek u alle variabelen te verzamelen die overblijven, gestrand in de functies van Chion of in de hoofdsequentie, om voort te leven in uw onderwereld.
Olympus en LLM's
Hoewel Olympus ouder is dan het wijdverbreide gebruik van LLM's, anticipeert het hierop in de tekstuele beschrijvingen van code, die in een niet-lineaire volgorde worden aangeleverd (en bewaard). In tegenstelling tot AI-systemen, die natuurlijke taalprompts behandelen als wegwerptools die leiden naar "echte" code, zijn in Olympus onze verzoeken in natuurlijke taal de code zelf; het enige tekstuele artefact.
Het volledige programma
Kom, gelukkige, onsterfelijke Goden! Hoor mijn gebed!
Grote en goede Athena, zuiveraar van kwaden, die alle woorden hoort die in de markt en de assemblee worden uitgesproken, maak alstublieft een functie genaamd printBot voor parameter n die n, beerStr, en " on the wall!\n" print.
Ariadne, zuivere, oude, meesteres van het labyrint, wijze en sluwe wiens behendige geest houvast vindt in de broosste noties, ik smeek u een controle genaamd check_ninetynine met parameter x te creëren om printBot aan te roepen met parameter x.
O Mnemosyne, bewaarder van verhalen oud en nieuw, meesteres van het geheugen, indien u mij in het verleden gunstig gezind bent geweest, vraag ik u een vat genaamd beerString te creëren en daarin de boodschap "bottles of beer" te plaatsen.
Ariadne, oude, zuivere, meesteres van het labyrint, geef check_ninetynine alstublieft een conditie voor parameter n waarbij n kleiner is dan negenennegentig.
Aandachtige Mnemosyne, door wie de ziel met het intellect is verbonden, ik vraag u een vat genaamd noMoreBeerString te creëren en dit te beschrijven met "no more bottles of beer".
Heer Zeus, meester van de stormen, vader van de goden, verdediger van steden, verdediger van huizen, verdediger van de reizigers en van hen die ver van huis zijn, ik smeek u een functie genaamd printBeerInsideLoop te creëren voor parameter n die n, beerString, " on the wall", n, beerString, ".\nTake one down, pass it around, " print.
Cyllenische Hermes, zoon van Zeus, boodschapper van Olympus, heer van Cyllene en Arcadia rijk aan kuddes, ik vraag u een functie genaamd printBeerOutsideLoop te maken die "No more bottles of beer on the wall!\nNo more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more, 99 bottles of beer on the wall." print.
Ariadne, zuivere, oude, meesteres van het labyrint, wijze en sluwe wiens behendige geest houvast vindt in de broosste noties, maak alstublieft functie beerLoop voor parameter x die check_ninetynine aanroept met parameter x.
O Hermes, de slachter van Argus, gever van genade, gever van goede dingen, ik smeek u om aan beerLoop een aanroep toe te voegen naar printBeerInsideLoop met parameter x.
Artemis, gevoed met Apollo, maagd die geniet van pijlen, ver-schietende godin, die haar geheel gouden wagen behendig door Smyrna naar het wijnstok-omhulde Claros drijft, ik vraag u een loop te vestigen die telt van negenennegentig tot één, genaamd beerLoop.
Hermes, de slachter van Argus, gever van genade, gever van goede dingen, maak alstublieft een aanroep naar printBeerOutsideLoop.
Hades, wiens rijk een aards graf is, ver verwijderd van stervelingen in hun vleselijke omhulsel, wiens troon is vastgesteld in de sombere vlakten, ik smeek u alle variabelen te verzamelen die overblijven, gestrand in de functies van Chion of in de hoofdsequentie, om voort te leven in uw onderwereld.
O grote Goden, met al de pracht van Olympus, zing het lied van 99 bottles of beer on the wall!
***
Geïntroduceerd tijdens de legendarische !!Con 2024 in Santa Cruz: Heer Zeus, verdediger van reizigers en van hen die ver van huis zijn, maak alstublieft een functie genaamd printBeerInsideLoop met parameter n!
Meer informatie op GitHub: https://github.com/rottytooth/Olympus
Groetjes,