<?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>Lojic Technologies Blog &#187; lisp</title>
	<atom:link href="http://lojic.com/blog/tag/lisp/feed/" rel="self" type="application/rss+xml" />
	<link>http://lojic.com/blog</link>
	<description></description>
	<lastBuildDate>Fri, 25 Nov 2011 20:12:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Programming Language Popularity &#8211; Part Four</title>
		<link>http://lojic.com/blog/2011/09/22/programming-language-popularity-part-four/</link>
		<comments>http://lojic.com/blog/2011/09/22/programming-language-popularity-part-four/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 15:37:07 +0000</pubDate>
		<dc:creator>Brian Adkins</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[arc]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scheme]]></category>
		<category><![CDATA[sml]]></category>

		<guid isPermaLink="false">http://lojic.com/blog/?p=866</guid>
		<description><![CDATA[I compiled some programming language popularity statistics in April 2009, October 2009 and October 2010 . Here&#8217;s an update for September 2011:
I made a number of Google searches of the forms below and summed the results (previous posts averaged the results):
"implemented in &#60;language&#62;"
  "written in &#60;language&#62;"
Naturally this is of very limited utility, and the [...]]]></description>
			<content:encoded><![CDATA[<p>I compiled some programming language popularity statistics in <a href="http://lojic.com/blog/2009/04/21/programming-language-popularity/">April 2009</a>, <a href="http://lojic.com/blog/2009/10/24/programming-language-popularity-part-two/">October 2009</a> and <a href="http://lojic.com/blog/2010/10/08/programming-language-popularity-%E2%80%93-part-three/">October 2010</a> . Here&#8217;s an update for September 2011:</p>
<p>I made a number of Google searches of the forms below and summed the results (previous posts averaged the results):</p>
<pre class="code">"implemented in &lt;language&gt;"
  "written in &lt;language&gt;"</pre>
<p>Naturally this is of very limited utility, and the numbers are only useful when comparing relatively within the same search since the number of results Google returns can vary greatly over time.<br />
<!-- use ML and SML --></p>
<table border="0">
<tbody>
<tr>
<th>Language</th>
<th style="text-align: left;">Total</th>
<th style="text-align: right;">Prev. Position</th>
<th style="text-align: right;"> Position Delta</th>
</tr>
<tr>
<td>C</td>
<td style="text-align: right;">10,360,000</td>
<td style="text-align: right;">2</td>
<td style="text-align: right;"><strong>1</strong></td>
</tr>
<tr>
<td>PHP</td>
<td style="text-align: right;">10,351,000</td>
<td style="text-align: right;">1</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>C++</td>
<td style="text-align: right;">6,495,000</td>
<td style="text-align: right;">3</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td>Python</td>
<td style="text-align: right;">5,759,000</td>
<td style="text-align: right;">5</td>
<td style="text-align: right;"><strong>1</strong></td>
</tr>
<tr>
<td>C#</td>
<td style="text-align: right;">5,335,000</td>
<td style="text-align: right;">4</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>&nbsp;</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Java</td>
<td style="text-align: right;">4,890,000</td>
<td style="text-align: right;">8</td>
<td style="text-align: right;"><strong>2</strong></td>
</tr>
<tr>
<td>Perl</td>
<td style="text-align: right;">3,702,000</td>
<td style="text-align: right;">6</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>JavaScript</td>
<td style="text-align: right;">3,077,000</td>
<td style="text-align: right;">7</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>Ruby</td>
<td style="text-align: right;">1,654,000</td>
<td style="text-align: right;">9</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td>Lisp Family<sup>1</sup></td>
<td style="text-align: right;">1,022,870</td>
<td style="text-align: right;">11</td>
<td style="text-align: right;"><strong>1</strong></td>
</tr>
<tr>
<td>&nbsp;</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>FORTRAN</td>
<td style="text-align: right;">975,600</td>
<td style="text-align: right;">10</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>Tcl</td>
<td style="text-align: right;">594,500</td>
<td style="text-align: right;">12</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td>Lisp</td>
<td style="text-align: right;">486,000</td>
<td style="text-align: right;">14</td>
<td style="text-align: right;"><strong>1</strong></td>
</tr>
<tr>
<td>Haskell</td>
<td style="text-align: right;">450,500</td>
<td style="text-align: right;">16</td>
<td style="text-align: right;"><strong>2</strong></td>
</tr>
<tr>
<td>Erlang</td>
<td style="text-align: right;">419,700</td>
<td style="text-align: right;">13</td>
<td style="text-align: right;">-2</td>
</tr>
<tr>
<td>&nbsp;</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Lua</td>
<td style="text-align: right;">367,100</td>
<td style="text-align: right;">18</td>
<td style="text-align: right;"><strong>2</strong></td>
</tr>
<tr>
<td>ML Family<sup>2</sup></td>
<td style="text-align: right;">348,400</td>
<td style="text-align: right;">17</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td>COBOL</td>
<td style="text-align: right;">308,270</td>
<td style="text-align: right;">15</td>
<td style="text-align: right;">-3</td>
</tr>
<tr>
<td>Common Lisp</td>
<td style="text-align: right;">254,900</td>
<td style="text-align: right;">19</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td>OCaml</td>
<td style="text-align: right;">240,300</td>
<td style="text-align: right;">21</td>
<td style="text-align: right;"><strong>1</strong></td>
</tr>
<tr>
<td>&nbsp;</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Prolog</td>
<td style="text-align: right;">224,000</td>
<td style="text-align: right;">20</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>Scala</td>
<td style="text-align: right;">203,400</td>
<td style="text-align: right;">23</td>
<td style="text-align: right;"><strong>1</strong></td>
</tr>
<tr>
<td>Scheme</td>
<td style="text-align: right;">184,700</td>
<td style="text-align: right;">22</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>Smalltalk</td>
<td style="text-align: right;">129,700</td>
<td style="text-align: right;">24</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td>Clojure</td>
<td style="text-align: right;">84,600</td>
<td style="text-align: right;">27</td>
<td style="text-align: right;"><strong>2</strong></td>
</tr>
<tr>
<td>&nbsp;</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>(S)ML<sup>3</sup></td>
<td style="text-align: right;">83,630</td>
<td style="text-align: right;">25</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>Forth</td>
<td style="text-align: right;">69,980</td>
<td style="text-align: right;">26</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>Caml</td>
<td style="text-align: right;">24,470</td>
<td style="text-align: right;">28</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td>Io</td>
<td style="text-align: right;">17,700</td>
<td style="text-align: right;">30</td>
<td style="text-align: right;"><strong>1</strong></td>
</tr>
<tr>
<td>Arc</td>
<td style="text-align: right;">12,670</td>
<td style="text-align: right;">29</td>
<td style="text-align: right;">-1</td>
</tr>
</tbody>
</table>
<p><sup>1</sup> combines Lisp, Scheme, Common Lisp, Arc &amp; Clojure<br />
<sup>2</sup> combines OCaml, (S)ML, Caml<br />
<sup>3</sup> summed separate searches for sml and ml</p>
]]></content:encoded>
			<wfw:commentRss>http://lojic.com/blog/2011/09/22/programming-language-popularity-part-four/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming Language Popularity – Part Three</title>
		<link>http://lojic.com/blog/2010/10/08/programming-language-popularity-%e2%80%93-part-three/</link>
		<comments>http://lojic.com/blog/2010/10/08/programming-language-popularity-%e2%80%93-part-three/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 20:30:00 +0000</pubDate>
		<dc:creator>Brian Adkins</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[arc]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scheme]]></category>
		<category><![CDATA[sml]]></category>

		<guid isPermaLink="false">http://lojic.com/blog/?p=823</guid>
		<description><![CDATA[I compiled some programming language popularity statistics in April 2009 and October 2009 . Here&#8217;s an update for October 2010:
I made a number of Google searches of the forms below and averaged the results:
"implemented in &#60;language&#62;"
  "written in &#60;language&#62;"
Naturally this is of very limited utility, and the numbers are only useful when comparing relatively [...]]]></description>
			<content:encoded><![CDATA[<p>I compiled some programming language popularity statistics in <a href="http://lojic.com/blog/2009/04/21/programming-language-popularity/">April 2009</a> and <a href="http://lojic.com/blog/2009/10/24/programming-language-popularity-part-two/">October 2009</a> . Here&#8217;s an update for October 2010:</p>
<p>I made a number of Google searches of the forms below and averaged the results:</p>
<pre class="code">"implemented in &lt;language&gt;"
  "written in &lt;language&gt;"</pre>
<p>Naturally this is of very limited utility, and the numbers are only useful when comparing relatively within one column since the number of results Google returns can vary greatly over time.<br />
<!-- use ML and SML --></p>
<table border="0">
<tbody>
<tr>
<th>Language</th>
<th style="text-align: right;">Apr 2009</th>
<th style="text-align: right;">Oct 2009</th>
<th style="text-align: right;">Oct 2010</th>
<th style="text-align: right;"> Position Delta</th>
</tr>
<tr>
<td>PHP</td>
<td style="text-align: right;">680,000</td>
<td style="text-align: right;">5,083,500</td>
<td style="text-align: right;">14,096,000</td>
<td style="text-align: right;">+3</td>
</tr>
<tr>
<td>C</td>
<td style="text-align: right;">1,905,500</td>
<td style="text-align: right;">16,975,000</td>
<td style="text-align: right;">9,675,000</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>C++</td>
<td style="text-align: right;">699,000</td>
<td style="text-align: right;">6,270,000</td>
<td style="text-align: right;">6,510,000</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td><strong>C#</strong></td>
<td style="text-align: right;">349,700</td>
<td style="text-align: right;">2,125,000</td>
<td style="text-align: right;">5,132,000</td>
<td style="text-align: right;"><strong>+4</strong></td>
</tr>
<tr>
<td>Python</td>
<td style="text-align: right;">396,000</td>
<td style="text-align: right;">3,407,000</td>
<td style="text-align: right;">5,114,500</td>
<td style="text-align: right;">+1</td>
</tr>
<tr>
<td>Perl</td>
<td style="text-align: right;">365,500</td>
<td style="text-align: right;">3,132,500</td>
<td style="text-align: right;">4,675,000</td>
<td style="text-align: right;">+1</td>
</tr>
<tr>
<td><strong>JavaScript</strong></td>
<td style="text-align: right;">102,700</td>
<td style="text-align: right;">1,163,000</td>
<td style="text-align: right;">2,120,000</td>
<td style="text-align: right;"><strong>+4</strong></td>
</tr>
<tr>
<td>Java</td>
<td style="text-align: right;">850,000</td>
<td style="text-align: right;">5,118,000</td>
<td style="text-align: right;">1,495,500</td>
<td style="text-align: right;">-5</td>
</tr>
<tr>
<td><strong>Ruby</strong></td>
<td style="text-align: right;">99,650</td>
<td style="text-align: right;">227,000</td>
<td style="text-align: right;">1,426,000</td>
<td style="text-align: right;"><strong>+13</strong></td>
</tr>
<tr>
<td>FORTRAN</td>
<td style="text-align: right;"></td>
<td style="text-align: right;">1,621,000</td>
<td style="text-align: right;">770,850</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td>Lisp Family<sup>1</sup></td>
<td style="text-align: right;">176,507</td>
<td style="text-align: right;">3,489,650</td>
<td style="text-align: right;">399,685</td>
<td style="text-align: right;">-6</td>
</tr>
<tr>
<td><strong>Tcl</strong></td>
<td style="text-align: right;">44,800</td>
<td style="text-align: right;">382,000</td>
<td style="text-align: right;">313,400</td>
<td style="text-align: right;"><strong>+5</strong></td>
</tr>
<tr>
<td><strong>Erlang</strong></td>
<td style="text-align: right;">22,285</td>
<td style="text-align: right;">161,700</td>
<td style="text-align: right;">188,800</td>
<td style="text-align: right;"><strong>+12</strong></td>
</tr>
<tr>
<td>Lisp</td>
<td style="text-align: right;">61,900</td>
<td style="text-align: right;">486,500</td>
<td style="text-align: right;">174,050</td>
<td style="text-align: right;">+1</td>
</tr>
<tr>
<td><strong>COBOL</strong></td>
<td style="text-align: right;"></td>
<td style="text-align: right;">247,300</td>
<td style="text-align: right;">166,435</td>
<td style="text-align: right;"><strong>+6</strong></td>
</tr>
<tr>
<td><strong>Haskell</strong></td>
<td style="text-align: right;">22,550</td>
<td style="text-align: right;">280,500</td>
<td style="text-align: right;">157,150</td>
<td style="text-align: right;"><strong>+4</strong></td>
</tr>
<tr>
<td>ML Family<sup>2</sup></td>
<td style="text-align: right;">29,062</td>
<td style="text-align: right;">1,003,800</td>
<td style="text-align: right;">149,005</td>
<td style="text-align: right;">-5</td>
</tr>
<tr>
<td><strong>Lua</strong></td>
<td style="text-align: right;">13,065</td>
<td style="text-align: right;">131,800</td>
<td style="text-align: right;">128,150</td>
<td style="text-align: right;"><strong>+9</strong></td>
</tr>
<tr>
<td>Common Lisp</td>
<td style="text-align: right;">20,600</td>
<td style="text-align: right;">554,500</td>
<td style="text-align: right;">112,750</td>
<td style="text-align: right;">-5</td>
</tr>
<tr>
<td>Prolog</td>
<td style="text-align: right;">17,750</td>
<td style="text-align: right;">390,500</td>
<td style="text-align: right;">100,000</td>
<td style="text-align: right;">-4</td>
</tr>
<tr>
<td>OCaml</td>
<td style="text-align: right;">22,000</td>
<td style="text-align: right;">343,500</td>
<td style="text-align: right;">99,050</td>
<td style="text-align: right;">-3</td>
</tr>
<tr>
<td>Scheme</td>
<td style="text-align: right;">86,450</td>
<td style="text-align: right;">2,100,000</td>
<td style="text-align: right;">82,650</td>
<td style="text-align: right;">-13</td>
</tr>
<tr>
<td><strong>Scala</strong></td>
<td style="text-align: right;">3,570</td>
<td style="text-align: right;">66,250</td>
<td style="text-align: right;">65,950</td>
<td style="text-align: right;"><strong>+6</strong></td>
</tr>
<tr>
<td>Smalltalk</td>
<td style="text-align: right;">9,105</td>
<td style="text-align: right;">187,500</td>
<td style="text-align: right;">56,950</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td>(S)ML<sup>3</sup></td>
<td style="text-align: right;">5,173</td>
<td style="text-align: right;">590,700</td>
<td style="text-align: right;">42,130</td>
<td style="text-align: right;">-12</td>
</tr>
<tr>
<td>Forth</td>
<td style="text-align: right;">6,465</td>
<td style="text-align: right;">146,450</td>
<td style="text-align: right;">25,880</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td>Clojure</td>
<td style="text-align: right;">782</td>
<td style="text-align: right;">62,200</td>
<td style="text-align: right;">23,525</td>
<td style="text-align: right;">+3</td>
</tr>
<tr>
<td>Caml</td>
<td style="text-align: right;">1,889</td>
<td style="text-align: right;">69,600</td>
<td style="text-align: right;">7,825</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td>Arc</td>
<td style="text-align: right;">6,775</td>
<td style="text-align: right;">286,500</td>
<td style="text-align: right;">6,710</td>
<td style="text-align: right;">-10</td>
</tr>
<tr>
<td>Io</td>
<td style="text-align: right;">1,760</td>
<td style="text-align: right;">198,500</td>
<td style="text-align: right;">3,025</td>
<td style="text-align: right;">-7</td>
</tr>
</tbody>
</table>
<p><sup>1</sup> combines Lisp, Scheme, Common Lisp, Arc &amp; Clojure<br />
<sup>2</sup> combines OCaml, (S)ML, Caml<br />
<sup>3</sup> summed separate searches for sml and ml</p>
]]></content:encoded>
			<wfw:commentRss>http://lojic.com/blog/2010/10/08/programming-language-popularity-%e2%80%93-part-three/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programming Language Popularity &#8211; Part Two</title>
		<link>http://lojic.com/blog/2009/10/24/programming-language-popularity-part-two/</link>
		<comments>http://lojic.com/blog/2009/10/24/programming-language-popularity-part-two/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 15:23:23 +0000</pubDate>
		<dc:creator>Brian Adkins</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[arc]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[forth]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[io]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[ocaml]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[scheme]]></category>
		<category><![CDATA[smalltalk]]></category>
		<category><![CDATA[sml]]></category>
		<category><![CDATA[tcl]]></category>

		<guid isPermaLink="false">http://lojic.com/blog/?p=781</guid>
		<description><![CDATA[I compiled some programming language popularity statistics in April and mentioned I&#8217;d update the results in 6 months, so here they are:
I made a number of Google searches of the forms below and averaged the results:
"implemented in &#60;language&#62;"
"written in &#60;language&#62;"



Language
# Results
Apr 09
# Results
Oct 09
Position
Delta


C
1,905,500
16,975,000
0


C++
699,000
6,270,000
+1


Java
850,000
5,118,000
-1


PHP
680,000
5,083,500
0


Lisp Family1
176,507
3,489,650
+3


Python
396,000
3,407,000
-1


Perl
365,500
3,132,500
-1


C#
349,700
2,125,000
-1


Scheme
86,450
2,100,000
+2


FORTRAN

1,621,000
N/A


JavaScript
102,700
1,163,000
-1


ML Family2
29,062
1,003,800
+3



(S)ML3
5,173
590,700
+12


Common Lisp
20,600
554,500
+5


Lisp
61,900
486,500
-2


Prolog
17,750
390,500
+4


Tcl
44,800
382,000
-3


OCaml
22,000
343,500
0


Arc
6,775
286,500
+4


Haskell
22,550
280,500
-4


COBOL

247,300
N/A


Ruby
99,650
227,000
-10


Io
1,760
198,500
+6


Smalltalk
9,105
187,500
-1


Erlang
22,285
161,700
-7


Forth
6,465
146,450
-1


Lua
13,065
131,800
-5


Caml
1,889
69,600
0


Scala
3,570
66,250
-2


Clojure
782
62,200
0



1 combines Lisp, Scheme, Common Lisp, Arc &#38; Clojure
2 [...]]]></description>
			<content:encoded><![CDATA[<p>I compiled some <a href="http://lojic.com/blog/2009/04/21/programming-language-popularity/">programming language popularity</a> statistics in April and mentioned I&#8217;d update the results in 6 months, so here they are:</p>
<p>I made a number of Google searches of the forms below and averaged the results:</p>
<pre class="code">"implemented in &lt;language&gt;"
"written in &lt;language&gt;"</pre>
<table border="0">
<tbody>
<tr>
<th>Language</th>
<th style="text-align: right;"># Results<br />
Apr 09</th>
<th style="text-align: right;"># Results<br />
Oct 09</th>
<th style="text-align: right;">Position<br />
Delta</th>
</tr>
<tr>
<td>C</td>
<td style="text-align: right;">1,905,500</td>
<td style="text-align: right;">16,975,000</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td><strong>C++</strong></td>
<td style="text-align: right;">699,000</td>
<td style="text-align: right;">6,270,000</td>
<td style="text-align: right;"><strong>+1</strong></td>
</tr>
<tr>
<td>Java</td>
<td style="text-align: right;">850,000</td>
<td style="text-align: right;">5,118,000</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>PHP</td>
<td style="text-align: right;">680,000</td>
<td style="text-align: right;">5,083,500</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td><strong>Lisp Family<sup>1</sup></strong></td>
<td style="text-align: right;">176,507</td>
<td style="text-align: right;">3,489,650</td>
<td style="text-align: right;"><strong>+3</strong></td>
</tr>
<tr>
<td>Python</td>
<td style="text-align: right;">396,000</td>
<td style="text-align: right;">3,407,000</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>Perl</td>
<td style="text-align: right;">365,500</td>
<td style="text-align: right;">3,132,500</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>C#</td>
<td style="text-align: right;">349,700</td>
<td style="text-align: right;">2,125,000</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td><strong>Scheme</strong></td>
<td style="text-align: right;">86,450</td>
<td style="text-align: right;">2,100,000</td>
<td style="text-align: right;"><strong>+2</strong></td>
</tr>
<tr>
<td>FORTRAN</td>
<td style="text-align: right;"></td>
<td style="text-align: right;">1,621,000</td>
<td style="text-align: right;">N/A</td>
</tr>
<tr>
<td>JavaScript</td>
<td style="text-align: right;">102,700</td>
<td style="text-align: right;">1,163,000</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td><strong>ML Family<sup>2</sup></strong></td>
<td style="text-align: right;">29,062</td>
<td style="text-align: right;">1,003,800</td>
<td style="text-align: right;"><strong>+3</strong></td>
</tr>
<p><!-- use ML and SML --></p>
<tr>
<td><strong>(S)ML<sup>3</sup></strong></td>
<td style="text-align: right;">5,173</td>
<td style="text-align: right;">590,700</td>
<td style="text-align: right;"><strong>+12</strong></td>
</tr>
<tr>
<td><strong>Common Lisp</strong></td>
<td style="text-align: right;">20,600</td>
<td style="text-align: right;">554,500</td>
<td style="text-align: right;"><strong>+5</strong></td>
</tr>
<tr>
<td>Lisp</td>
<td style="text-align: right;">61,900</td>
<td style="text-align: right;">486,500</td>
<td style="text-align: right;">-2</td>
</tr>
<tr>
<td><strong>Prolog</strong></td>
<td style="text-align: right;">17,750</td>
<td style="text-align: right;">390,500</td>
<td style="text-align: right;"><strong>+4</strong></td>
</tr>
<tr>
<td>Tcl</td>
<td style="text-align: right;">44,800</td>
<td style="text-align: right;">382,000</td>
<td style="text-align: right;">-3</td>
</tr>
<tr>
<td>OCaml</td>
<td style="text-align: right;">22,000</td>
<td style="text-align: right;">343,500</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td><strong>Arc</strong></td>
<td style="text-align: right;">6,775</td>
<td style="text-align: right;">286,500</td>
<td style="text-align: right;"><strong>+4</strong></td>
</tr>
<tr>
<td>Haskell</td>
<td style="text-align: right;">22,550</td>
<td style="text-align: right;">280,500</td>
<td style="text-align: right;">-4</td>
</tr>
<tr>
<td>COBOL</td>
<td style="text-align: right;"></td>
<td style="text-align: right;">247,300</td>
<td style="text-align: right;">N/A</td>
</tr>
<tr>
<td>Ruby</td>
<td style="text-align: right;">99,650</td>
<td style="text-align: right;">227,000</td>
<td style="text-align: right;">-10</td>
</tr>
<tr>
<td><strong>Io</strong></td>
<td style="text-align: right;">1,760</td>
<td style="text-align: right;">198,500</td>
<td style="text-align: right;"><strong>+6</strong></td>
</tr>
<tr>
<td>Smalltalk</td>
<td style="text-align: right;">9,105</td>
<td style="text-align: right;">187,500</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>Erlang</td>
<td style="text-align: right;">22,285</td>
<td style="text-align: right;">161,700</td>
<td style="text-align: right;">-7</td>
</tr>
<tr>
<td>Forth</td>
<td style="text-align: right;">6,465</td>
<td style="text-align: right;">146,450</td>
<td style="text-align: right;">-1</td>
</tr>
<tr>
<td>Lua</td>
<td style="text-align: right;">13,065</td>
<td style="text-align: right;">131,800</td>
<td style="text-align: right;">-5</td>
</tr>
<tr>
<td>Caml</td>
<td style="text-align: right;">1,889</td>
<td style="text-align: right;">69,600</td>
<td style="text-align: right;">0</td>
</tr>
<tr>
<td>Scala</td>
<td style="text-align: right;">3,570</td>
<td style="text-align: right;">66,250</td>
<td style="text-align: right;">-2</td>
</tr>
<tr>
<td>Clojure</td>
<td style="text-align: right;">782</td>
<td style="text-align: right;">62,200</td>
<td style="text-align: right;">0</td>
</tr>
</tbody>
</table>
<p><sup>1</sup> combines Lisp, Scheme, Common Lisp, Arc &amp; Clojure<br />
<sup>2</sup> combines OCaml, (S)ML, Caml<br />
<sup>3</sup> summed separate searches for sml and ml</p>
]]></content:encoded>
			<wfw:commentRss>http://lojic.com/blog/2009/10/24/programming-language-popularity-part-two/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Daniel Weinreb re: Lisp use at ITA</title>
		<link>http://lojic.com/blog/2009/08/29/daniel-weinreb-re-lisp-use-at-ita/</link>
		<comments>http://lojic.com/blog/2009/08/29/daniel-weinreb-re-lisp-use-at-ita/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 18:31:17 +0000</pubDate>
		<dc:creator>Brian Adkins</dc:creator>
				<category><![CDATA[business]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://lojic.com/blog/?p=770</guid>
		<description><![CDATA[Some random notes:

650 KLOC plus 150 KLOC of open source code
100 people on the team, 70 programmers
SBCL for the QPX product
Clozure CL for the reservations product
Availability requirement: four 9&#8217;s => less than 53 minutes downtime per year

Latency agreement

90% of requests w/in 300 ms
5% of requests w/in 600 ms
5% of requests w/in 1,200 ms


Java presentation layer, [...]]]></description>
			<content:encoded><![CDATA[<p>Some random notes:</p>
<ul>
<li>650 KLOC plus 150 KLOC of open source code</li>
<li>100 people on the team, 70 programmers</li>
<li>SBCL for the QPX product</li>
<li>Clozure CL for the reservations product</li>
<li>Availability requirement: four 9&#8217;s => less than 53 minutes downtime per year</li>
<li>
Latency agreement</p>
<ul>
<li>90% of requests w/in 300 ms</li>
<li>5% of requests w/in 600 ms</li>
<li>5% of requests w/in 1,200 ms</li>
</ul>
</li>
<li>Java presentation layer, Common Lisp stateless business layer, Oracle data layer</li>
<li>Daniel is very positive about Clojure</li>
<li>Some links from the talk:
<ul>
<li><a href="http://common-lisp.net/~dlw/LispSurvey.html">Survey of Common Lisp Implementations</a></li>
<li><a href="http://ilc2009.scheming.org/">International Lisp Conference 2009 Discusison Forum</a></li>
<li><a href="http://danweinreb.org/blog">Dan Weinreb&#8217;s Blog</a></li>
</ul>
</li>
</ul>
<p><br/><br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/xquJvmHF3S8&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/xquJvmHF3S8&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://lojic.com/blog/2009/08/29/daniel-weinreb-re-lisp-use-at-ita/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TriFunc.org</title>
		<link>http://lojic.com/blog/2009/07/22/trifuncorg/</link>
		<comments>http://lojic.com/blog/2009/07/22/trifuncorg/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 14:15:42 +0000</pubDate>
		<dc:creator>Brian Adkins</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[arc]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scheme]]></category>
		<category><![CDATA[sml]]></category>

		<guid isPermaLink="false">http://lojic.com/blog/?p=635</guid>
		<description><![CDATA[I first became interested in functional programming when I was exposed to Python, Ruby &#038; JavaScript a number of years ago. Since then I&#8217;ve looked into Arc, Clojure, Common Lisp, Haskell, Logo, ML &#038; Scheme. I haven&#8217;t yet determined whether I&#8217;ll be more productive in any of them than I am with Ruby for developing [...]]]></description>
			<content:encoded><![CDATA[<p>I first became interested in functional programming when I was exposed to Python, Ruby &#038; JavaScript a number of years ago. Since then I&#8217;ve looked into Arc, Clojure, Common Lisp, Haskell, Logo, ML &#038; Scheme. I haven&#8217;t yet determined whether I&#8217;ll be more productive in any of them than I am with Ruby for developing web applications, but I do find them quite interesting.</p>
<p>After bumping into a number of local programmers who expressed an interest in functional programming, I thought it might be a good time to start a local group that focused on functional programming languages, so I did a couple days ago.</p>
<p><a rel="nofollow" href="http://TriFunc.org">TriFunc.org</a> is a group for programmers who are interested in functional programming languages and live near the Research Triangle area of North Carolina.</p>
<p>If you live in the area and have an interest in functional programming languages, feel free to dive in and start participating in the Google Group discussions. Once we reach a critical mass, I expect we&#8217;ll produce a meeting schedule, etc., but that will depend on where the group wants to take this.</p>
]]></content:encoded>
			<wfw:commentRss>http://lojic.com/blog/2009/07/22/trifuncorg/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2009 Programming Language Plan</title>
		<link>http://lojic.com/blog/2009/04/27/2009-programming-language-plan/</link>
		<comments>http://lojic.com/blog/2009/04/27/2009-programming-language-plan/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 17:36:42 +0000</pubDate>
		<dc:creator>Brian Adkins</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[common_lisp]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scheme]]></category>
		<category><![CDATA[sml]]></category>

		<guid isPermaLink="false">http://lojic.com/blog/?p=502</guid>
		<description><![CDATA[Background

The 2008 Programming Language Plan didn&#8217;t go as well as I hoped, so I&#8217;m regrouping for another go at it. I did make progress learning some Logo and teaching it to my daughters, and I worked through seven chapters of &#8220;Programming in Haskell&#8221; which was very enjoyable, but I also spent way too much time [...]]]></description>
			<content:encoded><![CDATA[<h2>Background</h2>
<p>
The <a href="http://lojic.com/blog/2008/01/17/2008-programming-language-plan/">2008 Programming Language Plan</a> didn&#8217;t go as well as I hoped, so I&#8217;m regrouping for another go at it. I did make progress learning some Logo and teaching it to my daughters, and I worked through seven chapters of &#8220;Programming in Haskell&#8221; which was very enjoyable, but I also spent way too much time trying to decide which language(s) to learn without actually learning them.
</p>
<p>
I have now decided which languages I want to learn this year, so I figured I&#8217;d post this blog entry. In some respects, things haven&#8217;t changed much from last years plan, but my decisions are much less tentative which is encouraging. I&#8217;m glad to switch from <em>information gathering</em> to actually learning a few languages.
</p>
<h2>Motivation</h2>
<p>
When I switched from C++ to Java in 1996 and noticed a large increase in productivity; however, it didn&#8217;t occur to me to consider whether switching from Java to another language might also give me a similar boost in productivity. The job demand for Java was high during the 10 years I used it, and I was getting paid for my time vs. what I produced, so the oversight wasn&#8217;t too costly.
</p>
<p>
When I switched from Java to Ruby in 2006 I experienced a comparable, if not greater, boost in productivity as I had with the switch from C++ to Java. This time I considered the effect of programming language choice on productivity more carefully and began to wonder about the optimal programming language for me. As a small business owner, my primary consideration is productivity, not popularity or the interchangeableness of programmers.
</p>
<p>
I don&#8217;t think a perfect programming language exists in general, but I think there is an optimal language for me given my particular circumstances, the problems I want to solve, the type of software I want to develop, my way of thinking, my aesthetic tastes, etc.
</p>
<h2>The Problem</h2>
<p>
There is a cost to research programming languages to determine the optimal one, and there is a cost to switch programming languages, so the benefit of a new programming language needs to exceed those costs.
</p>
<p>
Additionally, a significant catch-22 exists in that to truly determine if a language is optimal, one must reach a level of proficiency with the language. There isn&#8217;t enough time to learn <em>all</em> of the candidate languages, so some filtering mechanism must be used first to narrow the choices to a reasonably small set. This filtering mechanism is theoretical by nature, but I think the subtle practicalities of a language have a significant effect on productivity.
</p>
<p>
I have a long term perspective for this task, so I don&#8217;t mind investing time researching programming languages, and I also don&#8217;t mind if I need to develop/acquire supporting libraries before being ultimately more productive than I am currently with Ruby and Rails.
</p>
<h2>The Process</h2>
<p>
I briefly entertained the idea of going about this research in a more systematic, scientific way. That might be a reasonable approach, but due to the following:
</p>
<ul>
<li>My laziness</li>
<li>The high degree of subjectivity in programming language choice</li>
<li>The lack of consensus among programming language researchers</li>
</ul>
<p>
I ended up with a fairly ad-hoc approach involving examining the following areas and trying to absorb enough information to formulate a plan:
</p>
<h3>Efficiency</h3>
<p>
Programming language efficiency is becoming increasingly important to me as Moore&#8217;s law loses steam, and power &amp; cooling issues become more prominent.
</p>
<p>
On the one hand, Ruby is near the bottom of the pack with respect to efficiency, but the productivity has been outstanding, and at the volume of transactions I&#8217;ve needed to deliver thus far, performance hasn&#8217;t been a problem.
</p>
<p>
On the other hand, if programming languages exist (and I believe they do) that have similar or greater <em>power</em> than Ruby but are compiled instead of interpreted, that would be an advantage.
</p>
<p>
Benchmarks are notoriously controversial with respect to the degree in which they predict performance, but I don&#8217;t think they&#8217;re irrelevant. One popular benchmark site is: <a href="http://shootout.alioth.debian.org/">Programming Language Shootout</a>. I also created some micro-benchmarks of my own to test performance.
</p>
<p>
One negative result of Ruby being inefficient is the disparity in performance of code written in Ruby vs. library code, or extensions, written in C. This creates counter-intuitive scenarios where a piece of code that appears less efficient is actually more efficient because of the use of built-in code implemented in C. I don&#8217;t like thinking in those terms; I would much prefer that user written code in the language is much closer to the efficiency of built-in library code.
</p>
<h3>Concurrency</h3>
<p>
With the flattening of CPU MHz and proliferation of CPU cores, I think concurrency may continue to grow in importance. Although I develop mainly server side web applications which can take advantage of multiple cores by virtue of having multiple independent processes, I would prefer to have better concurrency mechanisms in the language/libraries directly.
</p>
<h3>Joy</h3>
<p>
I think I first heard <em>joy</em> used, in the context of programming languages, in the Ruby community &#8211; probably from Matz himself. I have to agree that programming in Ruby has been more joyful than previous programming languages.
</p>
<p>
I&#8217;m not sure exactly why this is, but I expect it has something to do with the effectiveness and productivity of Ruby, but it may be helped by the incredibly friendly Ruby community.
</p>
<h3>Fundamental Nature</h3>
<p>
My preference is for a programming language to minimize arbitrariness and to maximize orthogonality. In other words, I would prefer the language to have a minimal set of core concepts/axioms/operators/etc. that are built upon systematically.
</p>
<h3>Community</h3>
<p>
Whether my optimal language is <em>mainstream</em> or not is irrelevant to me, so I don&#8217;t need the programming language community to be large (and in fact, being <em>too</em> large is a detriment), but I do think it should be active enough that there are people available to help answer questions, write libraries, maintain/improve compilers, debuggers etc.
</p>
<p>
To this end, I spent time on various usenet groups, IRC channels and blogs. Occasionally asking questions, but mostly observing the dialog and interaction among the community members.
</p>
<h3>Education</h3>
<p>
What educational materials are available?
</p>
<p>
I tend to prefer learning from books, so searching Amazon to see what books are available, how well they&#8217;re received, etc. was helpful. Although I prefer books typically, in the exploratory stages, it&#8217;s cheaper to go through online materials, so searching the web for free PDFs was useful. The existence of a few good texts is also an indication of the vitality of community.
</p>
<h3>Productivity</h3>
<p>
Ultimately, I&#8217;m after the most productive language for me; however, I think productivity is the factor that requires the most proficiency with a language to judge, so it was the most difficult factor to research prior to learning a language. I was limited to anecdotal stories, case studies, personal testimonies, etc.
</p>
<h3>Licensing</h3>
<p>
I prefer open source licensing because I think programming languages with proprietary licensing are more likely to die.
</p>
<h2>The Final Candidates</h2>
<p>
I began with Ruby as the point of reference irrespective of Rails and other libraries. Even though Rails is an important factor in my current productivity, since I&#8217;m taking a long term view, I didn&#8217;t want to exclude a fantastic language simply because it&#8217;s lacking something that Ruby was also lacking N years ago.
</p>
<p>
Due to the cost of researching, learning and switching to a new programming language, I only considered languages that had the potential of offering a significant improvement in one or more areas without losing too much in other areas.
</p>
<p>
The candidates I eventually selected fell into two groups. Both groups have strong <em>functional</em> capabilities, good efficiency, and long, successful track records. I believe that even the best programming language designers make serious mistakes which can only be identified with the hindsight of years of use. It&#8217;s possible that someone is about to release a brand new language that has the potential to be the most productive for me personally; however, I&#8217;m not willing to take the risk to learn it.
</p>
<h3>The Lisp Family</h3>
<p>
Lisp has a very long track record of success and adaptability. In fact, if I was forced to program in a single programming language from now on, I would probably choose a Lisp since I think it would have the greatest likelihood of being able to adapt.
</p>
<p>
The Lisp family has dynamic typing which I&#8217;ve grown to love with Ruby, but most also allow type declarations for efficiency. Lisp also appears to have a more fundamental nature than most languages. I&#8217;ve heard it said that Lisp was more discovered than invented.
</p>
<p>
I first became interested in Lisp when I learned that Ruby was influenced by it. My interest was reinforced by some of Paul Graham&#8217;s essays &amp; books. I like the exploratory and dynamic nature of developing Lisp &#8211; this is mostly from reading comments of others, but I&#8217;ve tasted a small part of this when evaluating Lisp code in Emacs and having it be available immediately.
</p>
<p>
<strong>Logo</strong> is first on the list simply because it&#8217;s both a Lisp and a great language for teaching children how to program, so I can kill two birds with one stone.
</p>
<p>
<strong>Scheme</strong> is next because it&#8217;s a natural sequel to Logo and I <em>still</em> want to work through &#8220;The Structure and Interpretation of Computer Programs&#8221;. The fact that Paul Graham chose mzcheme to create his Arc language is a good &#8220;letter of recommendation&#8221;. Scheme <em>feels</em> the most fundamental, simple &amp; clean thus far.
</p>
<p>
<strong>Common Lisp</strong> is after Scheme due to its eminent practicality and completeness. It has plenty of warts, but also plenty of power and functionality. It&#8217;s been called a great, big, ball of mud &#8211; but in a good way ;)
</p>
<p>
Lastly, is <strong>Clojure</strong>. It&#8217;s last in the Lisp family because I want to learn Scheme &amp; Common Lisp first so I&#8217;ll be better equipped to judge Clojure. This will also allow more time for Clojure to mature. Clojure has a focus on functional programming &amp; concurrency that is <em>symbiotic</em> with the Java platform. The latter provides a quick start and access to Java libraries, the JVM infrastructure, etc., but my preference would be to not be dependent on the JVM in the long run. I&#8217;ll withhold judgment until I&#8217;ve learned it and used it for a while.
</p>
<h3>The ML Family</h3>
<p>
I&#8217;m least familiar with the ML family and with functional programming in general. I&#8217;ve spent most of my career studying and using imperative, object-oriented programming languages.
</p>
<p>
I think the ML family is worth studying because:
</p>
<ul>
<li>Functional programming may be beneficial with respect to concurrency.</li>
<li>Prog. Lang. researchers seem to be enamored with ML family.</li>
<li>There are enough anecdotal testimonies of productivity to warrant further study.</li>
</ul>
<p>
<strong>Standard ML</strong> is an important functional language that differs from Haskell in that it&#8217;s <em>impure</em>, i.e. it allows side effects, and it&#8217;s <em>strict</em>, i.e. not lazy. It shares Hindly-Milner static typing with Haskell. The community seems rather tiny, and I expect that if I go with a static typed language it will likely be Haskell, but I wanted to learn Standard ML first because of its historical importance and to be able to compare an impure/strict language with a pure/nonstrict language.
</p>
<p>
<strong>Haskell</strong> is probably the most different programming language from what I&#8217;m used to. This, in and of itself, has some advantages with respect to gaining new perspectives and ideas. In some ways, it&#8217;s a language that has taken things to extremes with respect to functional purity and laziness.
</p>
<p>
The community is <em>very</em> active. It offers a great compiler (GHC), software transactional memory, a decent base of libraries, etc.
</p>
<p>
At this early stage, I&#8217;m skeptical of static typing, functional purity and laziness, so becoming proficient in Haskell is a great opportunity to be able to determine how I feel about those.
</p>
<h2>The Plan</h2>
<p>
Rather than go through the candidates sequentially, I&#8217;m going to try and make progress on two tracks concurrently to allow me to compare concepts from both families:</p>
<table border="1" cellpadding="3">
<tr>
<th>ML Family</th>
<th>Lisp Family</th>
</tr>
<tr>
<td>Standard ML</td>
<td>Logo</td>
</tr>
<tr>
<td>Haskell</td>
<td>Scheme</td>
</tr>
<tr>
<td></td>
<td>Common Lisp</td>
</tr>
<tr>
<td></td>
<td>Clojure</td>
</tr>
</table>
<p>
<br />
I&#8217;m curious to find out how I feel about these languages after I&#8217;ve achieved some skill with them, but I think becoming proficient in the Lisp and ML families will be time well spent. At minimum, I&#8217;ll be better equipped to compare other languages.</p>
]]></content:encoded>
			<wfw:commentRss>http://lojic.com/blog/2009/04/27/2009-programming-language-plan/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Programming Language Popularity</title>
		<link>http://lojic.com/blog/2009/04/21/programming-language-popularity/</link>
		<comments>http://lojic.com/blog/2009/04/21/programming-language-popularity/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 19:55:41 +0000</pubDate>
		<dc:creator>Brian Adkins</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[arc]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[common_lisp]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[forth]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[io]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[ocaml]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[scheme]]></category>
		<category><![CDATA[smalltalk]]></category>
		<category><![CDATA[sml]]></category>
		<category><![CDATA[tcl]]></category>

		<guid isPermaLink="false">http://lojic.com/blog/?p=466</guid>
		<description><![CDATA[Despite the numerous ways in existence to quantify programming language popularity, I thought I&#8217;d throw yet another one into the mix. I made a number of Google searches of the forms below and averaged the results:

"implemented in &#60;language&#62;"
"written in &#60;language&#62;"

I&#8217;m very curious to see how these stats change over time, so I&#8217;ve added a calendar [...]]]></description>
			<content:encoded><![CDATA[<p>Despite the numerous ways in existence to quantify programming language popularity, I thought I&#8217;d throw yet another one into the mix. I made a number of Google searches of the forms below and averaged the results:</p>
<pre class="code">
"implemented in &lt;language&gt;"
"written in &lt;language&gt;"
</pre>
<p>I&#8217;m very curious to see how these stats change over time, so I&#8217;ve added a calendar item to recompute them in six months. Leave a comment if you&#8217;d like to add a programming language to the list, and I&#8217;ll update this article and it will be included in the recomputation six months from now.</p>
<table border="0">
<tbody>
<tr>
<th>Language</th>
<th># Results</th>
</tr>
<tr>
<td>C</td>
<td>1,905,500</td>
</tr>
<tr>
<td>Java</td>
<td>850,000</td>
</tr>
<tr>
<td>C++</td>
<td>699,000</td>
</tr>
<tr>
<td>PHP</td>
<td>680,000</td>
</tr>
<tr>
<td>Python</td>
<td>396,000</td>
</tr>
<tr>
<td>Perl</td>
<td>365,500</td>
</tr>
<tr>
<td>C#</td>
<td>349,700</td>
</tr>
<tr>
<td>Lisp Family<sup>1</sup></td>
<td>176,507</td>
</tr>
<tr>
<td>JavaScript</td>
<td>102,700</td>
</tr>
<tr>
<td>Ruby</td>
<td>99,650</td>
</tr>
<tr>
<td>Scheme</td>
<td>86,450</td>
</tr>
<tr>
<td>Lisp</td>
<td>61,900</td>
</tr>
<tr>
<td>Tcl</td>
<td>44,800</td>
</tr>
<tr>
<td>ML Family<sup>2</sup></td>
<td>29,062</td>
</tr>
<tr>
<td>Haskell</td>
<td>22,550</td>
</tr>
<tr>
<td>Erlang</td>
<td>22,285</td>
</tr>
<tr>
<td>OCaml</td>
<td>22,000</td>
</tr>
<tr>
<td>Common Lisp</td>
<td>20,600</td>
</tr>
<tr>
<td>Prolog</td>
<td>17,750</td>
</tr>
<tr>
<td>Lua</td>
<td>13,065</td>
</tr>
<tr>
<td>Smalltalk</td>
<td>9,105</td>
</tr>
<tr>
<td>Arc</td>
<td>6,775</td>
</tr>
<tr>
<td>Forth</td>
<td>6,465</td>
</tr>
<p><!-- use ML and SML --></p>
<tr>
<td>(S)ML<sup>3</sup></td>
<td>5,173</td>
</tr>
<tr>
<tr>
<td>Scala</td>
<td>3,570</td>
</tr>
<tr>
<td>Caml</td>
<td>1,889</td>
</tr>
<tr>
<td>Io</td>
<td>1,760</td>
</tr>
<tr>
<td>Clojure</td>
<td>782</td>
</tr>
</tbody>
</table>
<p><sup>1</sup> combines Lisp, Scheme, Common Lisp, Arc &amp; Clojure<br />
<sup>2</sup> combines OCaml, (S)ML, Caml<br />
<sup>3</sup> summed separate searches for sml and ml<br />
<strong>Update</strong> 4/23/09 added C#, Tcl per comment requests.</p>
]]></content:encoded>
			<wfw:commentRss>http://lojic.com/blog/2009/04/21/programming-language-popularity/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Digest Tag Population in Ruby</title>
		<link>http://lojic.com/blog/2009/03/01/digest-tag-population-in-ruby/</link>
		<comments>http://lojic.com/blog/2009/03/01/digest-tag-population-in-ruby/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 05:47:04 +0000</pubDate>
		<dc:creator>Brian Adkins</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://lojic.com/blog/?p=258</guid>
		<description><![CDATA[I saw a post on comp.lang.lisp demonstrating the suitability of Common Lisp for functional programming. The poster asked to see versions in other languages including Ruby, so I thought I&#8217;d whip something up. Here&#8217;s the original post with description of the problem:
This one was too much fun for words in re how cool it is [...]]]></description>
			<content:encoded><![CDATA[<p>I saw a post on <a href="http://groups.google.com/group/comp.lang.lisp/browse_frm/thread/296ea591d79ae7f5?hl=en#">comp.lang.lisp</a> demonstrating the suitability of Common Lisp for functional programming. The poster asked to see versions in other languages including Ruby, so I thought I&#8217;d whip something up. Here&#8217;s the original post with description of the problem:</p>
<pre>This one was too much fun for words in re how cool it is programming
with Lisp. I would like to see this in Ruby, Clojure, Qi, and
Scheme. The precise fun part tho is typing it all in in the final form
versus dividing the thing up into steps to get intermediate results,
ie, a test of one's mastery of one's language. Non-functional
languages I guess have no choice but to stop and assign temporaries.

Given:

(defparameter *pets*
  '((dog ((blab 12)(glab 17)(cbret 82)(dober 42)(gshep 25)))
    (cat ((pers 22)(siam 7)(tibet 52)(russ 92)(meow 35)))
    (snake ((garter 10)(cobra 37)(python 77)(adder 24)(rattle 40)))
    (cow ((jersey 200)(heiffer 300)(moo 400)))))

Write:

(defun digest-tag-population (tag-population pick-tags count)...)

Such that:

(digest-tag-population *pets* '(dog cat snake) 5)

=&gt; ((DOG CBRET 82) (DOG DOBER 42) (CAT RUSS 92) (CAT TIBET 52) (SNAKE
PYTHON 77))

...the rules being:

- consider only the populations of tags (the first symbol in each
sublist) found in the parameter pick-tags, a list

- take only the  most populous of the union of the populations

- return (tag name population) of the most populous in this order:

    firstly, by position of the tag in pick-tags
    second, ie within a tag, in descending order of population

(defun subseq-ex (st e s)
  (subseq s st (min e (length s))))

(defun digest-tag-population (tag-population pick-tags count)
  (flet ((tagpos (tag) (position tag pick-tags)))
    (stable-sort (subseq-ex 0 count
                   (sort (loop for (tag population) in tag-population
                             when (tagpos tag)
                             append (loop for pop in population
                                        collecting (list* tag pop)))
                     '&gt; :key (lambda (x)
                               (caddr x))))
      '&lt; :key (lambda (x) (tagpos (car x))))))

(defparameter *pets*
  '((dog ((blab 12)(glab 17)(cbret 82)(dober 42)(gshep 25)))
    (cat ((pers 22)(siam 7)(tibet 52)(russ 92)(meow 35)))
    (snake ((garter 10)(cobra 37)(python 77)(adder 24)(rattle 40)))
    (cow ((jersey 200)(heiffer 300)(moo 400)))))

#+test
(digest-tag-population *pets* '(dog cat snake) 5)</pre>
<p>And here is my Ruby version:</p>
<pre>PETS = [
  [:dog, [[:blab, 12], [:glab, 17], [:cbret, 82], [:dober, 42], [:gshep, 25]]],
  [:cat, [[:pers, 22], [:siam, 7], [:tibet, 52], [:russ, 92], [:meow, 35]]],
  [:snake, [[:garter, 10], [:cobra, 37], [:python, 77], [:adder, 24], [:rattle, 40]]],
  [:cow, [[:jersey, 200], [:heiffer, 300], [:moo, 400]]]
]

def digest_tag_population tag_population, pick_tags, count
  tag_population.select {|e| pick_tags.include?(e[0]) }.
    inject([]) {|memo,obj| obj[1].each {|e| memo &lt;&lt; [obj[0], e[0], e[1]] }; memo }.
    sort {|a,b| b[2] &lt;=&gt; a[2] }[0,count].
    sort_by {|e| [ tag_population.map{|p| p[0]}.rindex(e[0]), e[2] * -1] }
end

digest_tag_population(PETS, [:dog, :cat, :snake], 5)</pre>
<p>Within the function:<br />
Line  1: select elements that match the pick tags<br />
Line  2: map to a list of tuples of the form [:dog, :blab, 12]<br />
Line  3: sort the list of tuples by population and select the first count of them<br />
Line  4: sort by tag position, population</p>
<p>Output:</p>
<p>[[:dog, :cbret, 82],<br />
[:dog, :dober, 42],<br />
[:cat, :russ, 92],<br />
[:cat, :tibet, 52],<br />
[:snake, :python, 77]]</p>
<p>I think Ruby compares very favorably. What do you think? Feel free to submit a version in another language.</p>
]]></content:encoded>
			<wfw:commentRss>http://lojic.com/blog/2009/03/01/digest-tag-population-in-ruby/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Blog Bifurcation</title>
		<link>http://lojic.com/blog/2008/05/31/blog-bifurcation/</link>
		<comments>http://lojic.com/blog/2008/05/31/blog-bifurcation/#comments</comments>
		<pubDate>Sat, 31 May 2008 20:49:21 +0000</pubDate>
		<dc:creator>Brian Adkins</dc:creator>
				<category><![CDATA[communication]]></category>
		<category><![CDATA[arc]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://lojic.com/blog/2008/05/31/blog-bifurcation/</guid>
		<description><![CDATA[One of the reasons I haven&#8217;t been blogging much lately is because I&#8217;ve decided to bifurcate my blog into a professional/technical blog (which will continue here on lojic.com/blog) and a personal blog, and until I&#8217;ve decided on the technology to use for my personal blog I&#8217;ve been reluctant to blog much.
The motivation for the split [...]]]></description>
			<content:encoded><![CDATA[<p>One of the reasons I haven&#8217;t been blogging much lately is because I&#8217;ve decided to bifurcate my blog into a professional/technical blog (which will continue here on lojic.com/blog) and a personal blog, and until I&#8217;ve decided on the technology to use for my personal blog I&#8217;ve been reluctant to blog much.</p>
<p>The motivation for the split is the feeling that a lot of my non-technical family &#038; friends grow weary of weeding through a lot of techno-geek material to find anything interesting, and folks who read my blog for technical info probably don&#8217;t want to weed through the silly videos, etc.</p>
<p>Wordpress has worked fine for my blog thus far, but I want to take the opportunity to develop my personal blog in a new technology more for the learning experience than necessity. I haven&#8217;t had time to select the appropriate technology, so I have a bit of analysis paralysis.</p>
<p>The candidates are:</p>
<ul>
<li>
<strong>Ruby on Rails</strong>: I currently develop primarily in Ruby on Rails, so in that respect it would be the logical choice and easiest way to get started; however, it wouldn&#8217;t have the benefit of learning a new technology.
</li>
<li>
<strong>Arc</strong>: I had high hopes for Arc when Paul Graham first released it. I still think it has potential, but that potential is limited by Paul&#8217;s interest level and available time. It&#8217;s been over 3 months since the last release and that was only a small incremental improvement. The forum seems dead, and the fact that Arc went through a 5 year <em>blackout</em> period makes me wonder whether it will be a dead-end language and a waste of valuable time.
</li>
<li>
<strong>Common Lisp</strong>: I am leaning toward a Lisp, so if Arc doesn&#8217;t pan out, Common Lisp would be a good fallback language. It&#8217;s much more mature with robust implementations. It doesn&#8217;t provide a nice <em>batteries included</em> experience though, and I&#8217;ve been reluctant to collect the necessary libraries from various sources to allow anything remotely similar to Ruby on Rails with respect to ease of development. I think it may have a greater <em>long term</em> potential though, so it may be worth the effort.
</li>
<li>
<strong>Scheme</strong>: The PLT web server may give me a head start on a Lisp based web site, and Arc is based on MZScheme, so it&#8217;s on the short list.
</li>
<li>
<strong>Haskell</strong>: I know very little Haskell (even less than Lisp which is not much), but I&#8217;m intrigued by many aspects of the language. GHC seems to be a great compiler that produces well performing programs. My initial impression is that it will take more effort to learn than a Lisp, but in terms of brain stretching, it has a lot to offer. There is a Haskell based web server available, but like a lot of <em>fringe</em> languages, it appears to be pretty rough around the edges.
</li>
</ul>
<p>I have a vacation coming up, so I think I&#8217;ll use some of the down time to do some research and make a decision. Look for the blog bifurcation to happen in the latter half of June. If you have any opinions on the matter, please add a comment :)</p>
]]></content:encoded>
			<wfw:commentRss>http://lojic.com/blog/2008/05/31/blog-bifurcation/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Nice Fonts for GNU Emacs on Ubuntu Linux</title>
		<link>http://lojic.com/blog/2008/02/07/nice-fonts-for-gnu-emacs-on-ubuntu-linux/</link>
		<comments>http://lojic.com/blog/2008/02/07/nice-fonts-for-gnu-emacs-on-ubuntu-linux/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 16:13:18 +0000</pubDate>
		<dc:creator>Brian Adkins</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://lojic.com/blog/2008/02/07/nice-fonts-for-gnu-emacs-on-ubuntu-linux/</guid>
		<description><![CDATA[UPDATE 12/24/08: This article is now out of date. I just installed Ubuntu 8.10, and getting Emacs with nice fonts is now much easier:

Install the emacs-snapshot-gtk package
Edit ~/.Xresources to have
Emacs.font: Bitstream Vera Sans Mono-10
xrdb -merge ~/.Xresources


Before discussing how to get nice fonts for emacs, it might be reasonable to ask, &#8220;why emacs?&#8221; I haven&#8217;t fully [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE 12/24/08:</strong> This article is now out of date. I just installed Ubuntu 8.10, and getting Emacs with nice fonts is now much easier:</p>
<ol>
<li>Install the emacs-snapshot-gtk package</li>
<li>Edit ~/.Xresources to have<br />
Emacs.font: Bitstream Vera Sans Mono-10</li>
<li>xrdb -merge ~/.Xresources</li>
</ol>
<hr />
<p>Before discussing how to get nice fonts for emacs, it might be reasonable to ask, &#8220;why emacs?&#8221; I haven&#8217;t fully answered that question myself, but had I not been able to get nice, readable fonts on emacs, I probably wouldn&#8217;t continue researching it. For the info on getting nice fonts to work, scroll down to &#8220;Nice Fonts&#8221; below.</p>
<p>After many years of using large IDEs to develop software, I switched to <a href="http://www.vim.org/">vim</a> about a year and a half ago when I began developing with Ruby on Rails. Although the learning curve for vim was a bit steep, I quickly got to the point of being more productive with vim than I was with my previous IDE, and I&#8217;m continually learning features of vim that save me time and effort.</p>
<p>Ok, if vim is so great, why am I considering emacs? In a word, Lisp. Emacs, has great Lisp support. For the little bit of Lisp dabbling I&#8217;ve been doing, vim has been fine, but from what I&#8217;ve seen demonstrated with emacs and slime, I think it&#8217;s worth researching. Another important factor is that emacs is scripted with elisp, a dialect of Lisp. I&#8217;ve never taken the time to read up on vim scripting, but scripting emacs with elisp seems easy. Type in some elisp code into the scratch buffer, evaluate it, and it&#8217;s integrated immediately into emacs. I haven&#8217;t written any vim scripts in a year and a half, but within a few hours of researching emacs, I had implemented several elisp scripts (from source obtained online).</p>
<p>Here&#8217;s one to simulate the % command in vim which moves the cursor to the matching paren:</p>
<pre>
(defun match-paren (arg)
  "Go to the matching paren if on a paren; otherwise insert %."
  (interactive "p")
  (cond ((looking-at "\s(") (forward-list 1) (backward-char 1))
	((looking-at "\s)") (forward-char 1) (backward-list 1))
        (t (self-insert-command (or arg 1)))))

(global-set-key "%" 'match-paren)
</pre>
<p>Here&#8217;s one to simulate the vim o and O commands which open a new line either below or above the cursor and position the cursor properly indented, so you can start typing immediately. I use this quite often in vim:</p>
<pre>
(defun bja-open-line-below ()
  (interactive)
  (end-of-line)
  (open-line 1)
  (next-line 1)
  (indent-according-to-mode))

(global-set-key [?C-o] 'bja-open-line-below)

(defun bja-open-line-above ()
  (interactive)
  (beginning-of-line)
  (open-line 1)
  (indent-according-to-mode))

(global-set-key [?M-o] 'bja-open-line-above)
</pre>
<p>After my brief exposure to emacs, I think vim is more concise. In other words, it appears that vim can accomplish a given task with fewer keystrokes than emacs. I&#8217;m curious to see how hard it is to extend emacs to have some of the niceties I&#8217;m used to with vim. Maybe I can have the best of both worlds &#8211; the conciseness of vim and the extensibility and Lisp support of emacs. Lennart Borgman passed on a link to <a href="http://www.emacswiki.org/cgi-bin/wiki/vimpulse.el">vimpulse.el</a>, so I&#8217;ll take a look at it soon.</p>
<p>I swapped my caps-lock with my left control key a long time ago, so the emacs chording isn&#8217;t quite as much of a problem, but I still wonder if vim might be easier on the hands/wrists since it requires very little chording.</p>
<p>I know some famous lispers use vi(m) for Lisp development, so I don&#8217;t think emacs is a must-have. Also, if I end up using a commercial Lisp such as Lispworks or Allegro, I may consider returning to an IDE for lisp development. So, at this stage, I&#8217;m still very much a vim user who is researching emacs.</p>
<p><strong>UPDATE:</strong>Well, sometime between the original post and now I became a die-hard GNU Emacs user, so I figured I&#8217;d update the post :)</p>
<p><strong>Nice Fonts</strong></p>
<p>But enough of that, how do you get nice fonts on emacs? I had heard that the new version of emacs (22) provided anti-aliased fonts, but apparently I was mistaken. I spent hours Googling and rebuilding emacs to no avail &#8211; quite a frustrating experience. Then I posted a question on the gnu.emacs.help usenet group and received a helpful reply in a few minutes which did the trick. <a href="http://groups.google.com/group/gnu.emacs.help/browse_frm/thread/56467e1d7e39d279/61f2560701405cc8?hl=en#61f2560701405cc8">Here&#8217;s the thread.</a></p>
<p>Here&#8217;s what I did:</p>
<pre>
cvs -z3 -d:pserver:anonymous@cvs.savannah.gnu.org:/sources/emacs co emacs
cd emacs
./configure --enable-font-backend --with-gif=no
make bootstrap
make
sudo make install
</pre>
<p>After that, I was able to use the &#8216;Bitstream Vera Sans Mono-10&#8242; font, and it looks great!</p>
<pre>
emacs -r -fn "Bitstream Vera Sans Mono-10"
</pre>
<p>The -r flag is for reverse video. I much prefer a black background. After making emacs from the cvs sources, it reports its version as 23.0.60.2.</p>
<p>After editing my ~/.Xresources file to have the following line:</p>
<pre>
Emacs.font: Bitstream Vera Sans Mono-10
</pre>
<p>And running the command:</p>
<pre>
xrdb -merge ~/.Xresources
</pre>
<p>Emacs automatically uses that font at startup.</p>
<p>During my hours of Googling, I had seen the page with the correct information <a href="http://www.emacswiki.org/cgi-bin/wiki/XftGnuEmacs">here</a>. But in my haste, I read the statement, &#8220;<em>Note: Since the emacs-unicode-2 branch which had the xft support is merged into trunk, the current page is obsolete.</em>&#8220;, and somehow got the impression that the <strong>entire</strong> page was obsolete, but apparently that is not the case.<strong>*</strong></p>
<p>Fortunately, the helpful folks on gnu.emacs.help set me straight &#8211; thanks guys!</p>
<p><strong>*UPDATE:</strong> I edited the wiki page referenced above, so the &#8220;obsolete&#8221; notice is further down the page.</p>
]]></content:encoded>
			<wfw:commentRss>http://lojic.com/blog/2008/02/07/nice-fonts-for-gnu-emacs-on-ubuntu-linux/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

