This file is indexed.

/usr/share/doc/racket/reference/objectserialize.html is in racket-doc 6.1-4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><title>6.9&nbsp;Object Serialization</title><link rel="stylesheet" type="text/css" href="../scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="extras.css" title="default"/><link rel="stylesheet" type="text/css" href="../racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../doc-site.css" title="default"/><script type="text/javascript" src="../scribble-common.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../doc-site.js"></script><script type="text/javascript" src="../local-redirect/local-redirect.js"></script><script type="text/javascript" src="../local-redirect/local-user-redirect.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="doc-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9658;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x"><span style="font-weight: bold">The Racket Reference</span></a></td></tr></table></div><div class="tocviewsublisttop" style="display: none;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="model.html" class="tocviewlink" data-pltdoc="x">Language Model</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="notation.html" class="tocviewlink" data-pltdoc="x">Notation for Documentation</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="syntax.html" class="tocviewlink" data-pltdoc="x">Syntactic Forms</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="data.html" class="tocviewlink" data-pltdoc="x">Datatypes</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="structures.html" class="tocviewlink" data-pltdoc="x">Structures</a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="mzlib_class.html" class="tocviewselflink" data-pltdoc="x">Classes and Objects</a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="mzlib_unit.html" class="tocviewlink" data-pltdoc="x">Units</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="contracts.html" class="tocviewlink" data-pltdoc="x">Contracts</a></td></tr><tr><td align="right">9&nbsp;</td><td><a href="match.html" class="tocviewlink" data-pltdoc="x">Pattern Matching</a></td></tr><tr><td align="right">10&nbsp;</td><td><a href="control.html" class="tocviewlink" data-pltdoc="x">Control Flow</a></td></tr><tr><td align="right">11&nbsp;</td><td><a href="concurrency.html" class="tocviewlink" data-pltdoc="x">Concurrency and Parallelism</a></td></tr><tr><td align="right">12&nbsp;</td><td><a href="Macros.html" class="tocviewlink" data-pltdoc="x">Macros</a></td></tr><tr><td align="right">13&nbsp;</td><td><a href="input-and-output.html" class="tocviewlink" data-pltdoc="x">Input and Output</a></td></tr><tr><td align="right">14&nbsp;</td><td><a href="security.html" class="tocviewlink" data-pltdoc="x">Reflection and Security</a></td></tr><tr><td align="right">15&nbsp;</td><td><a href="os.html" class="tocviewlink" data-pltdoc="x">Operating System</a></td></tr><tr><td align="right">16&nbsp;</td><td><a href="memory.html" class="tocviewlink" data-pltdoc="x">Memory Management</a></td></tr><tr><td align="right">17&nbsp;</td><td><a href="unsafe.html" class="tocviewlink" data-pltdoc="x">Unsafe Operations</a></td></tr><tr><td align="right">18&nbsp;</td><td><a href="running.html" class="tocviewlink" data-pltdoc="x">Running Racket</a></td></tr><tr><td align="right"></td><td><a href="doc-bibliography.html" class="tocviewlink" data-pltdoc="x">Bibliography</a></td></tr><tr><td align="right"></td><td><a href="doc-index.html" class="tocviewlink" data-pltdoc="x">Index</a></td></tr></table></div></div><div class="tocviewlist"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_1&quot;);">&#9660;</a></td><td>6&nbsp;</td><td><a href="mzlib_class.html" class="tocviewlink" data-pltdoc="x">Classes and Objects</a></td></tr></table><div class="tocviewsublistbottom" style="display: block;" id="tocview_1"><table cellspacing="0" cellpadding="0"><tr><td align="right">6.1&nbsp;</td><td><a href="createinterface.html" class="tocviewlink" data-pltdoc="x">Creating Interfaces</a></td></tr><tr><td align="right">6.2&nbsp;</td><td><a href="createclass.html" class="tocviewlink" data-pltdoc="x">Creating Classes</a></td></tr><tr><td align="right">6.3&nbsp;</td><td><a href="objcreation.html" class="tocviewlink" data-pltdoc="x">Creating Objects</a></td></tr><tr><td align="right">6.4&nbsp;</td><td><a href="ivaraccess.html" class="tocviewlink" data-pltdoc="x">Field and Method Access</a></td></tr><tr><td align="right">6.5&nbsp;</td><td><a href="mixins.html" class="tocviewlink" data-pltdoc="x">Mixins</a></td></tr><tr><td align="right">6.6&nbsp;</td><td><a href="trait.html" class="tocviewlink" data-pltdoc="x">Traits</a></td></tr><tr><td align="right">6.7&nbsp;</td><td><a href="Object_and_Class_Contracts.html" class="tocviewlink" data-pltdoc="x">Object and Class Contracts</a></td></tr><tr><td align="right">6.8&nbsp;</td><td><a href="objectequality.html" class="tocviewlink" data-pltdoc="x">Object Equality and Hashing</a></td></tr><tr><td align="right">6.9&nbsp;</td><td><a href="" class="tocviewselflink" data-pltdoc="x">Object Serialization</a></td></tr><tr><td align="right">6.10&nbsp;</td><td><a href="objectprinting.html" class="tocviewlink" data-pltdoc="x">Object Printing</a></td></tr><tr><td align="right">6.11&nbsp;</td><td><a href="objectutils.html" class="tocviewlink" data-pltdoc="x">Object, Class, and Interface Utilities</a></td></tr><tr><td align="right">6.12&nbsp;</td><td><a href="Surrogates.html" class="tocviewlink" data-pltdoc="x">Surrogates</a></td></tr></table></div></div></div><div class="tocsub"><div class="tocsubtitle">On this page:</div><table class="tocsublist" cellspacing="0"><tr><td><a href="#%28form._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._define-serializable-class%2A%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktStxLink">define-<wbr></wbr>serializable-<wbr></wbr>class*</span></span></a></td></tr><tr><td><a href="#%28form._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._define-serializable-class%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktStxLink">define-<wbr></wbr>serializable-<wbr></wbr>class</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._externalizable~3c~25~3e%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">externalizable&lt;%&gt;</span></span></a></td></tr></table></div></div><div class="maincolumn"><div class="main"><div class="navsettop"><span class="navleft"><form class="searchform"><input class="searchbox" style="color: #888;" type="text" value="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, &quot;6.1&quot;, &quot;../&quot;);" onfocus="this.style.color=&quot;black&quot;; this.style.textAlign=&quot;left&quot;; if (this.value == &quot;...search manuals...&quot;) this.value=&quot;&quot;;" onblur="if (this.value.match(/^ *$/)) { this.style.color=&quot;#888&quot;; this.style.textAlign=&quot;center&quot;; this.value=&quot;...search manuals...&quot;; }"/></form>&nbsp;&nbsp;<a href="../index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot(&quot;6.1&quot;);">top</a></span><span class="navright">&nbsp;&nbsp;<a href="objectequality.html" title="backward to &quot;6.8 Object Equality and Hashing&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="mzlib_class.html" title="up to &quot;6 Classes and Objects&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="objectprinting.html" title="forward to &quot;6.10 Object Printing&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div><h4 x-source-module="(lib &quot;scribblings/reference/reference.scrbl&quot;)" x-part-tag="&quot;objectserialize&quot;">6.9<tt>&nbsp;</tt><a name="(part._objectserialize)"></a>Object Serialization</h4><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>syntax</p></div></div><table cellspacing="0" cellpadding="0" class="RktBlk RForeground"><tr><td><span class="RktPn">(</span><a name="(form._((lib._racket/private/class-internal..rkt)._define-serializable-class*))"></a><span title="Provided from: racket/class, racket | Package: base"><span class="RktSym"><a href="#%28form._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._define-serializable-class%2A%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">define-serializable-class*</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">class-id</span><span class="hspace">&nbsp;</span><span class="RktVar">superclass-expr</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktVar">interface-expr</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">class-clause</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span></td></tr></table></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Binds <span class="RktVar">class-id</span> to a class, where <span class="RktVar">superclass-expr</span>,
the <span class="RktVar">interface-expr</span>s, and the <span class="RktVar">class-clause</span>s are as in
<span class="RktSym"><a href="createclass.html#%28form._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._class%2A%29%29" class="RktStxLink" data-pltdoc="x">class*</a></span>.</div></p><p>This form can only be used at the top level, either within a module
or outside. The <span class="RktVar">class-id</span> identifier is bound to the new
class, and <span class="RktSym">deserialize-info:</span><span class="RktVar">class-id</span> is also
defined; if the definition is within a module, then the latter is
provided from a <span class="RktSym">deserialize-info</span> submodule via <span class="RktSym"><a href="module.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._module%2B%29%29" class="RktStxLink" data-pltdoc="x">module+</a></span>.</p><p>Serialization for the class works in one of two ways:</p><ul><li><p>If the class implements the built-in interface
<span class="RktSym"><a href="#%28def._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._externalizable~3c~25~3e%29%29" class="RktValLink" data-pltdoc="x">externalizable&lt;%&gt;</a></span>, then an object is serialized by
calling its <span class="RktSym">externalize</span> method; the result can be
anything that is serializable (but, obviously, should not be
the object itself). Deserialization creates an instance of the
class with no initialization arguments, and then calls the
object&rsquo;s <span class="RktSym">internalize</span> method with the result of
<span class="RktSym">externalize</span> (or, more precisely, a deserialized
version of the serialized result of a previous call).</p><p>To support this form of serialization, the class must be
instantiable with no initialization arguments. Furthermore,
cycles involving only instances of the class (and other such
classes) cannot be serialized.</p></li><li><p>If the class does not implement <span class="RktSym"><a href="#%28def._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._externalizable~3c~25~3e%29%29" class="RktValLink" data-pltdoc="x">externalizable&lt;%&gt;</a></span>,
then every superclass of the class must be either serializable
or transparent (i.e,. have <span class="RktVal">#f</span> as its
inspector). Serialization and deserialization are fully
automatic, and may involve cycles of instances.</p><p>To support cycles of instances, deserialization may create an
instance of the call with all fields as the undefined value,
and then mutate the object to set the field
values. Serialization support does not otherwise make an
object&rsquo;s fields mutable.</p></li></ul><p>In the second case, a serializable subclass can implement
<span class="RktSym"><a href="#%28def._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._externalizable~3c~25~3e%29%29" class="RktValLink" data-pltdoc="x">externalizable&lt;%&gt;</a></span>, in which case the <span class="RktSym">externalize</span>
method is responsible for all serialization (i.e., automatic
serialization is lost for instances of the subclass). In the first
case, all serializable subclasses implement
<span class="RktSym"><a href="#%28def._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._externalizable~3c~25~3e%29%29" class="RktValLink" data-pltdoc="x">externalizable&lt;%&gt;</a></span>, since a subclass implements all of the
interfaces of its parent class.</p><p>In either case, if an object is an immediate instance of a subclass
(that is not itself serializable), the object is serialized as if it
was an immediate instance of the serializable class. In particular,
overriding declarations of the <span class="RktSym">externalize</span> method are ignored
for instances of non-serializable subclasses.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>syntax</p></div></div><table cellspacing="0" cellpadding="0" class="RktBlk RForeground"><tr><td><span class="RktPn">(</span><a name="(form._((lib._racket/private/class-internal..rkt)._define-serializable-class))"></a><span title="Provided from: racket/class, racket | Package: base"><span class="RktSym"><a href="#%28form._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._define-serializable-class%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">define-serializable-class</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">class-id</span><span class="hspace">&nbsp;</span><span class="RktVar">superclass-expr</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">class-clause</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span></td></tr></table></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="#%28form._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._define-serializable-class%2A%29%29" class="RktStxLink" data-pltdoc="x">define-serializable-class*</a></span>, but without interface
expressions (analogous to <span class="RktSym"><a href="createclass.html#%28form._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._class%29%29" class="RktStxLink" data-pltdoc="x">class</a></span>).</div></p><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>interface</p></div></div><p class="RForeground"><a name="(def._((lib._racket/private/class-internal..rkt)._externalizable~3c~25~3e))"></a><span title="Provided from: racket/class, racket | Package: base"><span class="RktSym"><a href="#%28def._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._externalizable~3c~25~3e%29%29" class="RktValDef RktValLink" data-pltdoc="x">externalizable&lt;%&gt;</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="objectutils.html#%28def._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._interface~3f%29%29" class="RktValLink" data-pltdoc="x">interface?</a></span></p></blockquote></td></tr></table></div><div class="SIntrapara">The <span class="RktSym"><a href="#%28def._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._externalizable~3c~25~3e%29%29" class="RktValLink" data-pltdoc="x">externalizable&lt;%&gt;</a></span> interface includes only the
<span class="RktSym">externalize</span> and <span class="RktSym">internalize</span> methods. See
<span class="RktSym"><a href="#%28form._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._define-serializable-class%2A%29%29" class="RktStxLink" data-pltdoc="x">define-serializable-class*</a></span> for more information.</div><div class="SIntrapara"><blockquote class="leftindent"></blockquote></div></p><div class="navsetbottom"><span class="navleft"><form class="searchform"><input class="searchbox" style="color: #888;" type="text" value="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, &quot;6.1&quot;, &quot;../&quot;);" onfocus="this.style.color=&quot;black&quot;; this.style.textAlign=&quot;left&quot;; if (this.value == &quot;...search manuals...&quot;) this.value=&quot;&quot;;" onblur="if (this.value.match(/^ *$/)) { this.style.color=&quot;#888&quot;; this.style.textAlign=&quot;center&quot;; this.value=&quot;...search manuals...&quot;; }"/></form>&nbsp;&nbsp;<a href="../index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot(&quot;6.1&quot;);">top</a></span><span class="navright">&nbsp;&nbsp;<a href="objectequality.html" title="backward to &quot;6.8 Object Equality and Hashing&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="mzlib_class.html" title="up to &quot;6 Classes and Objects&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="objectprinting.html" title="forward to &quot;6.10 Object Printing&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div></div></div><div id="contextindicator">&nbsp;</div></body></html>