On Tuesday, 26 November 2019 at 03:55:24 UTC, mipri wrote:
On Tuesday, 26 November 2019 at 03:06:52 UTC, Omar wrote:
the page here https://dlang.org/spec/function.html
suggests you can implement a function in a different file
...
mentioned the endeavour of no-bodied-functions as a way of presenting a black-box type of interface.

oh, that's what you were asking.

Consider:

  $ cat interface/references.d
  module references;

  string greeting();

  $ cat implementation/references.d
  module references;

  string greeting() {
      return "Hello, Dave";
  }

  $ cat main.d
  import references;

  void main() {
      import std.stdio: writeln;
      writeln(greeting);
  }

And trying to build it:

  $ dmd -c implementation/references.d
  $ dmd -Iinterface -c main.d
  $ dmd main.o references.o
  $ ./main
  Hello, Dave

The idiomatic way to do that is to put the interface in a "D interface" file (.di) and the implementation in a .d file:

foo/bar.di
foo/bar.d

Then, when importing foo.bar, the compiler will pick up the .di file automatically.

And you can actually have the compiler generate the interface file for you from a source file with the -H option.

Reply via email to