Quaject
{{Short description|Object-like data structure}}
In computer science, a quaject is an object-like data structure containing both data and code (or pointers to code), exposed as an interface in the form of callentries, and can accept a list of callentries to other quajects for callbacks and callouts. They were developed by Alexia Massalin in 1989 for the Synthesis kernel, and named for the Qua! Machine, a unique hardware platform built by Massalin. The origin of the term 'qua' is unclear; Massalin claims humorously that it is a sound made by koalas.
The main purpose of quajects is to provide an abstraction to manage self-modifying code, by allowing runtime code optimizing on a per-object basis. While the original Synthesis kernel required quajects to be written in hand-developed assembly language, this was done to avoid developing a complex compiler; Massalin noted that just-in-time compilation (JIT) for a high-level programming language that permits runtime code generation, as in Lisp or Smalltalk, can also apply this approach, though she also asserted that the complexity of such a compiler was likely to be prohibitive.
Quajects differ from more conventional objects in two key ways: first, they always use a form of the dependency injection pattern to manage both interfaces to other quajects, and continuations out of the quaject; the list of callentry references for this is part of quaject creation, and may be updated during the quaject's lifetime. Second, and more critically, a given quaject's set of methods can be unique to the specific quaject; methods for a type or class of quajects are stored as one or more templates, rather than as fixed code. While shared methods can be accessed through a common table of pointers, individual quajects can also have methods that are generated specifically to tailor the performance for that quaject's behavior.
References
{{Reflist|refs=
{{Cite thesis |author-first1=Calton |author-last1=Pu |author-link1=Calton Pu |author-first2=Henry |author-last2=Massalin |author-link2=Henry Massalin |author-first3=John |author-last3=Ioannidis |degree=PhD |title=Synthesis: An Efficient Implementation of Fundamental Operating System Services |publisher=Department of Computer Sciences, Columbia University |location=New York |id=UMI Order No. GAX92-32050 |date=1992 |url=http://www.scs.stanford.edu/nyu/04fa/sched/readings/synthesis.pdf |access-date=2012-04-25 |url-status=live |archive-url=https://web.archive.org/web/20170704122520/http://www.scs.stanford.edu/nyu/04fa/sched/readings/synthesis.pdf |archive-date=2017-07-04 }} [https://www.cs.columbia.edu/~library/TR-repository/reports/reports-1992/cucs-039-92.ps.gz] {{Webarchive|url=https://web.archive.org/web/20160312005507/http://www.cs.columbia.edu/~library/TR-repository/reports/reports-1992/cucs-039-92.ps.gz |date=2016-03-12 }}
- {{cite news |author=Valerie Henson |date=2008-02-20 |title=KHB: Synthesis: An Efficient Implementation of Fundamental Operating Systems Services |url=https://lwn.net/Articles/270081/ |work=LWN.net}}
{{cite magazine |author-last=Poole |author-first=Gary Andrew |author-link=Gary Andrew Poole |date=1996-12-01 |title=Qua |url=https://www.wired.com/1996/12/ffmassalin/ |magazine=Wired |publisher=Condé Nast |access-date=2016-08-23 |url-status=live |archive-url=https://web.archive.org/web/20170704124039/https://www.wired.com/1996/12/ffmassalin/ |archive-date=2017-07-04}}
}}
Category:Operating system technology
{{comp-sci-stub}}