Quaject
Inom datavetenskap är ett quaject en objektliknande datastruktur som innehåller både data och kod (eller pekare till kod), exponerad som ett gränssnitt i form av callentries och kan acceptera en lista med callentries till andra quajects för callbacks och callouts . De utvecklades av Alexia Massalin 1989 för Synthesis-kärnan och döptes efter Qua! Machine , en unik hårdvaruplattform byggd av Massalin. Ursprunget till termen "qua" är oklart; Massalin hävdar humoristiskt att det är ett ljud gjord av koalor .
Huvudsyftet med quajects är att tillhandahålla en abstraktion för att hantera självmodifierande kod genom att tillåta runtime-kodoptimering per objekt. Medan den ursprungliga Synthesis-kärnan krävde att quajects skulle skrivas i handutvecklat assemblerspråk , gjordes detta för att undvika att utveckla en komplex kompilator; Massalin noterade att just-in-time kompilering (JIT) för ett programmeringsspråk på hög nivå som tillåter generering av körtidskod , som i Lisp eller Smalltalk , också kan tillämpa detta tillvägagångssätt, även om hon också hävdade att komplexiteten hos en sådan kompilator var trolig. att vara oöverkomlig.
Quajects skiljer sig från mer konventionella objekt på två viktiga sätt: för det första använder de alltid en form av beroendeinjektionsmönstret för att hantera båda gränssnitten till andra quajects, och fortsättningar ut ur quajecten; listan med referenser för detta är en del av skapandet av quaject och kan uppdateras under quajectens livstid. För det andra, och mer kritiskt, kan en given quajects uppsättning metoder vara unika för den specifika quajecten; metoder för en typ eller klass av quajects lagras som en eller flera mallar, snarare än som fast kod. Medan delade metoder kan nås via en gemensam tabell med pekare, kan enskilda quaject också ha metoder som genereras specifikt för att skräddarsy prestandan för det quajects beteende.