Compiler as dll

Yigal Chripun yigal100 at gmail.com
Thu Jan 29 23:19:28 PST 2009


Bill Baxter wrote:
> On Fri, Jan 30, 2009 at 8:40 AM, Christopher Wright<dhasenan at gmail.com>  wrote:
>> Daniel Keep wrote:
>>> Personally, I think the best approach is to combine the two; write the
>>> hot spots in C, D or some other fast language, and all the glue in a
>>> dynamic language.  For all it's expressiveness, there are just some
>>> things that are easier to do with a dynamic language like Python or Lua
>>> than with D.
>> I keep hearing this stated, but I don't see very many use cases put forth
>> where it is clearly better to use a dynamic language. For me, I'm not
>> familiar with any dynamic languages to a sufficient degree to ever get an
>> advantage from using them, but if I see a sufficient use case, I'll change
>> that.
>
> Since Variants are kind of the basic variable type in dynamic
> languages, basically anywhere you can benefit from variants is a win
> for dynamic langs.   More generally there are times when you can't
> really know what types things are going to be till run time.   For
> instance dealing with a database.  In a dynamic lang you can create
> new aggregate types on the fly that are just like built-in types.   Or
> say you have an algorithm that can work on lots of different kinds of
> data types.  But you need to load the data from a file at runtime,
> including the type.  To do that with C++/D templates you have to
> pre-instantiate every possible type you want to support, even though
> most runs of your program will use only one or two instantiations of
> it.  With a dynamic language you don't have to pre-instantiate
> anything, so such things are a lot easier.
>
> In GUIs when you need to loosely couple different components, dynamic
> langs can make life a lot easier.  With std.signals in D, for
> instance, you have to be so anal about the call signatures.  And you
> may have trouble calling a delegate that takes a bool when the signal
> sends out an int, etc   Such things are rarely any problem for a
> dynamic language.  Variable numbers of args are also generally very
> easy to use.
>
> Basically imagine any annoyance you have with D or C++.  With a
> dynamic language it pretty much disappears. :-)   (But of course you
> will encounter new issues, like performance, or higher testing burden
> because no types are statically checked).
>
> One thing, though, that I noticed using Python, is that a lot of what
> is considered so easy-to-use about dynamic languages is just that
> people are more willing to use expensive (but elegant) abstractions.
> If you're willing to do things in a slightly less efficient way, you
> can make the code look pretty darn elegant.  I think this is the basis
> of much of Bearophile's libs.  Most of the time you really don't need
> that extra performance.  With a dynamic language there's no way to
> really get the performance, anyway, so you might as well use something
> elegant.   People seem to have a harder time throwing away their
> desire for efficiency when they know their language *is* capable of
> being efficient.  I'm certainly included in that group.   I would have
> a hard time convincing myself to code in D similar to how I code in
> Python.  It just feels so sloppy to me when it's in D, because I know
> D can do better.   But in truth, most of the code I write would
> probably perform fine even with large helpings of extra slop.
>
> --bb

Static languages can have Variant/box types that'll give most of the 
same functionality of dynamic languages. so, instead of instantiating 
list!(int), list!(string), etc, you can get one list!(Variant)..
C# provide such a feature with a keyword instead of rellying on templates.

The real difference is that static languages have mostly read-only RTTI. 
(Java provides a very limited capability to reload classes, IIRC)
a scripting language allows you to manipulate Types and instances at 
run-time, for example you can add/remove/alter methods in a class and 
affect all instances of that class, or alter a specific instance of a 
class. This cannot be done in a static language.



More information about the Digitalmars-d mailing list