Hey everyone -

In short, I have written a set of bindings for the library underlying the
Tiny C Compiler and I want to know what package name I should use. I would
prefer a top-level TCC package, in particular because I envision a large
set of derived modules. Thoughts?

David

*Motivation and features*

The Tiny C Compiler is a C compiler that can compile code for ARM and x86
processors. It was written to compile code very, very quickly, and compiles
code roughly 7x faster than gcc -O0, roughly 40x faster than gcc -O3. In
exchange for quick compile times, you get machine code that isn't as highly
optimized. But it's still machine code.

One of the coolest features of TCC is that if provides libtcc, which can
take a string of C code and compile it to machine code without writing
anything to disk. That's right, it's a *true C jit compiler*, just waiting
for some nice Perl goodness to wrap it up.

I've written bindings that expose the compiler's basic capabilities, such
as defining preprocessor symbols, linking to other libraries, adding
symbols to the symbol table, compiling the code, and retrieving compiled
symbols (i.e. functions). I've also created an extension framework for
module authors to wrap all of this into reusable pieces. For example, I've
already written extensions that (1) expose croak() to your compile context,
(2) provide a simple but useful data structure called StretchyBuffer, and
(3) allow you to write C functions that you can call directly from your
Perl code. I hope to some day wrap various C libraries with similar
extensions. For example, I would like to wrap GSL such that a programmer
can pull the GSL headers and symbols into their compiler context with a
single Perl command.

*Similar Projects*

The first module/namespace that comes to mind is Inline::C. Certainly, it
would be possible to create an Inline::TCC. However, Inline operates under
the assumption that compiling code is a relatively costly enterprise,
whereas my approach to TCC assumes that it is relatively cheap. When you
decide that compiling code is cheap, a whole set of possibilities open up
that you don't have otherwise. The whole extension system is perfect for
TCC, but would be particular to the TCC system, and would not apply
generally to the Inline system. As such, I don't think it's a very good fit
for the Inline family or namespace.

A second module/namespace is evident when you realize that a very primitive
set of TCC bindings already exist under
C::TCC<https://metacpan.org/module/C::TCC>.
Unfortunately, that project does not provide any extension mechanism, or
even a way for the underlying main() function to communicate with Perl.
Also, I have tried to contact the author with no success.

-- 
 "Debugging is twice as hard as writing the code in the first place.
  Therefore, if you write the code as cleverly as possible, you are,
  by definition, not smart enough to debug it." -- Brian Kernighan

Reply via email to