Parse File at compile time, but not embedded
Pie? via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Jun 6 21:17:05 PDT 2016
On Tuesday, 7 June 2016 at 02:04:41 UTC, Mithun Hunsur wrote:
> On Monday, 6 June 2016 at 21:57:20 UTC, Pie? wrote:
>> On Monday, 6 June 2016 at 21:31:32 UTC, Alex Parrill wrote:
>>> [...]
>>
>> This doesn't seem to be the case. In a release build, even
>> though I never "use" the string, it is embedded. I guess this
>> is due to not using enum but enum seems to be much harder to
>> work with if not impossible.
>>
>>
>>> [...]
>>
>> Not necessarily, You chased that rabbit quite far! The data
>> your reading could contain sensitive information only used at
>> compile time and not meant to embed. For example, the file
>> could contain login and password to an SQL database that you
>> then connect, at compile time and retrieve that information
>> the disregard the password(it is not needed at run time).
>
> This is definitely possible, but it can depend on your
> compiler. If you use an enum, it'll be treated as a
> compile-time constant - so if you never store it anywhere (i.e.
> enum File = import('file.txt'); string file = File; is a no-no
> at global scope), you should be fine.
>
> If you do find yourself in the precarious situation of storing
> the data, then it's up to your compiler to detect that there
> are no runtime references to the data and elide it. LDC and GDC
> most likely do this, but I doubt DMD would.
>
> For safety, you should try and reformulate your code in terms
> of enums and local variables; this *should* work with DMD, but
> it's possible it's not smart enough to catch onto the fact that
> the function is never used at run-time (and therefore does not
> need to be included in the executable).
Ok, I will assume it will be able to be removed for release. It
is an easy check(just search if binary contains file info). I'm
sure an easy fix could be to write 0's over the data in the
binary if necessary.
If I use an enum dmd does *not* remove it in release build. I
will work on parsing the file using CTFE and hopefully dmd will
not try to keep it around, or it can be solved using gdc/ldc or
some other method.
More information about the Digitalmars-d-learn
mailing list