DMD 1.005 release

Yauheni Akhotnikau eao197 at intervale.ru
Thu Feb 8 00:47:52 PST 2007


On Thu, 08 Feb 2007 10:08:29 +0300, Walter Bright  
<newshound at digitalmars.com> wrote:

> Yauheni Akhotnikau wrote:
>> I'm use Ruby a lot and much metaprogramming things done via creating  
>> strings with Ruby code and evaluating it by various 'eval' methods. It  
>> is very simple method -- easy in writting, debugging and testing. And  
>> there isn't two different Ruby -- only one language.
>
> That's possible because Ruby is interpreted - its compilation  
> environment is also the execution environment.
>
> But D is a statically compiled language, so there's a distinction  
> between a compile time variable, and a runtime variable.

Yes, I undertand that. But that is my point: in Ruby there are three steps:
1) use ordinal Ruby code to produce string with another ordinal Ruby code;
2) translation of string with ordinal Ruby code into bytecode;
3) run of bytecode.

In D we now have steps 2) and 3) implemented: step 2) is a compilation  
phase. The question is: how to perform step 1)?

If it is necessary to use special constructs to build strings with ordinal  
D code then I will prefer to use pre-compile-time generation with help of  
external tools.

For example, in last four years I have used home-made serialization  
framework for C++. It requires special description of serializable type in  
special Data Definition Language, like this:

{type {extensible}	handshake_t
   {attr	m_version {of oess_1::uint_t}}
   {attr	m_client_id {of std::string}}

   {extension
     {attr  m_signature
        {of signature_setup_t}
        {default {c++ signature_setup_t()}}
     }
     {attr  m_compression
        {of compression_setup_t}
        {default {c++ compression_setup_t()}}
     }

     {extension
        {attr m_traits
           {stl-map {key oess_1::int_t}}
           {of handshake_trait_shptr_t}
           {default {c++ std::map< int, handshake_trait_shptr_t >()}
               {present_if {c++ m_traits.size()}}
           }
        }
     }
   }
}

The library for parsing such s-expression is about 7K lines in C++ and  
2.5K lines in Ruby. Comparable size it will have in D. But, if I want to  
use such DDL as DSL in mixin expression I must write two version of  
s-expression parsing -- for run-time and compile-time :(

But if I can use ordinal D code at compile time then the situation is much  
better.

-- 
Regards,
Yauheni Akhotnikau



More information about the Digitalmars-d-announce mailing list