Do everything in Java…
Paulo Pinto via Digitalmars-d
digitalmars-d at puremagic.com
Wed Dec 10 10:15:48 PST 2014
On Wednesday, 10 December 2014 at 16:56:24 UTC, Iain Buclaw via
Digitalmars-d wrote:
> 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
But the current object model doesn't support it, right?
At least my understanding is that you need to have the full body
visible.
--
Paulo
More information about the Digitalmars-d
mailing list