Re: extern(C) in druntime

2014-11-14 Thread Martin Nowak via Digitalmars-d
On 11/10/2014 03:48 PM, Steven Schveighoffer wrote: Opinion from those in the know: When extern(C) is used in druntime, my understanding is that the reason is twofold: 1. Because the compiler requires certain symbols for hooks. 2. To get around some requirements that "druntime knows better", su

Re: extern(C) in druntime

2014-11-11 Thread Steven Schveighoffer via Digitalmars-d
On 11/11/14 11:01 AM, Dicebot wrote: On Monday, 10 November 2014 at 23:22:00 UTC, Sean Kelly wrote: On Monday, 10 November 2014 at 23:08:55 UTC, Logan Capaldo wrote: So just to be clear, there are _some_ legitimate uses of extern (C) in druntime, yes? rt_init/rt_term, rt_loadLibrary

Re: extern(C) in druntime

2014-11-11 Thread Dicebot via Digitalmars-d
On Monday, 10 November 2014 at 23:22:00 UTC, Sean Kelly wrote: On Monday, 10 November 2014 at 23:08:55 UTC, Logan Capaldo wrote: So just to be clear, there are _some_ legitimate uses of extern (C) in druntime, yes? rt_init/rt_term, rt_loadLibrary, thread_init(? think this one can be

Re: extern(C) in druntime

2014-11-10 Thread Sean Kelly via Digitalmars-d
On Monday, 10 November 2014 at 23:08:55 UTC, Logan Capaldo wrote: So just to be clear, there are _some_ legitimate uses of extern (C) in druntime, yes? rt_init/rt_term, rt_loadLibrary, thread_init(? think this one can be bootstrapped from D code), ...? Yes. There are a few functions meant

Re: extern(C) in druntime

2014-11-10 Thread Logan Capaldo via Digitalmars-d
wrote: Right now question is, however, are there any legitimate uses of `extern(C)` in druntime or those all can be replaced with `pragma(mangle, "XXX") extern(D)`? [snip] What about things that are "meant" to be called from C? E.g. `rt_init`/`rt_term`? Those should remain

Re: extern(C) in druntime

2014-11-10 Thread Steven Schveighoffer via Digitalmars-d
`extern(C)` in druntime or those all can be replaced with `pragma(mangle, "XXX") extern(D)`? I don't think there's any reason to use extern (C) in druntime any more. I guess that nails it, will make a PR What about things that are "meant" to be called from C? E.g

Re: extern(C) in druntime

2014-11-10 Thread Logan Capaldo via Digitalmars-d
On Monday, 10 November 2014 at 19:44:05 UTC, Dicebot wrote: On Monday, 10 November 2014 at 17:48:04 UTC, Sean Kelly wrote: On Monday, 10 November 2014 at 16:59:47 UTC, Dicebot wrote: Right now question is, however, are there any legitimate uses of `extern(C)` in druntime or those all can be

Re: extern(C) in druntime

2014-11-10 Thread Dicebot via Digitalmars-d
On Monday, 10 November 2014 at 17:48:04 UTC, Sean Kelly wrote: On Monday, 10 November 2014 at 16:59:47 UTC, Dicebot wrote: Right now question is, however, are there any legitimate uses of `extern(C)` in druntime or those all can be replaced with `pragma(mangle, "XXX") extern(D)`?

Re: extern(C) in druntime

2014-11-10 Thread Sean Kelly via Digitalmars-d
On Monday, 10 November 2014 at 16:59:47 UTC, Dicebot wrote: Right now question is, however, are there any legitimate uses of `extern(C)` in druntime or those all can be replaced with `pragma(mangle, "XXX") extern(D)`? I don't think there's any reason to use extern (C) in druntime any more.

Re: extern(C) in druntime

2014-11-10 Thread Dicebot via Digitalmars-d
es.dlang.org/show_bug.cgi?id=8887 (with possibly making any differences compile-time error initially for soft transition) Right now question is, however, are there any legitimate uses of `extern(C)` in druntime or those all can be replaced with `pragma(mangle, "XXX") extern(D)`?

Re: extern(C) in druntime

2014-11-10 Thread Sean Kelly via Digitalmars-d
On Monday, 10 November 2014 at 15:52:56 UTC, Steven Schveighoffer wrote: On 11/10/14 10:40 AM, Dicebot wrote: This was an answer to "you can't forward declare extern (D) functions" I think Sean's point is that is another historical reason why we used extern(C), back when pragma(mangle) didn't

Re: extern(C) in druntime

2014-11-10 Thread Steven Schveighoffer via Digitalmars-d
On 11/10/14 10:40 AM, Dicebot wrote: This was an answer to "you can't forward declare extern (D) functions" I think Sean's point is that is another historical reason why we used extern(C), back when pragma(mangle) didn't exist. -Steve

Re: extern(C) in druntime

2014-11-10 Thread Dicebot via Digitalmars-d
This was an answer to "you can't forward declare extern (D) functions"

Re: extern(C) in druntime

2014-11-10 Thread Dicebot via Digitalmars-d
??? $ cat a.d module a; pragma(mangle, "foo") extern(D) void foo() { import std.stdio; writeln("in extern foo"); } $ cat b.d module b; pragma(mangle, "foo") extern void foo(); void main() { foo(); } $ ./a in extern foo

Re: extern(C) in druntime

2014-11-10 Thread Sean Kelly via Digitalmars-d
Also, eliminating compile time dependencies between namespaces. Everything can import core.*, but nothing outside rt is allowed to import rt modules and nothing outside gc is allowed to import gc modules. This allows us to theoretically choose the compiler runtime and GC at link time and also a

extern(C) in druntime

2014-11-10 Thread Steven Schveighoffer via Digitalmars-d
they are all implemented in D. I don't want to limit those functions to only things that C supports. Would it make sense to change to use pragma(mangle)? or is there some other reason why we use extern(C) in druntime? I'm asking the old veterans who may know some of the history, i.e. Wa