<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: How newLISP Took My Breath (And Syntax) Away</title>
	<atom:link href="http://www.taoeffect.com/blog/2010/01/how-newlisp-took-my-breath-and-syntax-away/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.taoeffect.com/blog/2010/01/how-newlisp-took-my-breath-and-syntax-away/</link>
	<description>Notice the Tao Effects...</description>
	<lastBuildDate>Fri, 18 Nov 2011 16:53:17 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Tweeting frequency &#171; newlisper</title>
		<link>http://www.taoeffect.com/blog/2010/01/how-newlisp-took-my-breath-and-syntax-away/comment-page-1/#comment-1989</link>
		<dc:creator>Tweeting frequency &#171; newlisper</dc:creator>
		<pubDate>Tue, 08 Feb 2011 14:02:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.taoeffect.com/blog/?p=644#comment-1989</guid>
		<description>[...] enjoyed the blog post by taoeffect/itistoday/greg at Tao Effect Blog; a good story, well told, and full of enthusiasm (increasingly a scarce commodity in online [...]</description>
		<content:encoded><![CDATA[<p>[...] enjoyed the blog post by taoeffect/itistoday/greg at Tao Effect Blog; a good story, well told, and full of enthusiasm (increasingly a scarce commodity in online [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Xah Lee</title>
		<link>http://www.taoeffect.com/blog/2010/01/how-newlisp-took-my-breath-and-syntax-away/comment-page-1/#comment-1887</link>
		<dc:creator>Xah Lee</dc:creator>
		<pubDate>Fri, 17 Sep 2010 20:52:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.taoeffect.com/blog/?p=644#comment-1887</guid>
		<description>problem with wanting to learn new lang is that there are so many, all says “i&#039;m best”. Although i heard of newLISP, never had energy or need to read about it for more than 20 min.

but with blogs, it&#039;s like reading tabloids.  It&#039;s fun pastime. I saw this title, felt must read it! Then, unawares, it gave me a nice intro to newLISP.

very nice article. Thanks a lot.

about the including of 「defvar」, 「=」, 「eq」, 「eql」 in the syntax, am not sure i agree with the justification. By your justification, it should also include 「;」, 「#&#124; &#124;#」, 「[]」, 「1+」, 「&lt;」 and i think a lot others.

however, i think it&#039;s nice the way you had it, because it does give a sense of the comparitive complexity of Common Lisp vs newLISP&#039;s syntax.

i find it hard to swallow for the justification of dynamic scope though... even suppose due to its faster speed, how many microseconds one might save today?</description>
		<content:encoded><![CDATA[<p>problem with wanting to learn new lang is that there are so many, all says “i&#8217;m best”. Although i heard of newLISP, never had energy or need to read about it for more than 20 min.</p>
<p>but with blogs, it&#8217;s like reading tabloids.  It&#8217;s fun pastime. I saw this title, felt must read it! Then, unawares, it gave me a nice intro to newLISP.</p>
<p>very nice article. Thanks a lot.</p>
<p>about the including of 「defvar」, 「=」, 「eq」, 「eql」 in the syntax, am not sure i agree with the justification. By your justification, it should also include 「;」, 「#| |#」, 「[]」, 「1+」, 「&lt;」 and i think a lot others.</p>
<p>however, i think it&#039;s nice the way you had it, because it does give a sense of the comparitive complexity of Common Lisp vs newLISP&#039;s syntax.</p>
<p>i find it hard to swallow for the justification of dynamic scope though&#8230; even suppose due to its faster speed, how many microseconds one might save today?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nicholas E. May</title>
		<link>http://www.taoeffect.com/blog/2010/01/how-newlisp-took-my-breath-and-syntax-away/comment-page-1/#comment-853</link>
		<dc:creator>Nicholas E. May</dc:creator>
		<pubDate>Wed, 03 Mar 2010 08:15:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.taoeffect.com/blog/?p=644#comment-853</guid>
		<description>Thanks so much for writing this, I&#039;m totally going to give newLISP another look.  Kudos for being straightforward, well-written and unbiased.  

Also? Your site design is yummy.</description>
		<content:encoded><![CDATA[<p>Thanks so much for writing this, I&#8217;m totally going to give newLISP another look.  Kudos for being straightforward, well-written and unbiased.  </p>
<p>Also? Your site design is yummy.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Marc Hildmann</title>
		<link>http://www.taoeffect.com/blog/2010/01/how-newlisp-took-my-breath-and-syntax-away/comment-page-1/#comment-663</link>
		<dc:creator>Marc Hildmann</dc:creator>
		<pubDate>Sun, 10 Jan 2010 19:57:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.taoeffect.com/blog/?p=644#comment-663</guid>
		<description>Thanks buddy for this great post and Your good work on Dragonfly!</description>
		<content:encoded><![CDATA[<p>Thanks buddy for this great post and Your good work on Dragonfly!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lutz</title>
		<link>http://www.taoeffect.com/blog/2010/01/how-newlisp-took-my-breath-and-syntax-away/comment-page-1/#comment-661</link>
		<dc:creator>Lutz</dc:creator>
		<pubDate>Sat, 09 Jan 2010 14:10:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.taoeffect.com/blog/?p=644#comment-661</guid>
		<description>What you see in this benchmark is probably the speed difference of continuation style passing in recursive functions in a Scheme, not a speed difference between dynamic and lexical scoping.</description>
		<content:encoded><![CDATA[<p>What you see in this benchmark is probably the speed difference of continuation style passing in recursive functions in a Scheme, not a speed difference between dynamic and lexical scoping.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kazimir Majorinc</title>
		<link>http://www.taoeffect.com/blog/2010/01/how-newlisp-took-my-breath-and-syntax-away/comment-page-1/#comment-660</link>
		<dc:creator>Kazimir Majorinc</dc:creator>
		<pubDate>Sat, 09 Jan 2010 10:29:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.taoeffect.com/blog/?p=644#comment-660</guid>
		<description>Mark, MZScheme is JIT compiler, isn&#039;t it? Results you published are consistent with results at

http://kazimirmajorinc.blogspot.com/2008/12/speed-of-newlisp-eval-test-v100.html

You&#039;ll see that PLT = Mz is very similar to Lispworks, Clozure and Allegro compilers.  I.e. much faster than Newlisp if code doesn&#039;t contain eval, and slower if it does. [Newlisp eval is fast because NL is closer to pure interpreter. Compiling is too expensive if some code (without loops) will be evaluated only once.] 

One can test lexical vs dynamic scope in CL, because CL allows both. 

I&#039;ve spent one year using PLT. Excellent IDE, lot of tools, very helpful community. 

Greg, nice article. 3.5 hours is impressive.</description>
		<content:encoded><![CDATA[<p>Mark, MZScheme is JIT compiler, isn&#8217;t it? Results you published are consistent with results at</p>
<p><a href="http://kazimirmajorinc.blogspot.com/2008/12/speed-of-newlisp-eval-test-v100.html" rel="nofollow">http://kazimirmajorinc.blogspot.com/2008/12/speed-of-newlisp-eval-test-v100.html</a></p>
<p>You&#8217;ll see that PLT = Mz is very similar to Lispworks, Clozure and Allegro compilers.  I.e. much faster than Newlisp if code doesn&#8217;t contain eval, and slower if it does. [Newlisp eval is fast because NL is closer to pure interpreter. Compiling is too expensive if some code (without loops) will be evaluated only once.] </p>
<p>One can test lexical vs dynamic scope in CL, because CL allows both. </p>
<p>I&#8217;ve spent one year using PLT. Excellent IDE, lot of tools, very helpful community. </p>
<p>Greg, nice article. 3.5 hours is impressive.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Wotton</title>
		<link>http://www.taoeffect.com/blog/2010/01/how-newlisp-took-my-breath-and-syntax-away/comment-page-1/#comment-659</link>
		<dc:creator>Mark Wotton</dc:creator>
		<pubDate>Sat, 09 Jan 2010 06:11:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.taoeffect.com/blog/?p=644#comment-659</guid>
		<description>an interpreter knows strictly more about the code it&#039;s got than a compiler, though. There&#039;s no reason you couldn&#039;t do the same analysis: if you adopted lexical scope, the interpreter would still know the offset into the environment.

anyway, why argue when we have data:

17:03 ~/bench % cat ack.lisp
#!/usr/bin/newlisp -s1000000
;;
;; Ackermann&#039;s Function
;;
;; By Brent Fulgham
(define (ack m n)
    (cond ((= m 0) (+ n 1))
          ((= n 0) (ack (- m 1) 1))
	  (true    (ack (- m 1) (ack m (- n 1))))))

(define (main)
    (set &#039;N (integer (last (main-args))))
    (println
      (format &quot;Ack(3,%d): %d&quot; N (ack 3 N))))

(main)
(exit)

17:04 ~/bench % cat ack.scm 

#lang scheme
(define (A m n)
    (cond
        ((= m 0) (+ n 1))
        ((= n 0) (A (- m 1) 1))
        (else (A (- m 1) (A m (- n 1))))))

(let ((n (string-&gt;number (vector-ref (current-command-line-arguments)
				     0))))
      (A 3 n))

17:04 ~/bench % time mzscheme ack.scm 9
4093
mzscheme ack.scm 9  0.29s user 0.05s system 93% cpu 0.368 total
17:04 ~/bench % time ./ack.lisp 9
Ack(3,9): 4093
./ack.lisp 9  6.07s user 0.04s system 98% cpu 6.202 total

mzscheme is a Scheme interpreter, so uses lexical scoping, and at least on this test is 20 times faster on a function-call heavy benchmark, which should test efficiency of variable lookup. There may be semantic reasons to use dynamic scoping, but performance is just a non-starter.</description>
		<content:encoded><![CDATA[<p>an interpreter knows strictly more about the code it&#8217;s got than a compiler, though. There&#8217;s no reason you couldn&#8217;t do the same analysis: if you adopted lexical scope, the interpreter would still know the offset into the environment.</p>
<p>anyway, why argue when we have data:</p>
<p>17:03 ~/bench % cat ack.lisp<br />
#!/usr/bin/newlisp -s1000000<br />
;;<br />
;; Ackermann&#8217;s Function<br />
;;<br />
;; By Brent Fulgham<br />
(define (ack m n)<br />
    (cond ((= m 0) (+ n 1))<br />
          ((= n 0) (ack (- m 1) 1))<br />
	  (true    (ack (- m 1) (ack m (- n 1))))))</p>
<p>(define (main)<br />
    (set &#8216;N (integer (last (main-args))))<br />
    (println<br />
      (format &#8220;Ack(3,%d): %d&#8221; N (ack 3 N))))</p>
<p>(main)<br />
(exit)</p>
<p>17:04 ~/bench % cat ack.scm </p>
<p>#lang scheme<br />
(define (A m n)<br />
    (cond<br />
        ((= m 0) (+ n 1))<br />
        ((= n 0) (A (- m 1) 1))<br />
        (else (A (- m 1) (A m (- n 1))))))</p>
<p>(let ((n (string-&gt;number (vector-ref (current-command-line-arguments)<br />
				     0))))<br />
      (A 3 n))</p>
<p>17:04 ~/bench % time mzscheme ack.scm 9<br />
4093<br />
mzscheme ack.scm 9  0.29s user 0.05s system 93% cpu 0.368 total<br />
17:04 ~/bench % time ./ack.lisp 9<br />
Ack(3,9): 4093<br />
./ack.lisp 9  6.07s user 0.04s system 98% cpu 6.202 total</p>
<p>mzscheme is a Scheme interpreter, so uses lexical scoping, and at least on this test is 20 times faster on a function-call heavy benchmark, which should test efficiency of variable lookup. There may be semantic reasons to use dynamic scoping, but performance is just a non-starter.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Greg Slepak</title>
		<link>http://www.taoeffect.com/blog/2010/01/how-newlisp-took-my-breath-and-syntax-away/comment-page-1/#comment-658</link>
		<dc:creator>Greg Slepak</dc:creator>
		<pubDate>Sat, 09 Jan 2010 05:10:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.taoeffect.com/blog/?p=644#comment-658</guid>
		<description>@Mark, thanks for the link, it&#039;s was a very interesting story but unfortunately the entire thing is about compiler optimizations. The quote from the wiki, you&#039;ll note, is also about compilation. newLISP has no compiler. This was stressed multiple times in the post: newLISP is a Lisp-like, general-purpose interpreted scripting language. The &quot;location of each value&quot; is not known.

Until you produce something that discusses how lexical scope is faster in an interpreted language, I think I&#039;ll trust in the benchmarks of newLISP&#039;s eval and Lutz Mueller&#039;s expertise. Everything that I&#039;ve read so far seems to indicate that indeed, dynamic scope is the better choice to use for a Lisp geared towards scripting.</description>
		<content:encoded><![CDATA[<p>@Mark, thanks for the link, it&#8217;s was a very interesting story but unfortunately the entire thing is about compiler optimizations. The quote from the wiki, you&#8217;ll note, is also about compilation. newLISP has no compiler. This was stressed multiple times in the post: newLISP is a Lisp-like, general-purpose interpreted scripting language. The &#8220;location of each value&#8221; is not known.</p>
<p>Until you produce something that discusses how lexical scope is faster in an interpreted language, I think I&#8217;ll trust in the benchmarks of newLISP&#8217;s eval and Lutz Mueller&#8217;s expertise. Everything that I&#8217;ve read so far seems to indicate that indeed, dynamic scope is the better choice to use for a Lisp geared towards scripting.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Wotton</title>
		<link>http://www.taoeffect.com/blog/2010/01/how-newlisp-took-my-breath-and-syntax-away/comment-page-1/#comment-657</link>
		<dc:creator>Mark Wotton</dc:creator>
		<pubDate>Sat, 09 Jan 2010 04:25:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.taoeffect.com/blog/?p=644#comment-657</guid>
		<description>http://en.wikipedia.org/wiki/Scope_(programming)#Static_versus_dynamic_scoping
&quot;variable lookup is always very efficient with static scope, as the location of each value is known at compile time.&quot;

http://www.paulgraham.com/thist.html goes into a bit of the history as to why dynamic scoping was thought to be more efficient.</description>
		<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Scope_(programming)#Static_versus_dynamic_scoping" rel="nofollow">http://en.wikipedia.org/wiki/Scope_(programming)#Static_versus_dynamic_scoping</a><br />
&#8220;variable lookup is always very efficient with static scope, as the location of each value is known at compile time.&#8221;</p>
<p><a href="http://www.paulgraham.com/thist.html" rel="nofollow">http://www.paulgraham.com/thist.html</a> goes into a bit of the history as to why dynamic scoping was thought to be more efficient.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Greg Slepak</title>
		<link>http://www.taoeffect.com/blog/2010/01/how-newlisp-took-my-breath-and-syntax-away/comment-page-1/#comment-656</link>
		<dc:creator>Greg Slepak</dc:creator>
		<pubDate>Sat, 09 Jan 2010 03:36:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.taoeffect.com/blog/?p=644#comment-656</guid>
		<description>@Brad, the chainshot code is very old and no longer runs on the current version of newLISP. For the final we did have to create a writeup discussing how our method worked, along with a full listing of the source. If you want that I have it available in PDF form, just shoot shoot an email to the address on the &quot;About Us&quot; page and I&#039;ll send it to you. I don&#039;t want to post it publicly because I believe the professor still uses this project for his classes, and I&#039;m afraid it would encourage cheating.

@Tim, I&#039;m not sure how to answer your question as that is sortof what this entire post was about: newLISP is better suited than Clojure is for scripting, but that does not mean that it is better than Clojure in general. Use both for the tasks they excel at. I&#039;ve never been at a loss for some library (especially since newLISP gives you easy access to every C library), and its community is very helpful.

@Mark, can you provide something to backup your claim? The fact remains, &lt;i&gt;something&lt;/i&gt; is causing newLISP&#039;s eval to beat all the others, and I wouldn&#039;t be surprised if dynamic scope plays a role in that.

@CyberED, I did mention it, if indirectly. See the link in the &quot;other goodies&quot; for &quot;Simple and powerful distributed computing.&quot; :)</description>
		<content:encoded><![CDATA[<p>@Brad, the chainshot code is very old and no longer runs on the current version of newLISP. For the final we did have to create a writeup discussing how our method worked, along with a full listing of the source. If you want that I have it available in PDF form, just shoot shoot an email to the address on the &#8220;About Us&#8221; page and I&#8217;ll send it to you. I don&#8217;t want to post it publicly because I believe the professor still uses this project for his classes, and I&#8217;m afraid it would encourage cheating.</p>
<p>@Tim, I&#8217;m not sure how to answer your question as that is sortof what this entire post was about: newLISP is better suited than Clojure is for scripting, but that does not mean that it is better than Clojure in general. Use both for the tasks they excel at. I&#8217;ve never been at a loss for some library (especially since newLISP gives you easy access to every C library), and its community is very helpful.</p>
<p>@Mark, can you provide something to backup your claim? The fact remains, <i>something</i> is causing newLISP&#8217;s eval to beat all the others, and I wouldn&#8217;t be surprised if dynamic scope plays a role in that.</p>
<p>@CyberED, I did mention it, if indirectly. See the link in the &#8220;other goodies&#8221; for &#8220;Simple and powerful distributed computing.&#8221; <img src='http://www.taoeffect.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>

