<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 23 May 2016 at 12:16, Lorenzo Laneve <span dir="ltr"><<a href="mailto:lore97drk@icloud.com" target="_blank">lore97drk@icloud.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I'm not talking about a new library instead of the libc, I'm talking about letting people create a library optimized for a specific frontend, regardless of the target.<br></blockquote><div><br></div><div>But HOW is that going to work for multiple languages, on multiple hardware platforms. And have you got ANY evidence that the extra call level between C++'s `operator new` and `malloc` actually causes noticeable overhead?<br><br>--<br></div><div>Mats <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5"><br>
> On May 23, 2016, at 1:06 PM, David Chisnall <<a href="mailto:David.Chisnall@cl.cam.ac.uk">David.Chisnall@cl.cam.ac.uk</a>> wrote:<br>
><br>
>> On 23 May 2016, at 12:00, Lorenzo Laneve <<a href="mailto:lore97drk@icloud.com">lore97drk@icloud.com</a>> wrote:<br>
>><br>
>> This is the point,<br>
><br>
> No, you are still failing to make a point.<br>
><br>
>> High-level OO languages don't use malloc(), they use something else.<br>
><br>
> That’s not entirely true.  They need to get the memory that they provide to programs from somewhere.  They may provide their own pool allocators, but they will often just call malloc() and then subdivide the returned chunk.  If they’re doing garbage collection, they will ask for a large number of pages and use that as a heap managed by the garbage collector.<br>
><br>
>> My idea was a C API with implementations of functions:<br>
>> For example<br>
>> Assuming I need to implement a function which allocates a new object.<br>
>> The API provides a really basic allocator function I can use to implement the complete function the high-level language needs.<br>
>><br>
>> void *__newobject(int class_size) {<br>
>> void *r = __alloc(class_size);<br>
>> // Add GC metadata here<br>
>> return r;<br>
>> }<br>
><br>
> You have still completely failed to explain why __alloc() is better than malloc().  If you wish to implement a language-specific allocator like this, then why would it want to call __alloc() from your hypothetical library instead of malloc(), provided by something like jemalloc(), which has over a decade of careful optimisation behind it to ensure that it scales well on multithreaded systems?<br>
><br>
>> This function will be included in the runtime library. Obviously this is a stupid example maybe a better implementation can be done.<br>
><br>
> Again, why would I, as the author of a high-level language, want to depend on your runtime library?  You have not given a compelling use case for someone wanting to depend on your hypothetical runtime library instead of the target platform’s libc.  If I write my language-specific code against libc, then other people will implement the platform-specific parts for me.  I can rely on C interfaces existing on pretty much any platform that I want to target, from desktop and server operating systems down to real-time embedded operating systems.  What does your proposal give me?<br>
><br>
> David<br>
><br>
</div></div></blockquote></div><br></div></div>