On Mon, 15 Aug 2011 01:19:29 +0200, Jonathan M Davis <[email protected]> wrote:

On Monday, August 15, 2011 01:12:20 Martin Nowak wrote:
I've implemented a prototype of the DIP11 draft.
http://www.wikiservice.at/d/wiki.cgi?LanguageDevel/DIPs/DIP11
https://github.com/dawgfoto/dmd/tree/DIP11

-- Restrictions --
  - It doesn't check for conflicting qualified imports (-Iacme=/path1
-Iacme.a=/path2)
  - pragma(importpath, "<import-path>") must come lexically before the
import
  - Untested on Windows

-- Some outcome --
  - Using '=' in [module.or.package=]<path-or-url> could be slightly
ambiguous for '-Ihttp://acme.org?format=raw'.
- Url syntax collides with import path lists. Currently it is allowed to specify -I/path1/import:/path2/import for POSIX. I've deactivated that for
now.

    Both can be disambiguated so they are not very severe.

- Using 'pragma(lib, "someLib")' in an imported source has no effect, as
long as the imported module is not compiled.
  - Overall this is very limited as even the example below will only
compile up to a linker error.

-- Testing --
  - build dmd from DIP11 branch
  - get download.py: http://codepad.org/XAvSN505
  - get test.d: http://codepad.org/BILAwzHj
  - add 'DOWNLOADTOOL= path/to/download.py' to your /etc/dmd.conf
  - compile: dmd test.d

-- Brainstorming --
We need to define a compilation model for the imported files.

One solution could be to generally change the semantics of importing to
mean if the
imported file is a source (*.d) build an object for that module if it is a
header (*.di) don't
build an object and leave it to the user to supply binary data.

That's not going to work. That assumes that libraries use .di files, which isn't necessarily true. If a library just uses .d files, then that means that
you're recompiling modules from the library when you don't need to (and
probably shouldn't be since, I would expect that you'd end up with complaints
about symbols being defined twice when you link in the library).

- Jonathan M Davis

Yes I'm aware of this. Prominent example being phobos vs. druntime.
But the idea was exactly to change this (in the long-term/opt-in).
Requiring libraries to be bundled with .di files.

What is needed for DIP11 to work is some sort of pragma(build, pkg.module) but - it should not require redundant declarations (already have pragma(importpath, "pkg"))
 - one should be able to define the build model in the remote sources

martin

Reply via email to