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