View mode: basic / threaded / horizontal-split · Log in · Help
November 20, 2012
Precompiled libraries in D
Apologies if this is a "generic D" question, but I can't find an answer 
in any of the D documentation, and folks on this list are quite helpful.

The precompiled-library-and-header paradigm is very common in C. Is 
there a similar one in D? I've used wxd, which is a port of wxWidgets to 
D, and it builds a static .a library, which gets you half there, but 
there is no equivalent header file that gets included - just the wx.d 
file. Basically, if I'm linking against a D library, from where does the 
user-readable documentation for that library come? Is it incumbent upon 
the provider to provide Doxygen-style documentation?

(This came out of a lunchtime discussion at work - the statement was 
made that "at least the C headers keep you honest. You can't use it 
without something that a human can read". Not technically true, but the 
point is well taken. While complete source code availability doesn't 
matter for many cases (purely open source or purely internal 
commercial), it does matter when you have a company writing a library to 
be used by a client and they want a binary library + an API definition 
exposed via a header file).

Thanks in advance.
-- 
Matthew Caron, Software Build Engineer
Sixnet, a Red Lion business | www.sixnet.com
+1 (518) 877-5173 x138 office
November 21, 2012
Re: Precompiled libraries in D
On 2012-11-20 22:58, Matthew Caron wrote:
> Apologies if this is a "generic D" question, but I can't find an answer
> in any of the D documentation, and folks on this list are quite helpful.

This is a fairly generic D question which would have fit better in the 
digitalmars.D newsgroup. But I'll answer it here anyway :)

> The precompiled-library-and-header paradigm is very common in C. Is
> there a similar one in D? I've used wxd, which is a port of wxWidgets to
> D, and it builds a static .a library, which gets you half there, but
> there is no equivalent header file that gets included - just the wx.d
> file. Basically, if I'm linking against a D library, from where does the
> user-readable documentation for that library come? Is it incumbent upon
> the provider to provide Doxygen-style documentation?

The precompiled-library-and-header paradigm can be used in D as well. 
It's just not that common. In D there is, what's called, D interface 
files (.di) in stead of header files. You can do any of

* Just use the source together with a pre-compiled library (should 
probably be renamed to .di in that case)
* Manually create di files
* Automatically generate di files with the -H flag (I don't know if GDC 
uses the same flag for this)

Generating documentation from ddoc (similar to Doxygen) comments is 
preferred to do, but not many libraries do that. You can use the -D flag 
to do that, if the library do have ddoc comments.

> (This came out of a lunchtime discussion at work - the statement was
> made that "at least the C headers keep you honest. You can't use it
> without something that a human can read". Not technically true, but the
> point is well taken. While complete source code availability doesn't
> matter for many cases (purely open source or purely internal
> commercial), it does matter when you have a company writing a library to
> be used by a client and they want a binary library + an API definition
> exposed via a header file).
>
> Thanks in advance.

See above.

-- 
/Jacob Carlborg
November 21, 2012
Re: Precompiled libraries in D
On 11/21/2012 02:24 AM, Jacob Carlborg wrote:
> This is a fairly generic D question which would have fit better in the
> digitalmars.D newsgroup.

Ah. I will subscribe to it.

> But I'll answer it here anyway :)

Thank you very much.

> The precompiled-library-and-header paradigm can be used in D as well.
> It's just not that common. In D there is, what's called, D interface
> files (.di) in stead of header files. You can do any of
>
> * Just use the source together with a pre-compiled library (should
> probably be renamed to .di in that case)
> * Manually create di files
> * Automatically generate di files with the -H flag (I don't know if GDC
> uses the same flag for this)

Ah, thank you.

Now that I knew what I was looking for, I was able to find it in 
Alexandescu's book (though, in hindsight, the index item "header files" 
points you in the correct direction). For the archives, section 11.1.9 
Module Summaries starting on p 349 explains it well.

> Generating documentation from ddoc (similar to Doxygen) comments is
> preferred to do, but not many libraries do that. You can use the -D flag
> to do that, if the library do have ddoc comments.

Yeah, the issue with this (politically) is that the idea of providing a 
library + doxygen style output to customers makes many at my firm recoil 
in horror. Even though they see the value in doxygen docs, and we 
provide them to our customers, the lack of a .h file (or equivalent) is 
seen as making D unacceptable for real work. Now that I can point to .di 
files, the powers that be are happy - even if they are never used.

A small group of us are actually making a lot of headway in promoting D. 
Getting a working cross compiler built helped a lot, and its inclusion 
into mainline gcc will help even more, because it then would likely 
trickle into toolchains provided by chip vendors (since all they do 
these days is build gcc with all the options turned on). This all 
amounts to D being able to be a real, viable option for development.

(Note that our "embedded" systems are actually industrially ruggedized 
Linux machines, so we're not talking bare metal RTOS here. Hell, we run 
Perl in them.)

Thanks for the help.

-- 
Matthew Caron, Software Build Engineer
Sixnet, a Red Lion business | www.sixnet.com
+1 (518) 877-5173 x138 office
Top | Discussion index | About this forum | D home