<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>The Go Programming Language (by Google)</title>
		<link>http://www.allegro.cc/forums/view/602162</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 18 Nov 2009 06:33:24 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Project&#39;s <a href="http://golang.org/">main page</a></p><p>From what I understand they are trying to combine the speed of development of a dynamic language with the performance and security of a compiled language.</p><p>So... I wonder how long before Allegro gets ported to Go? <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Samuel Henderson)</author>
		<pubDate>Wed, 11 Nov 2009 19:22:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Go is not a dynamic language. It is a statically and strongly typed language. The dynamic part is explicitly programmed by the programmer by using interface casts like in Java.</p><p>Personally, I don&#39;t understand what&#39;s the fuss. </p><p>Slashdot says &quot;Parallelism is emphasized in Go&#39;s design. The language introduces the concept of &#39;goroutines&#39; which are executed concurrently&quot;, but if you look at the documentation, goroutines are nothing more than threads and channels are nothing more than synchronized data queues...big deal. I can do a synchronized queue in C++ with very little effort. Example:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;pthread.h&gt;</span>
<span class="number">  2</span><span class="p">#include &lt;deque&gt;</span>
<span class="number">  3</span>
<span class="number">  4</span><span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">class</span> T&gt; <span class="k1">class</span> Queue <span class="k2">{</span>
<span class="number">  5</span>public:
<span class="number">  6</span>    Queue<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  7</span>        pthread_mutex_create<span class="k2">(</span><span class="k3">&amp;</span>m_mutex<span class="k2">)</span><span class="k2">;</span>
<span class="number">  8</span>        pthread_sem_create<span class="k2">(</span><span class="k3">&amp;</span>m_semaphore, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>    <span class="k2">}</span>
<span class="number"> 10</span>
<span class="number"> 11</span>    ~Queue<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 12</span>        pthread_mutex_destroy<span class="k2">(</span><span class="k3">&amp;</span>m_mutex<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>        pthread_sem_destroy<span class="k2">(</span><span class="k3">&amp;</span>m_semaphore<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <span class="k2">}</span>
<span class="number"> 15</span>
<span class="number"> 16</span>    T get<span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>        sem_wait<span class="k2">(</span><span class="k3">&amp;</span>m_semaphore<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>        pthread_mutex_lock<span class="k2">(</span><span class="k3">&amp;</span>m_mutex<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>        T result <span class="k3">=</span> m_data.front<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>        m_data.pop_front<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 21</span>        pthread_mutex_unlock<span class="k2">(</span><span class="k3">&amp;</span>m_mutex<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 22</span>        <span class="k1">return</span> result<span class="k2">;</span>
<span class="number"> 23</span>    <span class="k2">}</span>
<span class="number"> 24</span>
<span class="number"> 25</span>    <span class="k1">void</span> put<span class="k2">(</span>T item<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 26</span>        pthread_mutex_lock<span class="k2">(</span><span class="k3">&amp;</span>m_mutex<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>        m_data.push_back<span class="k2">(</span>item<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>        pthread_mutex_unlock<span class="k2">(</span><span class="k3">&amp;</span>m_mutex<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>        sem_post<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span>    <span class="k2">}</span>
<span class="number"> 31</span>
<span class="number"> 32</span>private:
<span class="number"> 33</span>    sem_t m_semaphore<span class="k2">;</span>
<span class="number"> 34</span>    pthread_mutex_t m_mutex<span class="k2">;</span>
<span class="number"> 35</span>    std::deque<span class="k3">&lt;</span>T&gt; m_data<span class="k2">;</span>
<span class="number"> 36</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

The interface decoupling from the class is a nice feature, but I can do with with C++ as well, with very little coding, using duck typing. For example:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> IBuffer <span class="k2">{</span>
<span class="number">  2</span>public:
<span class="number">  3</span>    <span class="k1">virtual</span> <span class="k1">void</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_642.html" target="_blank">read</a><span class="k2">(</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  4</span>    <span class="k1">virtual</span> <span class="k1">void</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_866.html" target="_blank">write</a><span class="k2">(</span><span class="k2">)</span> <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number">  5</span><span class="k2">}</span><span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span><span class="k1">template</span> <span class="k3">&lt;</span><span class="k1">class</span> T&gt; <span class="k1">class</span> Buffer <span class="k2">:</span> <span class="k1">public</span> IBuffer <span class="k2">{</span>
<span class="number">  8</span>public:
<span class="number">  9</span>    Buffer<span class="k2">(</span>T <span class="k3">*</span>object<span class="k2">)</span> <span class="k2">:</span> m_object<span class="k2">(</span>object<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>    <span class="k2">}</span>
<span class="number"> 11</span>
<span class="number"> 12</span>    <span class="k1">void</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_642.html" target="_blank">read</a><span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 13</span>        m_object-&gt;read<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>    <span class="k2">}</span>
<span class="number"> 15</span>
<span class="number"> 16</span>    <span class="k1">void</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_866.html" target="_blank">write</a><span class="k2">(</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>        m_object-&gt;write<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>    <span class="k2">}</span>
<span class="number"> 19</span>
<span class="number"> 20</span>private:
<span class="number"> 21</span>    T <span class="k3">*</span>m_object<span class="k2">;</span>
<span class="number"> 22</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>

What else is there? nothing much, really. </p><p>Go does not have templates, so writing any compile-time safe reusable code that has minimal performance is not possible.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (axilmar)</author>
		<pubDate>Wed, 11 Nov 2009 20:35:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837233#target">Samuel Henderson</a> said:</div><div class="quote"><p>... they are trying to combine the speed of development of a dynamic language with the performance...</p></div></div><p>

I didn&#39;t say they were <i>actually</i> making a dynamic language ... but rather a language that <i>feels</i> like one.</p><p>I still think it will be interesting to see how much momentum this gains...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Samuel Henderson)</author>
		<pubDate>Wed, 11 Nov 2009 21:36:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Go looks like a crippled version of D with bizarre syntax. In fact, it looks like D from like 5 years ago (D started out with no templates too) with bizarre syntax.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Wed, 11 Nov 2009 21:48:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It sounds interesting to me. I&#39;d like to see it take off. Hopefully the language improves and the toolchain stabilizes. I&#39;m anxious to try it, but don&#39;t have access to a Linux system right now<span class="ref"><sup>[<a href="#">1</a>]</sup></span>... <img src="http://www.allegro.cc/forums/smileys/sad.gif" alt=":(" /></p><p><i>** EDIT </i></p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p><span class="source-code">package main</span></p></div></div><p>

I&#39;ve already got two problems with the language. Number one, it&#39;s using packages, instead of namespaces. I find namespaces, as implemented in C# (and I guess .NET) work a lot better than packages.</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">namespace</span> identifier
<span class="k2">{</span>
    <span class="c">// code.</span>

    <span class="k1">namespace</span> identifier
    <span class="k2">{</span>
        <span class="c">// code.</span>
    <span class="k2">}</span>

    <span class="c">// code.</span>
<span class="k2">}</span>
</pre></div></div><p>

The structuring is obvious in the code. It&#39;s hierarchical. Also, the <span class="source-code">package</span> declaration should have to end in a semi-colon (<span class="source-code"><span class="k2">;</span></span>). <img src="http://www.allegro.cc/forums/smileys/angry.gif" alt="&gt;:(" /></p><p><i>** EDIT **</i></p><p>Now that I&#39;ve seen the first two example programs in the tutorial, I don&#39;t really care for the syntax of the language. It seems too disorganized and loose. Semi-colons are optional, variable types are declared after the name, etc. Not my dream language. I might use it if it becomes stable enough, but I don&#39;t see it becoming my favorite language.
</p><div class="ref-block"><h2>References</h2><ol><li>Stupid FSCKING 1and1&#39;s Linux images have crippled software repositories and I&#39;ve been unsuccessful in switching to official repositories...</li></ol></div></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Wed, 11 Nov 2009 21:51:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Parentheses around if statements are optional, but curly brackets for the block are required. Personally, I&#39;ve never had grief with the parentheses, but being forced to use curly brackets bloats the code.</p><p>Based on that, I am going to assume the designer is making another Java-like language. By that I mean a language which arbitrarily restricts the code for &quot;best practices&quot;. We are supposed to be giving <i>more</i> control to programmers, not less. Java was a step backwards from C++ in my mind, even with all of its modern features. Think of those cars that steer themselves during an accident. Imagine if they didn&#39;t have the override feature. Do you really want to trust your life to a computer? In this case, I&#39;m fine with trusting the compiler for most things, but I want an <i>override</i>.</p><p>C# is much more the language I prefer. It has the feature describe in the OP; being dynamic yet compiled. It&#39;s loaded with features, a nice set of standard libraries, and best of all provides that all essential override in case of accident. It is a shame C# is VM based. It sure does run fast, and pretty much every Windows system has .NET on it by now (and Linux has Mono). Still, I consider that a major flaw.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Wed, 11 Nov 2009 22:32:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>At first, I was repulsed. But after taking another look at it, there are a lot of things that I like about it.</p><p>I like that channels are first-class citizens. I tried out Microsoft&#39;s Axum for that very reason.</p><p>I also like the dynamic feel. It seems like the dynamism you get from template metaprogramming in C++ but without the brittle megastructure required to get it going.</p><p>The thing I am most happy to see is that interfaces are looser than most static languages. Managing that boilerplate stuff has always seemed like a painful waste of time to me, and it&#39;s only useful as long as everything plays nice.</p><p>It&#39;s an interesting language, and definitely Google-esque. You can really see the influence of languages like Newsqueak, Java, and JavaScript.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kibiz0r)</author>
		<pubDate>Wed, 11 Nov 2009 22:39:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The involvement of Rob Pike and Ken Thompson alone makes it worth a longer glance than most new languages. I only looked briefly yesterday, but it could be quite nice for a certain niche.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837237#target">axilmar</a> said:</div><div class="quote"><p>
goroutines are nothing more than threads and channels are nothing more than synchronized data queues...big deal
</p></div></div><p>

Actually, goroutines are green threads, so you can have a lot more of them before running out of memory, as compared to OS threads.  Which is of course not new, but is a feature which works best when its natively supported by the compiler/runtime rather than hacked on. Further, programming languages are not about who came up with what feature first, but how the features combine (or not combine).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Thu, 12 Nov 2009 02:28:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837260#target">Billybob</a> said:</div><div class="quote"><p>By that I mean a language which arbitrarily restricts the code for &quot;best practices&quot;. We are supposed to be giving more control to programmers, not less. Java was a step backwards from C++ in my mind, even with all of its modern features</p></div></div><p>

You should try Common Lisp. As I know, you can customize nearly everything to your needs. Or Assembler <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> Maximum control.</p><p>But if it&#39;s best practise, why not use it? No one produces perfect code. Especially when the project is getting bigger. A good amount of rules helps.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Thu, 12 Nov 2009 03:00:07 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837328#target">Martin Kalbfuß</a> said:</div><div class="quote"><p>But if it&#39;s best practise, why not use it?</p></div></div><p>
Because:
</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>No one produces perfect code.</p></div></div><p>
Do you trust the car makers to have a perfect piloting system? Even if they did, why <i>not</i> have the override option?</p><p>I guess what it all comes down to is freedom; the freedom to choose my own best practices rather than follow blindly the ideas of another.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>A good amount of rules helps.</p></div></div><p>
I totally agree, but the people writing the code should choose the rules, not some skanky compiler. I will reference C# again as a fair example. The compiler generally does not enforce best practices with errors. The C# language specification, however, comes with a list of best practices, including how to space code. Visual Studio will automatically do the specified code spacing, but I can override it any time I wish.</p><p>Perhaps it would be nice if compilers could be loaded with sets of custom rules, instead of having a fixed set.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Thu, 12 Nov 2009 03:15:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The ada gnat compiler has such a tool.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Martin Kalbfuß)</author>
		<pubDate>Thu, 12 Nov 2009 03:27:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837260#target">Billybob</a> said:</div><div class="quote"><p>
It is a shame C# is VM based. It sure does run fast, and pretty much every Windows system has .NET on it by now (and Linux has Mono). Still, I consider that a major flaw. 
</p></div></div><p>
It does impact performance, but there are HUGE advantages to such a model; to name a few:<br />- Proper reliable reflection<br />- Constructing classes, instances, etc. on-the-fly<br />- Access control that goes beyond what the OS has to offer<br />- Self-contained assemblies (just dump a DLL into your project, and the types it contains, including documentation, are available to the compiler and the IDE)</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837333#target">Billybob</a> said:</div><div class="quote"><p>
I guess what it all comes down to is freedom; the freedom to choose my own best practices rather than follow blindly the ideas of another.
</p></div></div><p>
This is all fine and dandy if it&#39;s a solo project, or if you are the lead and the rest of your team follows your guidelines. In other situations however, I&#39;m thankful for any sane rule that the language, the compiler, or the IDE, forces on me and my team.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837328#target">Martin Kalbfuß</a> said:</div><div class="quote"><p>
You should try Common Lisp. As I know, you can customize nearly everything to your needs.
</p></div></div><p>
Which is exactly why nobody uses it these days.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Thu, 12 Nov 2009 04:53:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Seems like another waste of space Google project to me. Aren&#39;t there enough programming languages in the world at the minute that do the job well.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Neil Walker)</author>
		<pubDate>Thu, 12 Nov 2009 04:56:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837366#target">Neil Walker</a> said:</div><div class="quote"><p>that do the job well.</p></div></div><p>
No.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Thu, 12 Nov 2009 04:57:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
that do the job well.
</p></div></div><p>
No.  (once more for added effect)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Thu, 12 Nov 2009 06:16:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I watched the talk.. rather half of the talk. The big names got my interest since everyone including google is involved. Then the introduction really got my attention: a simple grammar, orthogonal features, systems level language with GC, etc. It really seems like simplicity at its best! .. And then I saw the code itself.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Goalie Ca)</author>
		<pubDate>Thu, 12 Nov 2009 06:55:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>And??? The suspense is killing me!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc ( Arvidsson)</author>
		<pubDate>Thu, 12 Nov 2009 08:20:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
that do the job well
</p></div></div><p>

No. I think it&#39;s time for the next big language beyond C and C++.<br />One that:<br />executes just as fast or very close to C++.<br />makes programming easier and safer than C++.<br />still lets you mess things up if you want to.<br />lets the programmer use the full power of multiple cores easily and safely.</p><p>Anything more?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trezker)</author>
		<pubDate>Thu, 12 Nov 2009 09:44:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837363#target">Tobias Dammers</a> said:</div><div class="quote"><p>
It does impact performance, but there are HUGE advantages to such a model; to name a few:<br />- Proper reliable reflection<br />- Constructing classes, instances, etc. on-the-fly<br />- Access control that goes beyond what the OS has to offer<br />- Self-contained assemblies (just dump a DLL into your project, and the types it contains, including documentation, are available to the compiler and the IDE)
</p></div></div><p>

Why all these things cannot be done in a native programming language, i.e. a programming language with a virtual machine? I think that they are entirely possible.</p><p>-Reflection is a matter of storing type information in the binary.<br />-Constructing instances on the fly is already a capability.<br />-Constructing classes on the fly can be done, if reflection exists.<br />-Access control is a matter of type system: if it&#39;s strong enough and it can not be circumvented, as in C++, then any type of access control can be offered.<br />-self-contained assemblies is a matter of what meta-information you put in a DLL. Right now, C++ dlls are dumb raw binary blobs with the only information being the entry point table.</p><p>Why do all things things need a VM? they don&#39;t.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837375#target">Dustin Dettmer</a> said:</div><div class="quote"><p>
No. (once more for added effect)
</p></div></div><p>

NO!!!!! (more effect!)</p><p>One big disadvantage of decoupling interfaces and classes is the inability to send messages to self.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (axilmar)</author>
		<pubDate>Thu, 12 Nov 2009 16:35:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I didn&#39;t read the project page, so I&#39;m just going to ask here. Is Go&#39;s standard library named Ogle? <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (miran)</author>
		<pubDate>Thu, 12 Nov 2009 16:42:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think <a href="http://en.wikipedia.org/wiki/Go!_%28programming_language%29">Go!</a> is better (because of the exclamation mark).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (anonymous)</author>
		<pubDate>Thu, 12 Nov 2009 17:01:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837488#target">miran</a> said:</div><div class="quote"><p>Is Go&#39;s standard library named Ogle? <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /></p></div></div><p>
Apparently that&#39;s the proposed name of the debugger.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Thu, 12 Nov 2009 19:16:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>dynamic language would be sweet we could have a program program itself at run time.</p><p>this is posible now but not with out memory hacks.</p><p>and a module design where you have module prgraming module.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (piccolo)</author>
		<pubDate>Thu, 12 Nov 2009 19:22:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837492#target">anonymous</a> said:</div><div class="quote"><p>I think Go! [en.wikipedia.org] is better (because of the exclamation mark). </p></div></div><p>

Why would Google name it &quot;Go&quot;? Sure, it&#39;s catchy and has a similarity to their name but I can&#39;t even search for the board game Go. C was bad enough. However, not nearly as many people just start using the letter C when talking but Go is everywhere. I&#39;d prefer to search for something in another language rather than try to find it done in Go.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Ben Delacob)</author>
		<pubDate>Thu, 12 Nov 2009 20:34:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I agree, they could have named it &quot;G&quot; to stick with the tradition of single-character names (there&#39;s &quot;D&quot; obviously and there&#39;s &quot;F&quot;, not sure if there&#39;s &quot;E&quot;, but &quot;G&quot; would be the next one up).<br />Or Gortran.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Evert)</author>
		<pubDate>Thu, 12 Nov 2009 20:59:43 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837535#target">Ben Delacob</a> said:</div><div class="quote"><p>Why would Google name it &quot;Go&quot;? Sure, it&#39;s catchy and has a similarity to their name but I can&#39;t even search for the board game Go. C was bad enough. However, not nearly as many people just start using the letter C when talking but Go is everywhere. I&#39;d prefer to search for something in another language rather than try to find it done in Go.</p></div></div><p>
It&#39;s <i>Google</i>. They can add support into their engine for searching for their programming language. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /> C++ works and that&#39;s probably because of custom rules.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Thu, 12 Nov 2009 21:41:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So, what other thing does the term &quot;C++&quot; refer to thats as popular as the language? I would really like to know, as I see no reason why custom rules are needed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Vanneto)</author>
		<pubDate>Thu, 12 Nov 2009 22:49:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The &#39;+&#39; character is generally not something search engines support searching for. In fact, Google uses it to indicate that an exact match should be found for a word (i.e., <tt><i>+word</i></tt>). I seem to remember a time when searching for C++ didn&#39;t work well and you got millions of results with the letter C in them<span class="ref"><sup>[<a href="#">1</a>]</sup></span>. Searching for the Go programming language will probably require the word <i>programming</i> in the criteria, but should otherwise match (especially if they build in custom support for it).
</p><div class="ref-block"><h2>References</h2><ol><li>Or maybe I&#39;m crazy. Meh.</li></ol></div></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Thu, 12 Nov 2009 23:30:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837485#target">axilmar</a> said:</div><div class="quote"><p>Why do all things things need a VM? they don&#39;t.</p></div></div><p>

Well... everything aside, VM&#39;s are a way of the future because they will be the best performers. Pretty soon we&#39;ll have a mess heterogenous cores and systems and we will no longer be able to optimize binaries for a specific core configuration like we do now. Hell, they might even have different ISA&#39;s all together.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Goalie Ca)</author>
		<pubDate>Fri, 13 Nov 2009 00:26:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837588#target">Goalie Ca</a> said:</div><div class="quote"><p>VM&#39;s are a way of the future because they will be the best performers. </p></div></div><p>
Wait.. is this sarcasm?  I&#39;ve never heard someone say they liked VMs for their performance...</p><p>I imagine they would get worse as the cores start to multiply.</p><p><i>edit</i><br />Does Go have a VM?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Fri, 13 Nov 2009 03:29:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837588#target">Goalie Ca</a> said:</div><div class="quote"><p>Pretty soon we&#39;ll have a mess heterogenous cores and systems and we will no longer be able to optimize binaries for a specific core configuration like we do now. Hell, they might even have different ISA&#39;s all together.</p></div></div><p>

Given massively multi-core machines on every desk, the need for heterogeneous clusters would seem to <i>decrease</i>.</p><p>Go does not have a VM.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Fri, 13 Nov 2009 03:55:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837624#target">Peter Wang</a> said:</div><div class="quote"><p>Given massively multi-core machines on every desk, the need for heterogeneous clusters would seem to decrease.</p></div></div><p>

Well, consider that some of these cores in your desktop are for number crunching and others are for general processing. These number crunchers may or may not be on a GPU. Also, some cores will be optimized for power and others for performance. Point is, JIT&#39;ing gives a lot of advantages. Apple is already leading the way and use something like this for its graphics routines and they are switching away from GCC to LLVM for a reason.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Goalie Ca)</author>
		<pubDate>Fri, 13 Nov 2009 04:11:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So, when does Allegro get a Go port/binding? <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=":D" /></p><p>I&#39;m happy to help out on one.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kibiz0r)</author>
		<pubDate>Fri, 13 Nov 2009 05:12:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Doesn&#39;t this just make you want to invent a language called Stop?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Fri, 13 Nov 2009 05:15:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837660#target">Kibiz0r</a> said:</div><div class="quote"><p>
So, when does Allegro get a Go port/binding? 
</p></div></div><p>

I will do hello world on the weekend, and you can do the rest <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /><br /><a href="http://code.google.com/p/go/source/browse/misc/cgo/gmp/gmp.go?r=release">http://code.google.com/p/go/source/browse/misc/cgo/gmp/gmp.go?r=release</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Fri, 13 Nov 2009 06:01:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Let me be the first to say: I don&#39;t care.</p><p>From what I&#39;ve seen this language isn&#39;t going to do anything for me that any existing language doesn&#39;t do already. I can only imagine that in spite of any useful features they MIGHT have that they&#39;ll make some other part deficient that works perfectly fine in another language.</p><p>Or maybe I just hate how everyone is always so fanatic about the latest greatest language for what seems to me to always end up unjustified. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p><tt>l</tt><tt>o</tt><tt>l</tt>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Sevalecan)</author>
		<pubDate>Fri, 13 Nov 2009 06:32:29 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837588#target">Goalie Ca</a> said:</div><div class="quote"><p>
Well... everything aside, VMs are a way of the future because they will be the best performers. Pretty soon we&#39;ll have a mess heterogeneous cores and systems and we will no longer be able to optimize binaries for a specific core configuration like we do now.
</p></div></div><p>

That&#39;s only valid for situations where vector processing is required. Most algorithms cannot be parallelized, so the need for a VM is minimal, if non existent. Parallelization of vector data can already be achieved optimally by using CUDA or OpenCL or whatever language exists that is complementary to C for this purpose.</p><p>The real problem is dependency management. I&#39;d rather have my application not have any external dependencies, i.e. be a single executable, rather than not being optimized 100% for the target platform. If operating systems come with VMs preloaded or manage automatically VMs, then I am ok with it. This happens as we speak with operating systems that run in a virtual environment; you may also consider x86 assembly as the bytecode for x86 code (since each CPU decodes x86 differently to its internal real assembly language).</p><p>If we come to a situation you describe, then operating systems will have a VM installed by default, so the problem of managing the VM dependencies will go away.</p><p>Another solution would be an automated dependency manager (that does not interact with the user i.e. it discovers new versions and dependencies automatically, and installs updates automatically).</p><p>And then, there are real time applications. No VM could possibly exist for them, because their execution times should be predictable.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (axilmar)</author>
		<pubDate>Fri, 13 Nov 2009 20:46:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/837676#target">Peter Wang</a> said:</div><div class="quote"><p>I will do hello world on the weekend, and you can do the rest <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /><br /><a href="http://code.google.com/p/go/source/browse/misc/cgo/gmp/gmp.go?r=release">http://code.google.com/p/go/source/browse/misc/cgo/gmp/gmp.go?r=release</a></p></div></div><p>
Sounds good, I&#39;ll get an SVN set up.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kibiz0r)</author>
		<pubDate>Fri, 13 Nov 2009 22:35:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There&#39;s a couple of hurdles right now. First, the C binding program doesn&#39;t understand opaque types, e.g. typedef struct ALLEGRO_BITMAP ALLEGRO_BITMAP;, which we use a lot of. There&#39;s a patch in the bug tracker (#126).</p><p>More importantly, Allegro uses thread-local storage heavily and Go may multiplex goroutines onto its thread pool as it likes. Allegro will be unusable until there is a way to pin goroutines to specific threads, or something like that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Sat, 14 Nov 2009 04:47:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Looks like some <span class="cuss"><span>bastard</span></span>ized Java/C++/whatever-else hybrid.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Sat, 14 Nov 2009 07:48:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Turns out we can pin goroutines to OS threads. Attached the start of a binding (place in go/misc/cgo). I probably won&#39;t work on it more but feel free to pick it up if you like.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Sun, 15 Nov 2009 09:51:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838099#target">Peter Wang</a> said:</div><div class="quote"><p>Attached the start of a binding (place in go/misc/cgo).</p></div></div><p>
Did you mean to attach it to your post? Cuz it definitely isn&#39;t in the A5 repo.</p><p>I just made a repo for this at <a href="http://svn.lessthanthree.vg/allegro_go">http://svn.lessthanthree.vg/allegro_go</a>. You have commit access, PMing you your pass.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kibiz0r)</author>
		<pubDate>Sun, 15 Nov 2009 11:10:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Attached for real now.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Sun, 15 Nov 2009 12:09:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Haven&#39;t looked too deeply into it, but it appears the goal is to make a language that is as comfortable for the programmer as C# or Java (or even more comfortable), while still being a fully compiled language suitable for writing system-level code.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Tobias Dammers)</author>
		<pubDate>Sun, 15 Nov 2009 21:48:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Perhaps what needs to happen is language designers need to realize that languages are just languages and should be officially implemented in virtual machines <i>and</i> native compilers, so the user is free to use whatever is most appropriate. Maybe it&#39;ll take designing a language with abstraction from the implementation in mind. Maybe that&#39;s Go, but maybe not.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Mon, 16 Nov 2009 07:39:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838243#target">bamccaig</a> said:</div><div class="quote"><p>
Perhaps what needs to happen is language designers need to realize that languages are just languages and should be officially implemented in virtual machines and native compilers,
</p></div></div><p>
Virtual machines and native compilers are orthogonal to each other. You probably know that Java and .NET have JIT (just-in-time) compilation but that compilation could just as easily take place before the process is invoked.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Mon, 16 Nov 2009 08:36:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, but it should only need to happen once. What&#39;s the point in going through the JIT process every time you run the program? If the program isn&#39;t changing then it should remain the same no matter how many times you JIT it so it might as well just stay compiled and just run natively.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Mon, 16 Nov 2009 09:45:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838251#target">bamccaig</a> said:</div><div class="quote"><p>If the program isn&#39;t changing then it should remain the same no matter how many times you JIT it so it might as well just stay compiled and just run natively.</p></div></div><p>
.NET caches JIT&#39;d binaries.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Mon, 16 Nov 2009 09:46:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>There&#39;d still be overhead in checking and loading the cache. Unnecessary overhead. It&#39;s a nice distribution model for average users, assuming the JIT is optimized for the platform, but that&#39;s no reason not to support straight to native compilation from the beginning.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Mon, 16 Nov 2009 09:59:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>LLVM is more fun. It will actually re/further-optimize the program as it runs, every time it runs. So as you use it, llvm learns how a given program is used, and optimizes for its environment. Its rather quite genius. And it does it with plain C/C++ code. It could also do the same for higher level languages if they supported LLVM (when ever I get around to mine, it will almost certainly support LLVM).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 16 Nov 2009 10:14:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Profiling doesn&#39;t come for free, though, and I don&#39;t think runtime optimisation is that useful for the majority of programs, which seem to be IO/user bound anyway.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Mon, 16 Nov 2009 10:21:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Of course thats just one mode. LLVM also supports regular compile/run scenarios.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Mon, 16 Nov 2009 10:22:04 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>JIT compilers/VMs supporting compilation straight to binary sort of ruin the whole idea in the first place. Compiling to CIL or bytecode allows to you run it anywhere with one binary.</p><p>Mono, though, does support taking a CIL binary and compiling it to native code (AoTC compilation), though, as expected, the output is very platform specific.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Mon, 16 Nov 2009 10:38:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, but if I want the high-level abstraction of C# and .NET with the performance of C or C++, I can&#39;t get it because C# and Java are implemented through virtual machines. There&#39;s no need for it. If I <b>know</b> I&#39;m only running the program on my machine there&#39;s no harm in compiling it right down to machine level. In fact, there&#39;s hopefully a performance gain.</p><p>What I&#39;m saying is that languages themselves shouldn&#39;t be limited to one runtime methodology. All languages should be able to be interpreted, compiled down to byte-code and JIT compiled, or compiled straight to machine level. There&#39;s no reason they can&#39;t. Eventually, they&#39;re executing code on the CPU one way or another. The only question is, how many layers are between the program and the CPU and what&#39;s the most optimal solution for a particular use case?</p><p>Languages are just a way to communicate the instructions to the computer. The implementation determines how the computer interprets those instructions and there&#39;s no reason a language should only be used with one type of implementation.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Mon, 16 Nov 2009 10:47:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838267#target">bamccaig</a> said:</div><div class="quote"><p>
Yes, but if I want the high-level abstraction of C# and .NET with the performance of C or C++, I can&#39;t get it because C# and Java are implemented through virtual machines.
</p></div></div><p>
What are you talking about? C# and Java are converted to native code eventually. A virtual machine is just a run-time. You normally use a run-time for C/C++, its called libc.</p><p>Anyway just look at the shootout numbers: <a href="http://shootout.alioth.debian.org/u64/summary.php">http://shootout.alioth.debian.org/u64/summary.php</a></p><p>Java is only 14% slower than g++ which isn&#39;t a heckovalot. Java&#39;s performance has been increasing over the past 10 years due to better compiler technology. This has nothing to do with using a VM.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Mon, 16 Nov 2009 10:55:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838267#target">bamccaig</a> said:</div><div class="quote"><p>All languages should be able to be interpreted, compiled down to byte-code and JIT compiled, or compiled straight to machine level. There&#39;s no reason they can&#39;t.
</p></div></div><p>

I don&#39;t understand what you are trying to say. Language implementors know this. It&#39;s just that some languages/features are easier to map to &quot;native&quot; code (itself a bit of a lie) than others.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Mon, 16 Nov 2009 10:59:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You act as if it&#39;s an unnecessary abstraction of the CPU/runtime. Do you also statically link your stuff, to prevent the dynamic-linking taking up precious time?</p><p>Right now, you can take any .NET (or java program) and run it mostly anyplace, no matter what system libraries, processor, etc. If you start allowing the compiler to produce machine-code output, you break this process. You also then have to do something about .NET itself (or, at least I assume, Java&#39;s standard library), seeing as how .NET is compiled to CIL and not native code (as far as I know, anyway).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Mon, 16 Nov 2009 11:02:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838268#target">kazzmir</a> said:</div><div class="quote"><p>A virtual machine is just a run-time. You normally use a run-time for C/C++, its called libc.</p></div></div><p>
I could be wrong, but I think you&#39;re confusing ambiguous terminology. The C run-time is, AFAIK, just a regular library that contains the C language implementation. Contrarily, Java&#39;s VM is a program that itself processes the Java program (originally, interpreting the byte-code, though now probably JIT compiling it; which it would seem still involves interpretation). One way or another, turning byte-codes into machine instructions.
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838269#target">Peter Wang</a> said:</div><div class="quote"><p>I don&#39;t understand what you are trying to say. Language implementors know this. It&#39;s just that some languages/features are easier to map to &quot;native&quot; code (itself a bit of a lie) than others.</p></div></div><p>
I&#39;m not suggesting that it&#39;s some ground breaking idea. Google&#39;s Go seemed to be partially justified as a &quot;dynamic&quot;-like language that compiles down to native code, but they could have instead just developed a native compiler for Java or C# or <i>Lua</i><span class="ref"><sup>[<a href="#">1</a>]</sup></span> (albeit, a new language might well have been a simpler undertaking). The language itself can be thought of independently of implementations (though they usually aren&#39;t).
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838270#target">BAF</a> said:</div><div class="quote"><p>You act as if it&#39;s an unnecessary abstraction of the CPU/runtime. Do you also statically link your stuff, to prevent the dynamic-linking taking up precious time?</p></div></div><p>
Dynamic linking is beneficial. It means I shouldn&#39;t have to rebuild my entire system when an integral library gets a minor update. The performance hit should be relatively minor (and more than likely, the virtual machines that .NET and Java run on probably have their own dynamic linking to do, so that&#39;s not exactly getting swapped out for something different).
</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838270#target">BAF</a> said:</div><div class="quote"><p>Right now, you can take any .NET (or java program) and run it mostly anyplace, no matter what system libraries, processor, etc. If you start allowing the compiler to produce machine-code output, you break this process. You also then have to do something about .NET itself (or, at least I assume, Java&#39;s standard library), seeing as how .NET is compiled to CIL and not native code (as far as I know, anyway).</p></div></div><p>
My point is, there&#39;s no technical reason C# has to be compiled to CIL. It could be compiled straight to machine code (as could the .NET CIL it uses) if that was desirable. I&#39;m not suggesting .NET starts building platform specifics into its builds. I&#39;m just saying that on top of the CIL route, Microsoft could implement a compiler that goes straight to native code (for when that&#39;s desirable). Considering .NET is mostly Windows only (Mono being the only notable exception I&#39;m aware of), the abstraction is almost questionable. It would make sense if the executables were actually normally used on other platforms, but that doesn&#39;t seem to be the case (though it is a worthwhile goal to work towards, Microsoft seems like the last organization that would want to)... <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p><div class="ref-block"><h2>References</h2><ol><li><tt>&lt;insert_arbitrary_language_here /&gt;</tt></li></ol></div></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Mon, 16 Nov 2009 11:32:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838272#target">bamccaig</a> said:</div><div class="quote"><p>
I could be wrong, but I think you&#39;re confusing ambiguous terminology. The C run-time is, AFAIK, just a regular library that contains the C language implementation. Contrarily, Java&#39;s VM is a program that itself processes the Java program (originally, interpreting the byte-code, though now probably JIT compiling it; which it would seem still involves interpretation).
</p></div></div><p>
The java vm is two things: a virtual machine and an interpreter/JIT compiler. You could in theory compile all your code directly to machine code but you would still need the VM to run it because things like memory allocation are handled by the VM, much like how malloc is inside libc.</p><p>Whether or not there is a tool to compile java directly to native code, I don&#39;t know. But the source is open so you could write it yourself.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Mon, 16 Nov 2009 11:42:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838273#target">kazzmir</a> said:</div><div class="quote"><p>You could in theory compile all your code directly to machine code but you would still need the VM to run it because things like memory allocation are handled by the VM, much like how malloc is inside libc.</p></div></div><p>
That&#39;s an implementation feature, not a language feature<span class="ref"><sup>[<a href="#">1</a>]</sup></span>. The whole thing <i>could</i> be compiled directly to machine code, though it would probably be non-trivial to do (you&#39;d need to generate appropriate memory allocation and management code). libc isn&#39;t a separate program like the Java VM is. It&#39;s part of your program when you link to it. The only reason it&#39;s separate is because there are advantages to dynamically linking.
</p><div class="ref-block"><h2>References</h2><ol><li>Though it might well be a language feature too, if it is it didn&#39;t <i>have</i> to be.</li></ol></div></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Mon, 16 Nov 2009 11:46:38 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can compile Java to native code, with gcj. (and other compilers, I&#39;m pretty sure)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Mon, 16 Nov 2009 12:41:00 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://www.dalkescientific.com/writings/diary/archive/2009/09/15/100000_tasklets.html">Stackless Python outperforms Google&#39;s Go.</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (axilmar)</author>
		<pubDate>Mon, 16 Nov 2009 16:59:47 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><a href="http://shootout.alioth.debian.org/u64q/benchmark.php?test=nbody&amp;lang=all&amp;box=1">So do most other languages.</a> Just as I said earlier, Go is like D from who knows how many years ago. And it doesn&#39;t matter that Go is in alpha state, so is D2. D2 is heck of a lot better now than Go is, imho. I for one, think that the interest in this language is 90% based on the fact that it is made by Google, for if it was anything else, people would be all over D/D2 preferentially over Go, as those 2 (especially D2) are far better than Go.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 16 Nov 2009 21:06:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Well I don&#39;t really care where the language comes from.</p><p>If D2 had been presented with a tech talk video like Go was I&#39;d have the same thoughts about it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Trezker)</author>
		<pubDate>Mon, 16 Nov 2009 21:21:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Google may be second only to Apple in the &quot;we can release a box of poo and people will still ogle over it&quot; department.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Mon, 16 Nov 2009 22:02:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Do you have your period, Matt ? ;-)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Mon, 16 Nov 2009 22:04:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838314#target">GullRaDriel</a> said:</div><div class="quote"><p>Do you have your period, Matt ? ;-)</p></div></div><p>

What? <img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (MiquelFire)</author>
		<pubDate>Mon, 16 Nov 2009 22:09:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838274#target">bamccaig</a> said:</div><div class="quote"><p>The whole thing could be compiled directly to machine code</p></div></div><p>
I agree with you, and as mentioned Java has a compiler that does so. The point I would make, and I think others are trying to make, is that it isn&#39;t necessary. A native binary would provide no significant speed improvement over a CIL binary. With .NET&#39;s cache, you don&#39;t even have the JIT overhead. You mentioned verification being a bottleneck, but that only requires a few, small comparison checks.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Mon, 16 Nov 2009 23:23:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838303#target">SiegeLord</a> said:</div><div class="quote"><p>I for one, think that the interest in this language is 90% based on the fact that it is made by Google</p></div></div><p>
I can&#39;t speak for others, but I am interested in this because it covers language topics I am very interested in, namely channels and non-conventional type systems. However, I probably wouldn&#39;t have found out about it if it wasn&#39;t made by Google.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kibiz0r)</author>
		<pubDate>Mon, 16 Nov 2009 23:30:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838303#target">SiegeLord</a> said:</div><div class="quote"><p>I for one, think that the interest in this language is 90% based on the fact that it is made by Google,</p></div></div><p>

For sure. But programming languages &quot;succeed&quot; for mainly non-technical reasons.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
for if it was anything else, people would be all over D/D2 preferentially over Go, as those 2 (especially D2) are far better than Go.
</p></div></div><p>

Erlang-style concurrency primitives (and implementation!) in a lightweight, imperative language is interesting to me. I don&#39;t think D provides that.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Tue, 17 Nov 2009 04:09:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838272#target">bamccaig</a> said:</div><div class="quote"><p>
It would make sense if the executables were actually normally used on other platforms, but that doesn&#39;t seem to be the case (though it is a worthwhile goal to work towards, Microsoft seems like the last organization that would want to)... <img src="http://www.allegro.cc/forums/smileys/rolleyes.gif" alt="::)" />
</p></div></div><p>

The executables can run on 32 or 64-bit Windows, Windows CE/Windows Mobile (generally on ARM cpus), XBox 360 (through XNA, IIRC it&#39;s still x86, but the system libraries are likely different). I think Microsoft has done it well, and so has Mono for the most part. It&#39;s nice being able to run VS-produced binaries on Linux, and vice versa. Oh, and being able to target stuff at .NET CF for Windows Mobile, and being able to run that binary directly on Windows (assuming no WM specific libraries are used).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Tue, 17 Nov 2009 10:11:57 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838367#target">Peter Wang</a> said:</div><div class="quote"><p>
For sure. But programming languages &quot;succeed&quot; for mainly non-technical reasons.
</p></div></div><p>
I am sure the posterity will appreciate us being blinded by marketing and then writing tons of software in a fundamentally flawed and inelegant language.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Erlang-style concurrency primitives (and implementation!) in a lightweight, imperative language is interesting to me. I don&#39;t think D provides that. 
</p></div></div><p>
The niceness of writing the small percentage of the program that can be parallelized using &#39;goroutines&#39; is outweighed by difficulty of writing the rest of it using the features (or lack thereof) that Go provides, in my opinion. While it is valid for one person in particular to strongly weigh the &#39;goroutines&#39; feature such that any language with it will be considered better any other language without it, I question how valid this is for the programming community at large.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Tue, 17 Nov 2009 11:05:56 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838457#target">BAF</a> said:</div><div class="quote"><p>The executables can run on 32 or 64-bit Windows...</p></div></div><p>
and Zune!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Tue, 17 Nov 2009 11:10:25 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838465#target">SiegeLord</a> said:</div><div class="quote"><p>I am sure the posterity will appreciate us being blinded by marketing and then writing tons of software in a fundamentally flawed and inelegant language.
</p></div></div><p>

Witness: ... any number of examples which I will not bring up, as it will just end up a flame war.</p><p>Don&#39;t get me wrong. Go definitely has the feel of &quot;worse is better&quot; about it, and I hope some of the warts will be fixed in time. It just seems to me that, for non-technical reasons, Go has a (still small) chance of gaining some sort of traction in the space that C and C++ usually play in. I don&#39;t think it&#39;s the worst thing that could happen.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Peter Wang)</author>
		<pubDate>Tue, 17 Nov 2009 12:01:30 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838476#target">Peter Wang</a> said:</div><div class="quote"><p>Don&#39;t get me wrong. Go definitely has the feel of &quot;worse is better&quot; about it, and I hope some of the warts will be fixed in time. It just seems to me that, for non-technical reasons, Go has a (still small) chance of gaining some sort of traction in the space that C and C++ usually play in. I don&#39;t think it&#39;s the worst thing that could happen.</p></div></div><p>
I love coding in new languages, when time permits. I do not know about other coders, but I have no problem coding in any particular language, even multiple ones at the same time (fun). They are all mostly C-lineage anyway, and the ones that are not have fun little features that make them a joy to use in moderation.</p><p>The more languages you use, the better you can decide which does a particular job effectively. So, Go might have unnatural backing, but does anyone really care?</p><p>Besides, no programming language these days is going to succeed on its own unless it contains a fundamental improvement on current practices. Beyond that it will need the backing of a major corporation to make any headway. It&#39;s like starting a new airline. You succeed only if your services are a major improvement on the current condition or you&#39;re a major corporation.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Billybob)</author>
		<pubDate>Tue, 17 Nov 2009 22:30:53 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/602162/838537#target">Billybob</a> said:</div><div class="quote"><p>
even multiple ones at the same time (fun)
</p></div></div><p>
I enjoy this too.  At first you do weird things like
</p><div class="source-code snippet"><div class="inner"><pre>vector<span class="k3">&lt;</span>string&gt; s<span class="k2">;</span>

<span class="k1">for</span><span class="k2">(</span>var itr <span class="k3">=</span> s.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> itr <span class="k3">!</span><span class="k3">=</span> s.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>itr<span class="k2">)</span>
</pre></div></div><p>
But eventually you learn to avoid the got&#39;ch&#39;yas.</p><p>I also find myself implementing cool features from one language in another.  Like split and combine from PHP in C++.
</p><div class="source-code snippet"><div class="inner"><pre>vector<span class="k3">&lt;</span>string&gt; explode<span class="k2">(</span><span class="k1">char</span> seperator, <span class="k1">const</span> string <span class="k3">&amp;</span>s<span class="k2">)</span><span class="k2">;</span>
string implode<span class="k2">(</span><span class="k1">char</span> seperator, <span class="k1">const</span> vector<span class="k3">&lt;</span>string&gt; <span class="k3">&amp;</span>ary<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
That alone makes parsing directory stuff a breeze.
</p><div class="source-code snippet"><div class="inner"><pre>v <span class="k3">=</span> explode<span class="k2">(</span><span class="s">'.'</span>, dir<span class="k2">)</span><span class="k2">;</span>

<span class="k1">if</span><span class="k2">(</span>v.size<span class="k2">(</span><span class="k2">)</span> <span class="k3">&gt;</span> <span class="n">1</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> v.back<span class="k2">(</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> <span class="s">"txt"</span><span class="k2">)</span>
  <span class="c">// the file ends in .txt!</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ImLeftFooted)</author>
		<pubDate>Wed, 18 Nov 2009 06:33:24 +0000</pubDate>
	</item>
</rss>
