<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sadek Drobi's Blog &#187; Paradigm Oriented Programming Language</title>
	<atom:link href="http://sadekdrobi.com/category/paradigm-oriented-programming-language/feed/" rel="self" type="application/rss+xml" />
	<link>http://sadekdrobi.com</link>
	<description>Sadek Drobi</description>
	<lastBuildDate>Wed, 06 Jan 2010 23:11:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Abstraction for People: Configurations, Patterns, DSLs and Monads</title>
		<link>http://sadekdrobi.com/2009/03/29/abstraction-for-people-configurations-patterns-dsls-and-monads/</link>
		<comments>http://sadekdrobi.com/2009/03/29/abstraction-for-people-configurations-patterns-dsls-and-monads/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 23:10:53 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[DOTNET]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[LinQ]]></category>
		<category><![CDATA[Model Mismatch]]></category>
		<category><![CDATA[Paradigm Oriented Programming Language]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2009/03/29/abstraction-for-people-configurations-patterns-dsls-and-monads/</guid>
		<description><![CDATA[

LinQ is often understood in terms of introducing a Domain Specific Language to work with data to C# and .Net in general. The fact is:it is not, and there is a considerable difference between LinQ syntax nature and a DSL. The problem is that DSL definition is blur enough to take anything interesting or cool [...]]]></description>
			<content:encoded><![CDATA[</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/03/dsc-2692a3.jpg"><img style="border-right-width: 0px; margin: 0px 20px 0px 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="DSC_2692a3" align="left" src="http://sadekdrobi.com/wp-content/uploads/2009/03/dsc-2692a3-thumb.jpg" width="222" height="327"></a></p>
<p>LinQ is often understood in terms of introducing a Domain Specific Language to work with data to C# and .Net in general. The fact is:it is not, and there is a considerable difference between LinQ syntax nature and a DSL. The problem is that DSL definition is blur enough to take anything interesting or cool under it!</p>
<p><span id="more-596"></span>
<p>Back to the beginning. When faced to doing software for a business that has some moving parts, a good practice is to make a generalization or an abstraction of the fixed part and express what is moving through some sort of configurations. That is in some respect what most of enterprise frameworks do when implementing the fixed part and letting you nicely only express what varies for your context. This way you are almost only concerned about your part since the framework itself is supposed to be steady and well abstracted and as a result implicit in your context. This experience hasn&#8217;t been nice enough when XML used to be involved. As someone that defends multi-paradigm design I could argue that XML can play a best fit in some contexts but this is out of the scope of this post. XML charset is not optimal for a lot of cases, so why not creating our own charset, and here comes DSLs.</p>
<p>Of course here I am only talking about the rise of DSLs in the enterprise and not the DSLs that FP been doing for ages, and I&#8217;ll get back to this one later.</p>
<p>Now using my favorite meta magical super dynamic language, I&#8217;d like to construct my customized embedded(or internal) domain specific language, and I&#8217;ll make my best to be English like/business like/ host language unlike to be really specific. And that is where my brains blocks! How can I get grasp of that thing, that &#8216;lil&#8217; language? It might be a personal problem I have because of the nature of my profession as a consultant: I switch contexts often, and&#8230; well I can only hope that it is 1:designed, 2: designed considering practices, rules and well established&#8230; did I say patterns?</p>
<p>&nbsp;</p>
<h3>P for Patterns :</h3>
<p>Another way of providing a solution to the problem of generality/variability is use a catalogue of non-formal generalization of recurring solutions to recurrent problems that provide a rich knowledge base of experience about tackling the kind of problem. Being of non-formal nature means that patterns aren&#8217;t provided as a framework but rather as a set of vocabulary and description that has its power in being adaptive&nbsp; and flexible. In my own experience, what I found particularly interesting when working with code that uses patterns is the way they communicate intent. If I find &#8220;Strategy&#8221; postfix I start searching for the other parts of the patterns and then start building on that. Providing this shared vocabulary helps me getting operational quite fast and help me scan code faster in a more &#8220;visual&#8221; way.</p>
<p>The good thing also about patterns is that I am still playing under the rules of my preferred hosting language. I know very well doing two very important things with it: combining and abstraction. A programming language is a set primitives together with a way to combine them and a mechanism for abstraction. What about my lil DSL? well it depends&#8230; Did I make sure to break any host language logic in there? Did I fight the intuitive nice &#8220;.&#8221;? Or did I decide that to implement my DSL for scratch? A programming language without means of abstraction results inevitably in long flat copy/paste configurations files and please don&#8217;t argue with me about their maintainability. What is the problem? The problem is that I am not a programming language designer, and to create a programming language no matter how simple and small it is, you need to have programming language design skills, so do you?</p>
<h3>Abstraction and Communication for People:</h3>
<p>Something that really drew my attention in functional programming languages like Haskell is their solid formal abstractions used for expressing computational patterns. These abstractions are packaged into a framework, and have a clear identity defined by a set of rules and are useable whenever semantics match. Take monads for example. It doesn&#8217;t matter if you are working with state, a database, the web, the screen or a robitic arm: you just use the do notation. The do notation in Haskell is a convenient way of working with a sound abstraction that is <a href="http://en.wikipedia.org/wiki/Monads_in_functional_programming">THE MONAD</a>. And all what you need to do for your framework is to verify that you satisfy the Monad laws and then you can safely use that syntax for it. This sharing of well identified semantics of the abstraction help developers reuse a well established mental model. LinQ syntax is the same, the dot &#8220;.&#8221; operator is the same, F#&#8217;s&nbsp; &#8220;|&gt;&#8221; operator is the same and examples are a lot. And I tend to prefer these kind of abstractions as they don&#8217;t sacrifice readability for developers for &#8220;readability&#8221; for users. I guess they have both the communicative property of Design Patterns yet they are formal and are offered as a concrete framework. Then of course you can name them DSLs, if you insist :) .</p>
<p>Now, if you are from the functional programming camp, and you have been doing embedded domain specific language using Lisp or Haskell for long time, then I apologize for wasting your time. I know you guys know best about doing abstractions, and you have lessons to tell if we&#8217;d only listen. And for those interested in some examples in EDSLs from the functional world, <a href="http://www.amazon.com/Haskell-School-Expression-Functional-Programming/dp/0521644089/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1238371080&amp;sr=1-1">Paul Hudak goes through the design of a language for reactive animation in his book</a>, <a href="http://augustss.blogspot.com/">Lennart Augustsson</a> discussed EDSLs in Haskell on his blog.</p>
<h3>Conclusion</h3>
<p>Though an attractive option of abstraction, DSLs trade off readability for developers for &#8220;potential&#8221; readability of users. Haskell monads, F#&#8217;s &#8220;|&gt;&#8221; operator and LinQ are examples of sound formal abstraction that can be offered as frameworks (code). These abstractions can save developers time being in a form of a recurring pattern that can be used in different contexts that match semantically, thus reusing developers&#8217; understanding of the abstraction&#8217;s mental model. </p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2009/03/29/abstraction-for-people-configurations-patterns-dsls-and-monads/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You&#8217;ve got 100 pages to convince me of your shiny language!</title>
		<link>http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/</link>
		<comments>http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 20:42:37 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[Methodologies]]></category>
		<category><![CDATA[Multi-Paradigm Design]]></category>
		<category><![CDATA[Multi-languages projects]]></category>
		<category><![CDATA[Paradigm Oriented Programming Language]]></category>
		<category><![CDATA[Polyglot Programming]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/</guid>
		<description><![CDATA[ In the rapidly spanning world of programming languages, I find myself buying and reading a lot of books about new and old programming languages. There are a few interesting concepts in each language, and if you think about employing more than one language in your projects then you better know about the existence of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/01/dsc-01501.jpg"><img style="border-right: 0px; border-top: 0px; margin: 0px 10px 5px 0px; border-left: 0px; border-bottom: 0px" height="322" alt="DSC_0150-" src="http://sadekdrobi.com/wp-content/uploads/2009/01/dsc-0150-thumb1.jpg" width="470" align="left" border="0"></a> In the rapidly spanning world of programming languages, I find myself buying and reading a lot of books about new and old programming languages. There are a few interesting concepts in each language, and if you think about employing more than one language in your projects then you better know about the existence of these concepts (see <a href="http://www.infoq.com/articles/paradigm-based-polyglot-prog">Paradigm based Polyglot Programming</a>).
<p>One thing that annoys me though about most programming language books is how raw they often are.</p>
<p><span id="more-575"></span></p>
<p>&nbsp; Probably constrained by time, authors and book teams seem to invest less on editorial stuff and teaching methodology and more on explaining details of technical and behind the scenes stuff. This often results in more manual-like books where you have a great wealth of material that you are not able to exploit anyway because of, well, lack of time. I am not sure I can invest time in reading 500+ manual of a new, or at least non mainstream, language that I might decide not to use by the end.&nbsp;
<p>I am not saying here that technical and behind the scene stuff does not matter, quite the opposite. I just think that manual, important it is, should not be the introduction to the programming language. A rather 100 to 200 pages brief book that is carefully edited to introduce paradigm, concepts, and strengths of the programming language is a more attractive choice , accompanied with a wordy but well organized reference book with examples and more in-depth explanation of language features. I guess this is a more pragmatic approach to programming language learning in the presence of WWW and Google search.
<p>PS: I personally find <a href="http://www.amazon.com/Haskell-School-Expression-Functional-Programming/dp/0521644089/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1231187744&amp;sr=8-1">Paul Hudak&#8217;s Haskell book</a> a very good example of an enjoyable, brief, nicely and carefully edited programming language book. Also <a href="http://www.amazon.com/Programming-Lua-Second-Roberto-Ierusalimschy/dp/8590379825/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1231187997&amp;sr=1-1">LUA&#8217;s programming book</a> is nicely done.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Obsev:: Mutability is addictive like drugs, Mutation can become a cancer!</title>
		<link>http://sadekdrobi.com/2008/03/09/obsev-mutability-is-addictive-like-drugs-mutation-can-become-a-cancer/</link>
		<comments>http://sadekdrobi.com/2008/03/09/obsev-mutability-is-addictive-like-drugs-mutation-can-become-a-cancer/#comments</comments>
		<pubDate>Sun, 09 Mar 2008 23:51:46 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Decipline]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Mutability]]></category>
		<category><![CDATA[Paradigm Oriented Programming Language]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/03/08/obsev-mutability-is-addictive-like-drugs-mutation-can-become-a-cancer/</guid>
		<description><![CDATA[This is really crazy! 
The first time I got introduced to mutation, I had a bad feeling. How can x:=x+1 be logical at all?
It felt so unnatural, scary, or maybe like a hack. Then, because of society constrains, I got to forget the bad feeling about that. Well, my mind started to tolerate with counter-logic [...]]]></description>
			<content:encoded><![CDATA[<p>This is really crazy! </p>
<p>The first time I got introduced to mutation, I had a bad feeling. How can x:=x+1 be logical at all?</p>
<p>It felt so unnatural, scary, or maybe like a hack. Then, because of society constrains, I got to forget the bad feeling about that. Well, my mind started to tolerate with counter-logic logic. And that is how I became an enterprise developer. I am not sure how proud I am with this title anyway. I feel that tolerating and accepting the counter-logic logic is one, and most important one, of the prerequisite to this title.</p>
<p><span id="more-454"></span></p>
<p>Nowadays, I am working on a project that has to process a huge number of data to do calculations on it and produce results that make sense to the user. Performance is a constraint. And I decided this time to do it the right way, the way that I believe is right. The logical way.</p>
<p>I decided to the calculations with no mutable state. I wanted immutability to be my guarantee to safety. Mutability breaks logic, and so produces bugs. But I couldn&#8217;t imagine how hard this choice can be. You tend all the time to feel that it is easier to introduce a mutable object, mutable flags, temporary mutable containers inside loops. Imperative programming is so tempting. Just like drugs. It feels so strange and weird in the first time, but then, it becomes a habit, a bad one, and you can&#8217;t help but to break into it. Mutation and imperative programming is the simplest thing that work in some way.</p>
<p>Today, I am happy I almost finished the whole calculation logic I had to model ( and it is quite a complex one). And I am proud that I could resist introducing mutability in the algorithm. Yet, I did some experiments along the way to introduce just a bit of state, kind of just what I need to introduce faster one kind of calculation. This very small mutation just breaks it all. It just breaks the whole modularity of the algorithm, and just makes the whole calculation much less generic, and more importantly less maintainable and evolutive. Such a small mutation, like introducing a mutable flag, or a global variable, just breaks the whole logic of my calculation, and drives me far away from a good modular calculation, with a good design based on plain old principles of separation of concerns. It just makes impossible to go further with the implementation! It is like a cancer of code&#8230;</p>
<p>Now, after the discipline and the resistance to a mutable state, we are so happy with the resulting code that yet needs polishing, makes it very easy to parameter more calculations and so add more desired functionality to the program. And just for fun, we compared it to the same calculation done with imperative programming. It is much more concise, intention concealing, and as a result, surprisingly we paid no performance cost for a much more declarative code.</p>
<p>I owe a lot to Erik Meijer, Paul Hudak, Linq, and Haskell :)</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/03/09/obsev-mutability-is-addictive-like-drugs-mutation-can-become-a-cancer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Communicating Intent through Idiom and Paradigm Selection</title>
		<link>http://sadekdrobi.com/2008/02/15/communicating-intent-through-idiom-and-paradigm-selection/</link>
		<comments>http://sadekdrobi.com/2008/02/15/communicating-intent-through-idiom-and-paradigm-selection/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 20:44:59 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Paradigm Oriented Programming Language]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/02/15/communicating-intent-through-idiom-and-paradigm-selection/</guid>
		<description><![CDATA[What about using idioms and programming conventions as signals to achieve more readability and expressiveness? This is what Reg Braithwaite advocates for, suggesting that syntax or even paradigm choices can be a means to communicate the intent. 

http://www.infoq.com/news/2008/02/idioms-as-signals
Making code more readable and more explicit? Reg Braithwaite believes that correctly choosing programming idioms can be instrumental [...]]]></description>
			<content:encoded><![CDATA[<p>What about using idioms and programming conventions as signals to achieve more readability and expressiveness? This is what Reg Braithwaite advocates for, suggesting that syntax or even paradigm choices can be a means to communicate the intent. </p>
<p><span id="more-449"></span></p>
<p><a title="http://www.infoq.com/news/2008/02/idioms-as-signals" href="http://www.infoq.com/news/2008/02/idioms-as-signals">http://www.infoq.com/news/2008/02/idioms-as-signals</a></p>
<p>Making code more readable and more explicit? Reg Braithwaite believes that correctly choosing programming idioms can be instrumental for achieving that goal. He stresses that there are often several ways to get to the desired outcome and the choice should not be random. <a href="http://weblog.raganwald.com/2007/11/programming-conventions-as-signals.html">One should prefer the tool that signals in a most obvious way the intent of the piece of code that is being built</a>. Syntax choices, for instance, can bear useful information about code&#8217;s intent:</p>
<blockquote><p>Consider blocks in Ruby. Some people use do &#8230; end when the block needs multiple lines and { &#8230; } when it fits on one line. A popular (AFAIK) and superior idea is to use do..end and {&#8230;} to disambiguate between blocks that are executed chiefly for their side effects and blocks that are executed for their return values:</p>
<p>foo.map { |x|     <br /># I care about the result      <br />}      <br />foo.each do |x|      <br /># I care about the side effects      <br />end</p>
<p>The computer doesn&#8217;t care, of course, but it signals an extra piece of information, the fact that you are chiefly interested in side effects in one case and chiefly interested in the result in another case.</p>
</blockquote>
<p>Braithwaite believes that this approach is not limited to syntax idioms but can scale up to paradigms. In some languages, e.g. Ruby, &#8220;there are several entirely different philosophies the language supports.&#8221; This can be used as a means to declare intent by borrowing idioms from paradigms that correspond the best to what one is trying to achieve. </p>
<blockquote><p>By making functional things <i>look functional</i>, you clearly signal that you are performing a calculation strictly for the result. Using imperative syntax like for and while should be reserved for the times you need to mutate variables or cause other side effects. [&#8230;] Likewise, OO is a great paradigm&#8212;when you are modelling entities in the real world or when you need long-term persistent state. Languages like Ruby force you to use objects behind the scenes, your code shouldn&#8217;t <i>look</i> OO unless you are trying to signal your colleagues that there are entities involved.</p>
</blockquote>
<p>Even though it is obvious that, sometimes, the choice of paradigm may be imposed by performance requirements, using this kind of conventions, when possible, allows providing additional information to programmers thus making code more readable and more expressive. </p>
<p>Some argue that using undocumented and unvalidated conventions would only result in more confusion. Reg argues, however, that any project involves programming conventions of some kind, e.g &#8220;using Bang! method names to indicate state changes (sort vs. sort!)&#8221;, and that nothing prevents teams from documenting established conventions, if necessary. </p>
<p>What do you think about using idioms as signals and means to declare intent?</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/02/15/communicating-intent-through-idiom-and-paradigm-selection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OBSEV :: Java or C# do not fit as a host language for DSLs, Lua is a better alternative to use as an IL in a Meta programming System</title>
		<link>http://sadekdrobi.com/2007/07/29/java-or-c-do-not-fit-as-a-host-language-for-dsls-lua-is-a-better-alternative-to-use-as-an-il-in-a-meta-programming-system/</link>
		<comments>http://sadekdrobi.com/2007/07/29/java-or-c-do-not-fit-as-a-host-language-for-dsls-lua-is-a-better-alternative-to-use-as-an-il-in-a-meta-programming-system/#comments</comments>
		<pubDate>Sun, 29 Jul 2007 22:39:54 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[MPS]]></category>
		<category><![CDATA[Paradigm Oriented Programming Language]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2007/07/29/java-or-c-do-not-fit-as-a-host-language-for-dsls-lua-is-a-better-alternative-to-use-as-an-il-in-a-meta-programming-system/</guid>
		<description><![CDATA[Â 
Recently, Iâ€™ve been playing a lot with Meta programming System of JetBrains. I feel that it has a lot in common with my idea of Paradigm Oriented Programming. In the way that it defines the language by links, adjectives and things (i.e. dimensions) that form together an abstraction as a language for a certain domain.
The [...]]]></description>
			<content:encoded><![CDATA[<p>Â <a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/07/windowslivewriterjavaorcdonotfitasahostlanguagefordslslua-958dsc-00444.jpg"><img border="0" width="537" src="http://sadekdrobi.com/wp-content/uploads/2007/07/windowslivewriterjavaorcdonotfitasahostlanguagefordslslua-958dsc-0044-thumb2.jpg" height="358" style="border: 0px" /></a></p>
<p>Recently, Iâ€™ve been playing a lot with Meta programming System of <em>JetBrains</em>. I feel that it has a lot in common with my idea of <a href="http://sadekdrobi.com/2007/07/04/figure-and-ground-n-dimensioned-programming-language/">Paradigm Oriented Programming</a>. In the way that it defines the language by <em>links</em>, <em>adjectives</em> and <em>things</em> (i.e. <em>dimensions</em>) that form together an abstraction as a language for a certain domain.</p>
<p>The package comes with Java already implemented, that can be quite handy, as it makes it easy for us to embed languages and concepts inside Java. But there is something that bothers me here; does Java (or even C#) work as an IL, a basic flexible language that other designed DSL will be interpreted to? Actually I strongly doubt that. First of all Java syntax comes already with a lot of constrains, static typing, curly brackets and a lot of other imitations.</p>
<p>Another thing is that Java itself is already an implementation of an abstraction. That is OOP. And fitting everything into OOP will force our DSL to respect that style of programming and to be constrained by it. Java is so static, and neither flexible not dynamic enough to have DSLs built on it.</p>
<p>Fortunately JetBrainsâ€™s MPS is not exclusive for java. It rather can be used with any other programming language. Because what it does is to build a coherent structure of text with its grammar in a syntax tree. Then it allows text to be generated out of properties of the syntax.</p>
<p>I thought a lot about a language that can be flexible enough, so that we can build abstractions that can be easily interpreted and implemented into that languageâ€™s syntax. I guess Lua is a good candidate. I believe that the way it is built permits a lot of dynamism for implementing meta-systems and making them co-exist in a paradigm oriented programming (See OOP implementation in Lua).</p>
<p>I still see some improvements still can be added to it. But for now I see it a perfect fit as an intermediate language for my POP.</p>
<div class="redditbutton"><script type="text/javascript">reddit_url = 'http://sadekdrobi.com/2007/07/29/java-or-c-do-not-fit-as-a-host-language-for-dsls-lua-is-a-better-alternative-to-use-as-an-il-in-a-meta-programming-system/';</script><script src="http://reddit.com/button.js?t=2" type="text/javascript"></script></div>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2007/07/29/java-or-c-do-not-fit-as-a-host-language-for-dsls-lua-is-a-better-alternative-to-use-as-an-il-in-a-meta-programming-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Figure and Ground: N-Dimensioned Programming Language or a Paradigm Oriented Programming Language</title>
		<link>http://sadekdrobi.com/2007/07/04/figure-and-ground-n-dimensioned-programming-language/</link>
		<comments>http://sadekdrobi.com/2007/07/04/figure-and-ground-n-dimensioned-programming-language/#comments</comments>
		<pubDate>Wed, 04 Jul 2007 23:15:58 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Paradigm Oriented Programming Language]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2007/07/04/figure-and-ground-n-dimensioned-programming-language/</guid>
		<description><![CDATA[
Looking at paintings, they are often composed of a figure and a ground. The figure is usually what is more visible for the eye. Often the ground is less important as recognizing the shapeÂ is thought to beÂ satisfied by recognizing the figure.
Understanding the figure can be simpler due to its more concrete and explicit nature, but [...]]]></description>
			<content:encoded><![CDATA[<p><a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/07/windowslivewriterfigureandground-74bdsc-0282171.jpg"><img border="0" width="568" src="http://sadekdrobi.com/wp-content/uploads/2007/07/windowslivewriterfigureandground-74bdsc-0282-thumb131.jpg" height="378" style="border: 0px" /></a></p>
<p>Looking at paintings, they are often composed of a figure and a ground. The figure is usually what is more visible for the eye. Often the ground is less important as recognizing the shapeÂ is thought to beÂ satisfied by recognizing the figure.</p>
<p>Understanding the figure can be simpler due to its more concrete and explicit nature, but the vision can not be complete without the ground. I even guess that thinking about the ground as a result of drawing the figure is quite naive. I guess that the ground defines rules of the environment, and is present implicitly in the definition of the shape. The fact that these rules are implicit makes them harder to capture. And easily ignored.</p>
<p>If we think about Object Oriented Programming as a figure, then what is the ground? The ground should be the environment that allowed us to define this meta-System.</p>
<p>Thinking about OOP as a meta system, allows us to capture the meta-meta-system. How this meta-meta-system can be defined?</p>
<p>Well, If we look at objects, they are special <em>things</em> that fall in a <em>category </em>,things that fall in this category have special kind of <em>relationship</em>Â  called inheritance, this relationship is governed by <em>rules</em> of polymorphism. Also we can add <em>adjectives </em>to tag some special behavior on the methods and properties of these <em>things.</em></p>
<p>So far, I got <em>things that fall in a category, governed by rules applied to relationships . moreover methods and properties of these things can have adjectives that can add rules on their use.</em></p>
<p>Now, with such a meta-meta-system I can define another meta-system than OOP, say a hierarchical one, or maybe a system of connectors. These several meta-systems can co-exist exactly as several categories of things co-exist in real world.</p>
<p>Â A question that raises evidently here, is How do they co-exist? How do they inter-connect? The simple answer is : messages&#8230; The problem of the integration of different types of paradigm had always existed, and had always been pushed out to frameworks to handle it. I believe that these frameworks of integration are themselves not well integrated in the language.Â Maybe including them in the language can make more natural?</p>
<p>Anyway my whole idea is a <em>paradigm oriented programming language,</em>Â where weÂ define dimensions, that we can use to define meta-systems. I see the idea is pretty faisable, might be more than a (things, category, relationship, rules, adjectives) even if I could imagine a lot of meta-systems built only on this 5 dimensioned programming language&#8230;</p>
<p>All what I am about in this blog post is ideas, far from being mature.It isÂ just a stream of ideas that I felt to persist somewhere. And here I did :)</p>
<div class="redditbutton"><script type="text/javascript">reddit_url = 'http://sadekdrobi.com/2007/07/04/figure-and-ground-n-dimensioned-programming-language/';</script><script src="http://reddit.com/button.js?t=2" type="text/javascript"></script></div>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2007/07/04/figure-and-ground-n-dimensioned-programming-language/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Everything is Not an &quot;object&quot;</title>
		<link>http://sadekdrobi.com/2007/06/10/everything-is-not-an-object/</link>
		<comments>http://sadekdrobi.com/2007/06/10/everything-is-not-an-object/#comments</comments>
		<pubDate>Sun, 10 Jun 2007 23:40:22 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Paradigm Oriented Programming Language]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2007/06/10/everything-is-not-an-object/</guid>
		<description><![CDATA[
I just streamed some fresh ideas I got on my Domain Specific Wiki about a termÂ I callÂ  &#8220;Thing Oriented Programming&#8221;.
Later I ll try toÂ gather them in a more readable essay that will be available both here and there.
]]></description>
			<content:encoded><![CDATA[<p><a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/06/windowslivewritereverythingisnotanobject-1778dsc-001141.jpg"><img border="0" width="579" src="http://sadekdrobi.com/wp-content/uploads/2007/06/windowslivewritereverythingisnotanobject-1778dsc-0011-thumb21.jpg" height="388" style="border: 0px" /></a></p>
<p>I just streamed some fresh ideas I got on my <a href="http://www.domainspecific.org/wiki/">Domain Specific Wiki</a> about a termÂ I callÂ  &#8220;Thing Oriented Programming&#8221;.<br />
Later I ll try toÂ gather them in a more readable essay that will be available both here and there.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2007/06/10/everything-is-not-an-object/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
