[cfe-users] using Clang for runtime compilation of a class

2015-10-03 Thread Georg Bartels via cfe-users

Dear Clang Users,

I have a particular programming problem, and several discussion forums 
suggested Clang as a possible solution. Being totally new to Clang and 
its community, is this the right place to ask questions about how to use 
Clang for a particular programming task? If not, where should I turn to?


In case this is the right forum for such questions, I continue 
describing my problem. Basically, I want to compile a class which 
inherits from a virtual interface class at runtime of my program. The 
program should then create an instance of this new class and use it 
through its interface.


Let me quickly sketch an example. The static version of my program would 
look like this:


class Base
{
  public:
virtual int calc() const;
};

class Derived: public Base
{
  public:
virtual int calc() const
{
  return 42;
}
};

int main()
{
std::cout << Derived().calc() << std::endl;
return 0;
}


The dynamic version (with two fuzzy lines of code) shall look like this:

class Base
{
  public:
virtual void calc() const;
};

int main()
{
  std::string code = read_derived_code();

  // two fuzzy lines for which I am looking for a solution
  SomeCompiledObjectClass o = compile(code);
  Base* d = SomeFactoryClass(o).createInstance();

  std::cout << d->calc() << std::endl;
  return 0;
}

Is Clang the right tool for solving my two fuzzy lines of code? If yes, 
which class should have a look at? If not, do you maybe know about 
another library/compile which can achieve this task?


Thanks a lot for your help!

Cheers,
Georg.

___
cfe-users mailing list
cfe-users@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users


Re: [cfe-users] using Clang for runtime compilation of a class

2015-10-03 Thread David Blaikie via cfe-users
On Sat, Oct 3, 2015 at 12:30 AM, Georg Bartels via cfe-users <
cfe-users@lists.llvm.org> wrote:

> Dear Clang Users,
>
> I have a particular programming problem, and several discussion forums
> suggested Clang as a possible solution. Being totally new to Clang and its
> community, is this the right place to ask questions about how to use Clang
> for a particular programming task? If not, where should I turn to?
>
> In case this is the right forum for such questions, I continue describing
> my problem. Basically, I want to compile a class which inherits from a
> virtual interface class at runtime of my program. The program should then
> create an instance of this new class and use it through its interface.
>
> Let me quickly sketch an example. The static version of my program would
> look like this:
>
> class Base
> {
>   public:
> virtual int calc() const;
> };
>
> class Derived: public Base
> {
>   public:
> virtual int calc() const
> {
>   return 42;
> }
> };
>
> int main()
> {
> std::cout << Derived().calc() << std::endl;
> return 0;
> }
>
>
> The dynamic version (with two fuzzy lines of code) shall look like this:
>
> class Base
> {
>   public:
> virtual void calc() const;
> };
>
> int main()
> {
>   std::string code = read_derived_code();
>
>   // two fuzzy lines for which I am looking for a solution
>   SomeCompiledObjectClass o = compile(code);
>   Base* d = SomeFactoryClass(o).createInstance();
>
>   std::cout << d->calc() << std::endl;
>   return 0;
> }
>
> Is Clang the right tool for solving my two fuzzy lines of code? If yes,
> which class should have a look at? If not, do you maybe know about another
> library/compile which can achieve this task?
>

This migth be the sort of thing that would escalate to cfe-dev and/or
llvm-dev.

What you're looking to do is JIT (Just In Time) compile some code. That
involves using clang to turn the source code into LLVM IR and then LLVM to
make machine code from that, put it in memory, make it executable, and call
some part of it.

Your two fuzzy lines of code would look slightly different (chances are
what you'd do is generate source code that included a private function that
return an instance, then you would JIT compile that function, indirectly
code generating anything in the class that was needed, etc).

I'm not sure where the best examples of the Clang half of this problem are.
But for the second have, LLVM has the Kaleidoscope tutorials (especially
the recently added ORC examples) that show how to use LLVM as a JIT
compiler. You shuold be able to wrap up all these APIs into a fairly simple
API for your one specific use case.

I think /maybe/ out there is an existing C++ rapid development environment
using Clang (essentially a C++ interpreter/interactive command prompt like
Python) that you might be able to grab the basics of "feed code to
compiler, get IR" from.

- David


>
> Thanks a lot for your help!
>
> Cheers,
> Georg.
>
> ___
> cfe-users mailing list
> cfe-users@lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users
>
___
cfe-users mailing list
cfe-users@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users