Calypso and the future of D
Walter Bright via Digitalmars-d
digitalmars-d at puremagic.com
Sun Jan 25 12:44:29 PST 2015
On 1/25/2015 7:16 AM, Elie Morisse wrote:
> On Sunday, 25 January 2015 at 10:18:34 UTC, Walter Bright wrote:
>> Next, in the README example, it says:
>>
>> $ clang++ -std=c++11 -c showcase.cpp -o showcase.cpp.o
>> $ ar rcs libshowcase.a showcase.cpp.o
>> $ ldc2 -cpp-args -std=c++11 -Llibshowcase.a -L-lstdc++ showcase.d
>>
>> Where's Calypso in that?
>
> On Sunday, 25 January 2015 at 11:12:50 UTC, Kelly wrote:
>> Calypso is part ldc2 and, as far as I understand it, is invoked via the
>> "-cpp-args" command line arg.
>
> -cpp-args is only to pass arguments to Clang while generating the precompiled
> header.
You see, nobody understands where Calypso is! Is it part of clang, part of ldc,
a standalone tool?
I feel like Noah:
https://www.youtube.com/watch?v=bputeFGXEjA 1:44
> Calypso registers itself as a "language plugin", and when parse.c encounters
parse.c is not part of my project. Where is parse.c?
> « import (ABC) xxx.yyy; » it asks the registered plugins if one of them handles
> the "ABC" language id. If that's the case it lets the plugin create the Import
> symbol by itself, for instance Calypso creates a cpp::Import which derives from
> Import and has a completely different load() method, which won't look for
> modules in .d files but inside the PCH generated by Clang.
A language plugin plugging into where?
> Here's the LangPlugin interface:
>
> class LangPlugin
> {
> public:
> // returns -1 if said lang isn't handled by this plugin, or its id number
> // to be passed to createImport otherwise
> virtual int doesHandleModmap(const utf8_t *lang) = 0;
>
> virtual Modmap *createModmap(int langId,
> Loc loc, Expression *arg) = 0;
>
> // returns -1 if said tree isn't handled by this plugin, or its id number
> // to be passed to createImport otherwise
> virtual int doesHandleImport(const utf8_t *tree) = 0;
>
> virtual Import *createImport(int treeId,
> Loc loc, Identifiers *packages, Identifier *id,
> Identifier *aliasId, int isstatic) = 0;
>
> // ===== - - - - - ===== //
>
> virtual Expression *getRightThis(Loc loc, Scope *sc, AggregateDeclaration *ad,
> Expression *e1, Declaration *var, int flag = 0) = 0;
>
> // ===== - - - - - ===== //
>
> virtual FuncDeclaration *buildDtor(AggregateDeclaration *ad, Scope *sc) = 0;
> virtual FuncDeclaration *buildCpCtor(StructDeclaration *sd, Scope *sc) = 0;
>
> // ===== - - - - - ===== //
>
> virtual CodeGen *codegen() = 0;
> };
>
> getRightThis, buildDtor and buildCpCtor are needed because they "override" the
> global functions with the same name.
>
> About Andrei's query about a general plugin system I don't know how one could be
> architectured. The hooks created for Calypso are specific to C++, so the help I
> could get is simply to be open to those hooks (which aren't really intrusive and
> don't uglify the code except for one or two that could probably be done
> differently:
> https://github.com/Syniurge/Calypso/commit/debd83f49363bf6805573d141a62b25d068d8a14)
>
>
> The problem with arbitrarily limiting where the hooks could occur is that it
> might force the plugins to copy and paste redundantly the base functions, which
> is bad especially for big semantic() functions.
>
> This probably deserves more thought, maybe there's a more elegant way waiting to
> be found.
More information about the Digitalmars-d
mailing list