Re: Do everything in Java…
Iain Buclaw via Digitalmars-d
digitalmars-d at puremagic.com
Wed Dec 10 08:56:15 PST 2014
On 10 December 2014 at 14:16, Paulo Pinto via Digitalmars-d
<digitalmars-d at puremagic.com> wrote:
> On Wednesday, 10 December 2014 at 12:24:56 UTC, Tobias Pankrath wrote:
>>
>> On Wednesday, 10 December 2014 at 10:24:53 UTC, Paulo Pinto wrote:
>>>
>>> On Wednesday, 10 December 2014 at 08:43:49 UTC, Kagamin wrote:
>>>>
>>>> On Tuesday, 9 December 2014 at 20:55:51 UTC, Dicebot wrote:
>>>>>
>>>>> Because you don't really create a template that way but workaround
>>>>> broken function behavior. It is not the usage of empty templates that is bad
>>>>> but the fact that plain functions remain broken => not really a solution.
>>>>
>>>>
>>>> You can compile against phobos sources instead of interface files.
>>>
>>>
>>> This cannot be the solution if D aspires to be used in contexts where
>>> binary libraries are used.
>>>
>>> C++ is excused to have template code in headers given the primitive
>>> tooling, but languages like Ada and Modula-3 support proper information
>>> hiding for generic code.
>>>
>>> --
>>> Paulo
>>
>>
>> A binary blob requirement makes no sense for a standard library.
>
>
> And yet that has been the way it always worked in the Mesa linage of
> languages.
>
> Mesa, Modula-2, Modula-3, Ada, Oberon, Object Pascal ....
>
>>
>> Would you like to explain how the proper information hiding support works
>> for generic code in Ada? I'm really curious how that could work in D.
>
>
> The libraries contain the required metadata for symbol tables and code
> locations that need to be extracted into the executable/library.
>
> Package definition files contain the minimum information the compiler needs
> to know to search for the remaining information.
>
> Example,
>
> -- Package header
> generic
> type Element_T is private;
> package functions is
> procedure Swap (X, Y : in out Element_T);
> end functions;
>
> -- Package body
> package body functions is
> procedure Swap (X, Y : in out Element_T) is
> begin
> -- implementation
> end Swap;
> end functions;
>
> -- importing it
> declare
> package functions_Int is new functions (Int);
> use functions_Int;
> x, y : Int;
> begin
> x := 1;
> y := 2;
> Swap(x, y);
> end;
>
>
> Lots of options are possible when the C compiler and linker model aren't
> being used.
In D, this should be akin to:
// Package header
module functions;
void Swap(T)(out T x, out T y);
// Package body
module functions;
void Swap(T)(out T x, out T y)
{
// Implementation
}
// Importing it
import functions : Swap;
void main()
{
int x = 1;
int y = 2;
Swap(x, y);
}
Iain
More information about the Digitalmars-d
mailing list