tooling quality and some random rant
Paulo Pinto
pjmlp at progtools.org
Sun Feb 13 13:15:48 PST 2011
Hi,
now I am conviced. Thanks for the explanation.
--
Paulo
"Walter Bright" <newshound2 at digitalmars.com> wrote in message
news:ij99gb$18fm$1 at digitalmars.com...
> Paulo Pinto wrote:
>> Why C and not directly D?
>>
>> It is really bad adversting for D to know that when its creator came
>> around to rewrite the linker, Walter decided to use C instead of D.
>
> That's a very good question.
>
> The answer is in the technical details of transitioning optlink from an
> all assembler project to a higher level language. I do it function by
> function, meaning there will be hundreds of "hybrid" versions that are
> partly in the high level language, partly in asm. Currently, it's around
> 5% in C.
>
> 1. Optlink has its own "runtime" system and startup code. With C, and a
> little knowledge about how things work under the hood, it's easier to
> create "headless" functions that require zero runtime and startup support.
> With D, the D compiler will create ModuleInfo and TypeInfo objects, which
> more or less rely on some sort of D runtime existing.
>
> 2. The group/segment names emitted by the C compiler match what Optlink
> uses. It matches what dmd does, too, except that dmd emits more such
> names, requiring more of an understanding of Optlink to get them in the
> right places.
>
> 3. The hybrid intermediate versions require that the asm portions of
> Optlink be able to call the high level language functions. In order to
> avoid an error-prone editting of scores of files, it is very convenient to
> have the function names used by the asm code exactly match the names
> emitted by the compiler. I accomplished this by "tweaking" the dmc C
> compiler. I didn't really want to mess with the D compiler to do the same.
>
> 4. Translating asm to a high level language starts with a rote
> translation, i.e. using goto's, raw pointers, etc., which match 1:1 with
> the assembler logic. No attempt is made to infer higher level logic. This
> makes mistakes in the translation easier to find. But it's not the way
> anyone in their right mind would develop C code. The higher level
> abstractions in C are not useful here, and neither are the higher level
> abstractions in D.
>
> Once the entire Optlink code base has been converted, then it becomes a
> simple process to:
>
> 1. Dump the Optlink runtime, and switch to the C runtime.
>
> 2. Translate the C code to D.
>
> And then:
>
> 3. Refactor the D code into higher level abstractions.
>
>
> I've converted a massive code base from asm to C++ before (DASH for Data
> I/O) and I discovered that attempting to refactor the code while
> translating it is fraught with disaster. Doing the hybrid approach is much
> faster and more likely to be successful.
>
>
> TL,DR: The C version is there only as a transitional step, as it's
> somewhat easier to create a hybrid asm/C code base than a hybrid asm/D
> one. The goal is to create a D version.
More information about the Digitalmars-d
mailing list