[std.database] at compile time

Marco Leise Marco.Leise at gmx.de
Sat Oct 15 13:00:38 PDT 2011


Am 15.10.2011, 18:24 Uhr, schrieb Ary Manzana <ary at esperanto.org.ar>:

> On 10/14/11 5:16 PM, Graham Fawcett wrote:
>> On Fri, 14 Oct 2011 21:10:29 +0200, Jacob Carlborg wrote:
>>
>>> On 2011-10-14 15:26, Andrei Alexandrescu wrote:
>>>> On 10/14/11 6:08 AM, Jacob Carlborg wrote:
>>>>> On 2011-10-14 12:19, foobar wrote:
>>>>>> Has anyone looked at Nemerle's design for this? They have an SQL
>>>>>> macro which allows to write SQL such as:
>>>>>>
>>>>>> var employName = "FooBar"
>>>>>> SQL (DBconn, "select * from employees where name = $employName");
>>>>>>
>>>>>> what that supposed to do is bind the variable(s) and it also
>>>>>> validates the sql query with the database. This is all done at
>>>>>> compile-time.
>>>>>>
>>>>>> My understanding is that D's compile-time features are powerful
>>>>>> enough to implement this.
>>>>>
>>>>> You cannot connect to a database in D at compile time. You could some
>>>>> form of validation and escape the query without connecting to the
>>>>> database.
>>>>
>>>> A little SQL interpreter can be written that figures out e.g. the  
>>>> names
>>>> of the columns involved.
>>>>
>>>> Andrei
>>>
>>> But you still won't be able to verify the columns to the actual  
>>> database
>>> scheme?
>>
>> One approach would be to write a separate tool that connects to the
>> database and writes out a representation of the schema to a source
>> file. At compile time, the representation is statically imported, and
>> used to verify the data model.
>>
>> If we had preprocessor support, the tool could be run as such,
>> checking the model just before passing the source to the compiler.
>
> Yeah, but you need a separate tool.
>
> In Nemerle it seems you can do everything just in Nemerle...
>
> It would be awesome if CTFE would be implemented by JITting functions,  
> not by reinventing the wheel and implementing a handcrafted  
> interpreter...

I wonder if that would work well with cross-compiling. If you blindly JIT  
functions, they may end up using structs of the wrong size, or integers  
with different endianness. Compile for 64-bit on a 32-bit machine. What  
size is size_t during CTFE?


More information about the Digitalmars-d mailing list