I think, being as GNUStep is not limited by the limitations of OS X - why
is an extension with while descriptor sources not under consideration
On 4 Feb 2014 13:56, "Luboš Doležel" <lu...@dolezel.info> wrote:

> On Tue, 4 Feb 2014 10:05:59 +0000, Niels Grewe wrote:
>
>> The ability to invoke blocks doesn’t really commit you to using clang
>> (-base has support code to invoke blocks when compiled with GCC) you
>> only need it when you want to create blocks (does CFRunLoop need to do
>> that? I think it might not…). So the question is rather whether we
>> could rely on a compatible libBlocksRuntime being reasonably
>> widespread (libdispatch usually isn’t the issue, but you need the
>> version libBlocksRuntime that exports is symbols weakly so that
>> libobjc2 can override them). In other words: I don’t think
>> backwards-compatibility is as important for corebase as it is for
>> -base.
>>
>
> Creating blocks in CoreBase can be avoided, but as usual, it makes things
> easier. I'm just upset by the fact that supporting a compiler, which does
> not and probably will not stay current with the technologies used on OS X,
> is stopping us from becoming more efficient.
>
> Whenever I see someone using libBlocksRuntime, I tell him to simply use
> libobjc2. But then again, it is up to whoever compiles to code (end user,
> distro maintainer) to make the right choices for the right packages.
>
>  I have one comment about the
>> ‘weakly-load-NSCFRunLoop-if-corebase-is-also-linked’ thing: I think
>> it’s a good idea in general, but how would we handle cases where you
>> start up without corebase, and during runtime you load a bundle that
>> is linked against it? That might be a bit tricky to get right…
>>
>
> Good point. I suppose that this case will not work, until one day APIs are
> layered correctly and NSRunLoop always uses CFRunLoop.
>
> =============
>
> Now to the technical topics. I imagine the following:
>
> All CFRunLoops:
>
> * Have a pipe descriptor pair and the run loop polls the reading end. This
> is so that the run loop can be woken up to do any work (CFRunLoopWakeUp();
> check for timers fired, sources fired etc.).
>
> (remember: CF main loop doesn't poll any application supplied fds, run
> loop sources do this on their own)
>
> Main CFRunLoop additionally:
>
> * Uses dispatch_get_main_queue_eventfd_np/dispatch_main_queue_drain_np to
> get and use an extra pollable fd. (dispatch_main() cannot be used,
> otherwise e.g. CFRunLoopStop wouldn't be implementable.)
>
> Timers:
>
> * Timers are implemented as libdispatch sources handled in a separate
> queue.
> * Timer handlers only mark the timer as fired and attempt to wake up the
> associated CFRunLoop.
>
> Other run loop sources:
>
> * Socket-based run loop sources use libdispatch's global queue (or
> possibly a private queue?) for its own polling.
>
> What do you think?
>
> --
> Luboš Doležel
>
>
> _______________________________________________
> Gnustep-dev mailing list
> Gnustep-dev@gnu.org
> https://lists.gnu.org/mailman/listinfo/gnustep-dev
>
_______________________________________________
Gnustep-dev mailing list
Gnustep-dev@gnu.org
https://lists.gnu.org/mailman/listinfo/gnustep-dev

Reply via email to