Is there any reasons to not use "mmap" to read files?
Basile B.
b2.temp at gmx.com
Sat Feb 12 17:19:47 UTC 2022
On Saturday, 12 February 2022 at 16:48:26 UTC, user1234 wrote:
> On Saturday, 12 February 2022 at 13:17:19 UTC, rempas wrote:
>> On Wednesday, 9 February 2022 at 02:07:05 UTC, user1234 wrote:
>>>
>>> `std.file.readText()` is just fine... your really want to do
>>> an os with call `fgetc` for every single byte that has to be
>>> read ?
>>
>> Good point! I was really wondering if "fgetc" does a system
>> call every single time that it is called or if the text is
>> buffered just like with "printf". I will use "read" in any
>> case just to be sure tho. I don't want to use Phobos tho so I
>> cannot use "file.readText". Thank you for your time!
>
> I think that nowadays fgetc does not make sense anymore, maybe
> in the past when the amount of memory available was very
> reduced... source files are 100 kb top. You can load 100 of
> them, the fingerprint is still small. What will likely consume
> the more is the AST.
>
> Otherwise readText is easy to translate, it's just fopen then
> fread then fclose, + a few checks for the errors, not a big
> deal to translate.
The problem with phobos and if used to program a compiler is
_dynamic arrays_, because of how they are managed.
With Styx I had used phobos because I knew the memory management
was designed to work similarly with arrays, i.e functions can
return arrays, but using the "sink" style would have not caused
any problem (by "sink" style I mean when the buffer is owned by
the calling frame, and passed as parameter, e.g like in many
C-style APIs)
Then the amount of phobos code to translate in order to bootstrap
[was
minimal](https://gitlab.com/styx-lang/styx/-/raw/master/src/system.sx):
std.paths:
- isAbsolute
- isDir
- isFile
- dirName
- baseName
- exists
- cwd
- dirEntries
- setExtension
std.files:
- read (or readText)
- write (not even used I realize now)
std.process
- pipeProcess (actually just used to optionally --run after
compile)
std.getopt
- getopt (tho libc functions for that could have been used... dmd
itself doesnt have any special functions for the arg processing
in the driver IIRC)
Add to this a few things from libc and unistd and you're good.
You dont need more.
More information about the Digitalmars-d
mailing list