<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<div id="divtagdefaultwrapper" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<p>Hi Eliot,</p>
<p><br>
</p>
<p>> <span style="font-size: 12pt;">This may be a return address.  If you ran this in the simulator you'd be able to see.  Also try running it on the StackInterpreter and see what you get.</span></p>
<div><br>
</div>
<div>Ah, this could be an explanation! I finally need to check out the VMMaker :-)</div>
<div>Wouldn't this be a memory leak vulnerability in the VM? Or don't we care about vulnerability issues in completely open systems such as Smalltalk at all?</div>
<div><br>
</div>
<div>> <span style="font-size: 12pt;">What do you mean by "translates the #pushRcvr: bytecodes to another class"?</span>
<div><br>
</div>
<div>Well, that's actually another issue. Since instance variable accesses are encoded <span style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">into
 the bytecode</span> by index, not by name, you cannot reuse the bytecodes for different kinds of objects:</div>
<div><br>
</div>
</div>
</div>
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<div>
<div>
<div>c := Object newUniqueClassInstVars: 'foo bar' classInstVars: ''.</div>
</div>
</div>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<div>
<div>
<div>d := Object newUniqueClassInstVars: 'bar baz' classInstVars: ''.</div>
</div>
</div>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<div>
<div>
<div>c compile: 'bar ^ bar'.</div>
</div>
</div>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<div>
<div>
<div>o := c new.</div>
</div>
</div>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<div>
<div>
<div>p := d new.</div>
</div>
</div>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<div>
<div>
<div>o instVarNamed: 'bar' put: 42.</div>
</div>
</div>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<div>
<div>
<div>o bar. "42"</div>
</div>
</div>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<div>
<div>
<div>p instVarNamed: 'bar' put: 42.</div>
</div>
</div>
</div>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<div>
<div>
<div>p executeMethod: c >> #bar. "expected 42, but got nil"</div>
</div>
</div>
</div>
</blockquote>
<div style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;" dir="ltr">
<div>
<div><br>
</div>
<div>You always need to recompile the methods first ... This makes it impossible to add instance variables to traits, for example.</div>
</div>
<div><br>
</div>
<div>Best,</div>
<div>Christoph</div>
<br>
<div style="color: rgb(0, 0, 0);">
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von Eliot Miranda <eliot.miranda@gmail.com><br>
<b>Gesendet:</b> Samstag, 18. April 2020 21:05 Uhr<br>
<b>An:</b> The general-purpose Squeak developers list<br>
<b>Betreff:</b> Re: [squeak-dev] CompiledBlocks are fascinating</font>
<div> </div>
</div>
<div>
<div dir="ltr">
<div dir="ltr">
<div dir="ltr"><br>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Sat, Apr 18, 2020 at 10:31 AM Thiede, Christoph <<a href="mailto:Christoph.Thiede@student.hpi.uni-potsdam.de">Christoph.Thiede@student.hpi.uni-potsdam.de</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left-width:1px; border-left-style:solid; border-left-color:rgb(204,204,204); padding-left:1ex">
<div dir="ltr">
<div id="gmail-m_8693995806049905862divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<blockquote style="margin:0px 0px 0px 40px; border:none; padding:0px">
<p></p>
<div>class := Object newSubclass.</div>
<p></p>
<p></p>
<div>class addSelector: #foo: withMethod: (</div>
<p></p>
<p></p>
<div><span style="white-space:pre-wrap"></span>[:x | x squared * 2] method as: CompiledMethod).</div>
<p></p>
<p></p>
<div>class new foo: 3. "18"</div>
</blockquote>
<p>And you can even debug it :D</p>
<p><img naturalheight="33" naturalwidth="144" size="1857" id="gmail-m_8693995806049905862img747746" style="max-width: 99.9%; user-select: none;" src="cid:1718ead4671f456b1e51"><br>
</p>
<p>This one is really crazy</p>
<blockquote style="margin:0px 0px 0px 40px; border:none; padding:0px">
<p></p>
<div></div>
<p></p>
<div>class := Object newUniqueClassInstVars: 'state' classInstVars: ''.</div>
<div>class addSelector: #foo withMethod: (</div>
<div><span style="white-space:pre-wrap"></span>[:x | gate] method as: CompiledMethod).</div>
<div>class new foo "-1.2045729113346377e-38"</div>
</blockquote>
<p>What the ...? Am I accessing any private method literals here?</p>
</div>
</div>
</blockquote>
<div><br>
</div>
<div style="color:rgb(0,0,0)">This may be a return address.  If you ran this in the simulator you'd be able to see.  Also try running it on the StackInterpreter and see what you get.</div>
<div style="color:rgb(0,0,0)"> </div>
<blockquote class="gmail_quote" style="color:rgb(0,0,0); margin:0px 0px 0px 0.8ex; border-left-width:1px; border-left-style:solid; border-left-color:rgb(204,204,204); padding-left:1ex">
<div dir="ltr">
<div id="gmail-m_8693995806049905862divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<blockquote style="margin:0px 0px 0px 40px; border:none; padding:0px">
<p></p>
<div></div>
<p></p>
</blockquote>
</div>
</div>
</blockquote>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left-width:1px; border-left-style:solid; border-left-color:rgb(204,204,204); padding-left:1ex">
<div dir="ltr">
<div id="gmail-m_8693995806049905862divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<p><span style="font-size:12pt">Then we only need a mechanism that translates the #pushRcvr: bytecodes to another class.</span><br>
</p>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>I don't see you jumping to the metacircular interpreter in the above.  What do you mean by "translates the #pushRcvr: bytecodes to another class"?</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex; border-left-width:1px; border-left-style:solid; border-left-color:rgb(204,204,204); padding-left:1ex">
<div dir="ltr">
<div id="gmail-m_8693995806049905862divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<p><span style="font-size:12pt">Best,</span><br>
</p>
<p>Christoph</p>
</div>
</div>
</blockquote>
</div>
<br clear="all">
<div><br>
</div>
-- <br>
<div dir="ltr" class="gmail_signature">
<div dir="ltr">
<div><span style="font-size:small; border-collapse:separate">
<div>_,,,^..^,,,_<br>
</div>
<div>best, Eliot</div>
</span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>