Would Lcl be better if it was in D?
Paulo Pinto via Digitalmars-d
digitalmars-d at puremagic.com
Sun Mar 1 23:59:10 PST 2015
On Monday, 2 March 2015 at 03:51:45 UTC, Taylor Hillegeist wrote:
> On Monday, 2 March 2015 at 01:22:58 UTC, ketmar wrote:
>> On Sun, 01 Mar 2015 22:40:28 +0000, Taylor Hillegeist wrote:
>>
>>> But still the question was about smaller executable when
>>> compiling d
>>> code. The linker needs to know which .o files to include, the
>>> pascal
>>> notation is basically:
>>>
>>> uses
>>> thisBigoleThing, ThisOtherBigOleThing, AndMeToo;
>>>
>>> I assume the linker just auto-magically includes the entire
>>> thing even
>>> if your only using a single function or value from each. Then
>>> again
>>> perhaps I am wrong.
>>
>> FreePascal learnt the "smart linking" trick years ago, so only
>> actually
>> used functions ends in linked binary. but LCL is very big
>> library, and FPC
>> can't drop out unused virtual methods, so resulting binaries
>> are big.
>>
>> with D we have the same situation, maybe even worse due to
>> template
>> instantiation. compiler is able to merge identical template
>> instanses,
>> but... empty `void main () {}` is ~200 KB in D (GNU/Linux,
>> x86). adding
>> simple `import std.stdio : writeln;` increases binary size to
>> ~300 KB.
>> and adding `writeln("hello!");` increases binary size to ~350
>> KB.
>>
>> D binaries are big. ;-)
>
> That seems like alot of KB for just a little bit of code. I
> wasn't aware that void main(){} was anything but entry
> pointer...
>
> ;; pseudo-assembly-language
> ;; main(argc, argv, envp); call
>
> push envp ;; rightmost argument
> push argv ;;
> push argc ;; leftmost argument ends up on top of stack
>
> call main
>
> I guess I'm confused about what is in there and why?
Even C startup code is more than just that.
You need to set up the runtime, initialize global variables, run
functions marked to execute before main.
--
Paulo
More information about the Digitalmars-d
mailing list