<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments on: How many concepts for modules do we need?</title>
	<atom:link href="http://blog.objectteams.org/2010/03/how-many-concepts-for-modules-do-we-need/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.objectteams.org/2010/03/how-many-concepts-for-modules-do-we-need/</link>
	<description>Everthing Object Teams - adding team spirit to your objects.</description>
	<pubDate>Fri, 10 Feb 2012 06:19:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: Object Teams Final 0.7.0 at The Object Teams Blog</title>
		<link>http://blog.objectteams.org/2010/03/how-many-concepts-for-modules-do-we-need/#comment-1646</link>
		<dc:creator>Object Teams Final 0.7.0 at The Object Teams Blog</dc:creator>
		<pubDate>Wed, 07 Jul 2010 13:31:24 +0000</pubDate>
		<guid isPermaLink="false">http://blog.objectteams.org/?p=32#comment-1646</guid>
		<description>[...] runtime, all you see is a soup of individuals (called objects) running around all over the place (remember: standard module systems do not create boundaries around runtime [...]</description>
		<content:encoded><![CDATA[<p>[...] runtime, all you see is a soup of individuals (called objects) running around all over the place (remember: standard module systems do not create boundaries around runtime [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gilad Bracha</title>
		<link>http://blog.objectteams.org/2010/03/how-many-concepts-for-modules-do-we-need/#comment-203</link>
		<dc:creator>Gilad Bracha</dc:creator>
		<pubDate>Wed, 24 Mar 2010 23:04:36 +0000</pubDate>
		<guid isPermaLink="false">http://blog.objectteams.org/?p=32#comment-203</guid>
		<description>Hi Stephan,

Thanks for clarifying. 

BTW, I love your opening paragraph. I expect to quote it often in the future!</description>
		<content:encoded><![CDATA[<p>Hi Stephan,</p>
<p>Thanks for clarifying. </p>
<p>BTW, I love your opening paragraph. I expect to quote it often in the future!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: stephan</title>
		<link>http://blog.objectteams.org/2010/03/how-many-concepts-for-modules-do-we-need/#comment-193</link>
		<dc:creator>stephan</dc:creator>
		<pubDate>Mon, 22 Mar 2010 17:07:29 +0000</pubDate>
		<guid isPermaLink="false">http://blog.objectteams.org/?p=32#comment-193</guid>
		<description>Hi Gilad,
thanks for commenting!

Who would know the quirks in Java better than you :). So what we I're doing in OT/J is a daring balance between playing by the rules of Java and still making conceptually sound improvements.

Why the heck did I write "Scoping"? Sure you're right it's about access control. I guess, however, I'm trying to better align both concepts, so that what I &lt;i&gt;can&lt;/i&gt; see I'm also &lt;i&gt;allowed&lt;/i&gt; to see. So private things are resolved only inside-out. With a strict inside-out scoping rule everything in scope is also accessible. Other access modifiers imply lookup strategies that may traverse also in other directions (outside-in, or sub-super). I'd hope that alignment of scoping and access control would provide for simpler intuition, but for precise argumentation the distinction is of course still needed (and of course a compiler first resolves and then checks access - but we wouldn't necessarily want to tell programmers how the compiler works, would we?).

Inside a team we indeed apply instance based access control (by the compiler). Regarding a team from the outside it looks like a regular class, so we maintain class based access control (but even here family polymorphism helps).

Unfortunately I don't see how access control for nested classes in Java could ever be made absolutely secure. You only have to know the name of one of those synthetic access methods in order to by-pass the compiler checks (even for class based access control). However, as I speak I realize that we could actually add a (more) secure mode pretty easily: we just need to extend those synthetic accessors: pass the caller as an additional argument and perform identity check within the accessor. This would be quite similar to how we already extend instanceof and cast (for family polymorphism). It's still not 100% secure but I really wouldn't want to do stack inspection for each invocation of a synthetic accessor, mh?

Anyway, my primary goal is to improve modularity for reuse, evolution and maintenance. Regarding security I'm somewhat less ambitious to improve Java - I'll leave that field for Newspeak :)</description>
		<content:encoded><![CDATA[<p>Hi Gilad,<br />
thanks for commenting!</p>
<p>Who would know the quirks in Java better than you :). So what we I&#8217;re doing in OT/J is a daring balance between playing by the rules of Java and still making conceptually sound improvements.</p>
<p>Why the heck did I write &#8220;Scoping&#8221;? Sure you&#8217;re right it&#8217;s about access control. I guess, however, I&#8217;m trying to better align both concepts, so that what I <i>can</i> see I&#8217;m also <i>allowed</i> to see. So private things are resolved only inside-out. With a strict inside-out scoping rule everything in scope is also accessible. Other access modifiers imply lookup strategies that may traverse also in other directions (outside-in, or sub-super). I&#8217;d hope that alignment of scoping and access control would provide for simpler intuition, but for precise argumentation the distinction is of course still needed (and of course a compiler first resolves and then checks access - but we wouldn&#8217;t necessarily want to tell programmers how the compiler works, would we?).</p>
<p>Inside a team we indeed apply instance based access control (by the compiler). Regarding a team from the outside it looks like a regular class, so we maintain class based access control (but even here family polymorphism helps).</p>
<p>Unfortunately I don&#8217;t see how access control for nested classes in Java could ever be made absolutely secure. You only have to know the name of one of those synthetic access methods in order to by-pass the compiler checks (even for class based access control). However, as I speak I realize that we could actually add a (more) secure mode pretty easily: we just need to extend those synthetic accessors: pass the caller as an additional argument and perform identity check within the accessor. This would be quite similar to how we already extend instanceof and cast (for family polymorphism). It&#8217;s still not 100% secure but I really wouldn&#8217;t want to do stack inspection for each invocation of a synthetic accessor, mh?</p>
<p>Anyway, my primary goal is to improve modularity for reuse, evolution and maintenance. Regarding security I&#8217;m somewhat less ambitious to improve Java - I&#8217;ll leave that field for Newspeak <img src='http://blog.objectteams.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Gilad Bracha</title>
		<link>http://blog.objectteams.org/2010/03/how-many-concepts-for-modules-do-we-need/#comment-191</link>
		<dc:creator>Gilad Bracha</dc:creator>
		<pubDate>Mon, 22 Mar 2010 14:59:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.objectteams.org/?p=32#comment-191</guid>
		<description>Hi Stephan,

Excellent coverage of nested classes. Of course, the list of quirks and misfeatures is much longer (try serializing an anonymous class; inheriting from a private class that you can access; ...).

I must quibble with your use of the term "Scoping". You are really not discussing scope at all, but rather access control and class based encapsulation. The latter is an issue in Java irrespective of nested classes (do you change that?). Furthermore, access control in Java is dynamic; fixing the compiler is easy, but the runtime remains broken (true in Scala as well). Because of this, you cannot use objects as reliable capabilities for security, which is one of our goals with Newspeak (thanks for the plug BTW).</description>
		<content:encoded><![CDATA[<p>Hi Stephan,</p>
<p>Excellent coverage of nested classes. Of course, the list of quirks and misfeatures is much longer (try serializing an anonymous class; inheriting from a private class that you can access; &#8230;).</p>
<p>I must quibble with your use of the term &#8220;Scoping&#8221;. You are really not discussing scope at all, but rather access control and class based encapsulation. The latter is an issue in Java irrespective of nested classes (do you change that?). Furthermore, access control in Java is dynamic; fixing the compiler is easy, but the runtime remains broken (true in Scala as well). Because of this, you cannot use objects as reliable capabilities for security, which is one of our goals with Newspeak (thanks for the plug BTW).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Adrian</title>
		<link>http://blog.objectteams.org/2010/03/how-many-concepts-for-modules-do-we-need/#comment-188</link>
		<dc:creator>Adrian</dc:creator>
		<pubDate>Mon, 22 Mar 2010 08:38:38 +0000</pubDate>
		<guid isPermaLink="false">http://blog.objectteams.org/?p=32#comment-188</guid>
		<description>Awesome post, and extra kudos for mentioning the limitation of textually nesting classes! I am a big believer of (truly) nested classes since a long time, it is so nice to see them picked up!</description>
		<content:encoded><![CDATA[<p>Awesome post, and extra kudos for mentioning the limitation of textually nesting classes! I am a big believer of (truly) nested classes since a long time, it is so nice to see them picked up!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: stephan</title>
		<link>http://blog.objectteams.org/2010/03/how-many-concepts-for-modules-do-we-need/#comment-187</link>
		<dc:creator>stephan</dc:creator>
		<pubDate>Mon, 22 Mar 2010 08:30:28 +0000</pubDate>
		<guid isPermaLink="false">http://blog.objectteams.org/?p=32#comment-187</guid>
		<description>@Erkki: In order to unfold the story of Scala and OT/J I would probably start in the year 2000, when Martin Odersky and myself met at a conference explaining to each other the respective predecessors of Scala and OT/J :)

However, the concepts mentioned in this post are the smaller part of what makes OT/J. The unique contribution of OT/J is its support for roles. Feel free to browse our documentation and write a comparison, if you see significant similarity between both languages.

Just one comment: Scala is an admirable piece of green field development. OT/J deliberately extends Java in order to support smoothest possible adoption. Those are very different goals to begin with.

As for package objects, no, I wasn't aware of this late addition to Scala. But reading that these are singletons I'm actually disappointed: If you use these to model the above example you will end up with a world with only one City. Which reminds me that I thought of writing about the woes of singletons (which, e.g., OSGi people are very well aware of).

BTW, when searching for a succinct description of the Cake pattern all I find are references to the paper "Scalable Component Abstractions" mentioning that the paper doesn't use the term Cake pattern. I would have to guess what within this 18pp. paper is the Cake pattern.</description>
		<content:encoded><![CDATA[<p>@Erkki: In order to unfold the story of Scala and OT/J I would probably start in the year 2000, when Martin Odersky and myself met at a conference explaining to each other the respective predecessors of Scala and OT/J <img src='http://blog.objectteams.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>However, the concepts mentioned in this post are the smaller part of what makes OT/J. The unique contribution of OT/J is its support for roles. Feel free to browse our documentation and write a comparison, if you see significant similarity between both languages.</p>
<p>Just one comment: Scala is an admirable piece of green field development. OT/J deliberately extends Java in order to support smoothest possible adoption. Those are very different goals to begin with.</p>
<p>As for package objects, no, I wasn&#8217;t aware of this late addition to Scala. But reading that these are singletons I&#8217;m actually disappointed: If you use these to model the above example you will end up with a world with only one City. Which reminds me that I thought of writing about the woes of singletons (which, e.g., OSGi people are very well aware of).</p>
<p>BTW, when searching for a succinct description of the Cake pattern all I find are references to the paper &#8220;Scalable Component Abstractions&#8221; mentioning that the paper doesn&#8217;t use the term Cake pattern. I would have to guess what within this 18pp. paper is the Cake pattern.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Erkki Lindpere</title>
		<link>http://blog.objectteams.org/2010/03/how-many-concepts-for-modules-do-we-need/#comment-185</link>
		<dc:creator>Erkki Lindpere</dc:creator>
		<pubDate>Mon, 22 Mar 2010 00:14:15 +0000</pubDate>
		<guid isPermaLink="false">http://blog.objectteams.org/?p=32#comment-185</guid>
		<description>Have you looked at Scala? It supports both nested and non-nested packages. Scala 2.8 introduces package objects, which are both objects (singletons) and packages. Combined with the Cake pattern, and some Scala features Java lacks (such as traits, abstract type members and type aliases), and the Cake pattern, you can achieve similar modularization to OT/J in Scala (at least I think they are similar, I have not looked deeply into OT/J).</description>
		<content:encoded><![CDATA[<p>Have you looked at Scala? It supports both nested and non-nested packages. Scala 2.8 introduces package objects, which are both objects (singletons) and packages. Combined with the Cake pattern, and some Scala features Java lacks (such as traits, abstract type members and type aliases), and the Cake pattern, you can achieve similar modularization to OT/J in Scala (at least I think they are similar, I have not looked deeply into OT/J).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: stephan</title>
		<link>http://blog.objectteams.org/2010/03/how-many-concepts-for-modules-do-we-need/#comment-176</link>
		<dc:creator>stephan</dc:creator>
		<pubDate>Sun, 21 Mar 2010 11:42:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.objectteams.org/?p=32#comment-176</guid>
		<description>@Thomas: Thanks for reminding me of assembly. Let's see: the next post will dive into inheritance issues. Actually, I can add a paragraph on how inheritance can be used for assembly - I hope you'll be positively surprised :)

As for version requirements etc. this is not currently covered by OT/J (which still is a 'traditional' programming language agnostic to packaging and deployment). With OT/Equinox we still leave versioning to the OSGi level, but as I mentioned, I'd love to discuss how both worlds can be unified, and I think they should. Let's mark it on our agenda.</description>
		<content:encoded><![CDATA[<p>@Thomas: Thanks for reminding me of assembly. Let&#8217;s see: the next post will dive into inheritance issues. Actually, I can add a paragraph on how inheritance can be used for assembly - I hope you&#8217;ll be positively surprised <img src='http://blog.objectteams.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>As for version requirements etc. this is not currently covered by OT/J (which still is a &#8216;traditional&#8217; programming language agnostic to packaging and deployment). With OT/Equinox we still leave versioning to the OSGi level, but as I mentioned, I&#8217;d love to discuss how both worlds can be unified, and I think they should. Let&#8217;s mark it on our agenda.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: stephan</title>
		<link>http://blog.objectteams.org/2010/03/how-many-concepts-for-modules-do-we-need/#comment-175</link>
		<dc:creator>stephan</dc:creator>
		<pubDate>Sun, 21 Mar 2010 11:24:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.objectteams.org/?p=32#comment-175</guid>
		<description>@Eric: I take two things from the recent fuzz about Java Modules: I understand that the need for action is real and recognized by many, and for the time being I take OSGi and Equinox as actually quite good choices until we have better ones (and current JSRs are not likely to improve here).

However, in object-oriented programming classes are at the core of our business. In OT/J we have mended some of the flaws of nested classes in Java. So with OT/J we should really give nested classes a chance to live up to the idea that classes are the primary modules and not only at one level (a few hundreds of lines of code) but potentially at any level of scale.

Doing all this based on Java is a limitation, but maybe we can still bend Java to a direction that has a future. I hope so, not because I love Java, but for very pragmatic reasons.</description>
		<content:encoded><![CDATA[<p>@Eric: I take two things from the recent fuzz about Java Modules: I understand that the need for action is real and recognized by many, and for the time being I take OSGi and Equinox as actually quite good choices until we have better ones (and current JSRs are not likely to improve here).</p>
<p>However, in object-oriented programming classes are at the core of our business. In OT/J we have mended some of the flaws of nested classes in Java. So with OT/J we should really give nested classes a chance to live up to the idea that classes are the primary modules and not only at one level (a few hundreds of lines of code) but potentially at any level of scale.</p>
<p>Doing all this based on Java is a limitation, but maybe we can still bend Java to a direction that has a future. I hope so, not because I love Java, but for very pragmatic reasons.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas Hallgren</title>
		<link>http://blog.objectteams.org/2010/03/how-many-concepts-for-modules-do-we-need/#comment-174</link>
		<dc:creator>Thomas Hallgren</dc:creator>
		<pubDate>Sun, 21 Mar 2010 07:19:49 +0000</pubDate>
		<guid isPermaLink="false">http://blog.objectteams.org/?p=32#comment-174</guid>
		<description>Very interesting article. Will you cover assembly in part 2? I'm very interested in how your classes can express requirements on other classes that includes versions.</description>
		<content:encoded><![CDATA[<p>Very interesting article. Will you cover assembly in part 2? I&#8217;m very interested in how your classes can express requirements on other classes that includes versions.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

