Re: My thoughts on C# and gaming.
Bill Kelly <[email protected]>
| Newsgroups | gmane.games.devel.sweng |
|---|---|
| Message-ID | <[email protected]> |
Emil Dotchevski wrote: > On Wed, Jan 27, 2010 at 2:00 PM, Bill Kelly <[email protected]> wrote: >> Emil Dotchevski wrote: >>> On Wed, Jan 27, 2010 at 2:26 AM, Bill Kelly <[email protected]> wrote: >>>>> Being able to do things like this is not what makes a language great. >>>>> In fact I am not sure what makes most languages great. It seems to me >>>>> that most languages should have been a C++ library or a LISP library >>>>> instead -- all other differences are primarily syntactical in nature >>>>> and thus not very interesting as far as I am concerned. >> An example of a Ruby DSL, in this case an assembler for Common >> Intermediate Language bytecode: >> >> http://www.iunknown.com/2005/12/refining-the-ru.html >> >> require 'RbDynamicMethod' >> >> RbDynamicMethod::create_ruby_method('say_hello') do >> include 'System, System.Collections' >> ldstr 'Hello, World, int = {0}, double = {1}' >> ldc_i4 42 >> box 'Int32' >> ldc_r8 3.141592654 >> box 'Double' >> call 'static Console.WriteLine(String,Object,Object)' >> br_s 'end_of_method' >> ldstr 'Goodbye, World' >> call 'static Console.WriteLine(String)' >> label 'end_of_method' >> ldc_i4_4 >> ret >> end > > Compare such VM design to the simplicity of a LISP interpreter. LISP > is not just the grandfather of all dynamic languages, it is the most > basic and most powerful of the bunch. > > C++ is similarly basic and powerful in the "static type checking" > domain. In fact it is C++ that introduced the concept to begin with, > only later it was adopted by C. I apologize if we are talking at cross-purposes or if I have been unclear in conveying my point. In posting the above Ruby DSL, I was attempting to respond to your statement, "all other differences are primarily syntactical in nature and thus not very interesting as far as I am concerned." As cool as Lisp is--which I have gleaned more from reading about its design than from my meager experience with the language so far-- my understanding is that Lisp syntax won't allow an uncluttered DSL like the above to be parsed *as Lisp*. Ruby syntax, on the other hand, is flexible enough to parse the above *as Ruby*. As such, it is relatively common for Ruby programmers to create so-called internal DSLs rather than external DSLs, when the intent is simply to bring the programming language itself closer to the problem domain. (Obviously if the DSL is intended to be edited by an untrusted user, than an internal DSL would be a poor choice.) At the risk of belaboring the point, my argument is that Ruby's syntactical flexibility is useful, and as far as I know, can't readily be mimicked by the other languages we've been discussing. Regards, Bill _______________________________________________ Sweng-Gamedev mailing list [email protected] http://lists.midnightryder.com/listinfo.cgi/sweng-gamedev-midnightryder.com