On 10/23/20 12:42 PM, data pulverizer wrote:
Hi all,

the `import` function allows a file to be read at compile time, which opens up great opportunities for (mostly binary) file IO, where data types can be coded into files - the user doesn't need to know data types ahead of time. As specified in my old blog article: https://www.active-analytics.com/blog/reading-idx-files-in-d/.

Binary files can be very large and reading the whole file at compile time is often unnecessary.

This isn't exactly the intended use for the function, but there it is. Since compile time read capability already exists and is useful, adding capability to be able to read only a portion of the file at compile time in a given location is advantageous and has utility.

For me it's not make-or-break, it just something very useful and I think has clear use case. Please let me know if there are aspects or alternatives I am missing.

I see no reason why the compiler can't do something special with:

enum slicedFile = import("foo.bin")[0 .. 100];

One thing that comes to mind -- most OSes support memory-mapped files. If import simply did a memory mapped file internally, and duplicated the string once actually used somewhere, then you can avoid full reading of the data until it's necessary.

-Steve

Reply via email to