[Pythonmac-SIG] [ann] MacPythonOSA 0.1.0
Bob Ippolito
bob at redivi.com
Mon Apr 11 21:53:35 CEST 2005
On Apr 11, 2005, at 12:15 PM, has wrote:
> Bob wrote:
>
>>> - OSA uses Component Manager - not Apple events - to communicate
>>> with language components, so the MacPythonOSA component would need
>>> to handle each OSA call, stuff its arguments into an IPC message,
>>> send the message to the script daemon to process and wait for its
>>> response. (This is just the easy bit, btw.)
>>>
>>> - In addition, the daemon also has to be able to send various
>>> messages to the OSA component to be handled there concurrently:
>>> CallActiveProc, CreateAppleEvent, SendAppleEvent,
>>> RedispatchAppleEvent.
>>>
>>> - Finally, it needs to do all this without any support from the
>>> client app and without treading on its toes in any way. And, very
>>> preferably, without an onerous IPC overhead that would limit its
>>> usefulness.
>>
>> Python over IPC is going to be way faster than AppleScript ever was.
>
> Python+aem's actually a bit slower than AppleScript given most of the
> data conversion and event packing/unpacking is done in Python rather
> than C. (Not much though.) I think the main bottlenecks for AE-based
> IPC lie elsewhere; AS is guilty of a lot of things but I don't believe
> this is one of them.
Yes, the brokering of messages to and from an application may be
marginally faster in AS, but everything else is slow.
>> Mach is good at IPC anyway.
>
> Mach messages could be preferable to Apple events: less chance of
> stepping on others' toes, perhaps? I really don't know the first thing
> about Mach messaging though.
>
> How big and complex a job would you guess a Mach messaging-based
> system would be, given the requirements above?
You really shouldn't do mach directly, use sockets. Apple events use
mach ports to do IPC on a single machine anyway.
>>> Not trivial, and might get very sticky.
>>
>> I'd say the same thing about Python sub-interpreters.
>
> Of course. Like I say, there is no particularly good solution. If I
> thought the multi-process option would be trivial to do there wouldn't
> be any question, but it's not (especially not for me) so I'm just
> keeping my options wide open at this stage.
Well if you think that sub-interpreters are going to be any easier,
you're mistaken.
>> Python modules that use the PyGILState macros will likely be
>> incompatible with anything that does sub-interpreters, and likely a
>> lot of other ones will be too. Sub-interpreters get just shy of no
>> testing whatsoever. Many extensions aren't going to like being
>> initialized twice. PyObjC is definitely, without a doubt, going to
>> barf with sub-interpreters. Other stuff probably will too.
>
> Yep. The next question is how significant these limitations would be
> for users, given the types of tasks OSA languages are actually used
> for (a fairly small list)? I suppose a reasonable parallel would be
> with mod_python, another specialised Python environment that manages
> to find sub-interpreters useful for all their caveats. Mind, it's not
> competing against standard MacPython but filling a separate niche, so
> lack of support for even something major like PyObjC may not be such
> an issue as it seems. Just as long as it doesn't lack support for
> Carbon.AE...;)
>
> Compared to the IPC option, which I know is a big technical job, how
> much work and complexity would there be in implementing a
> sub-interpreter solution? If it's the sort of thing that could be
> gotten up and running in a few dozen lines of code then I'd be very
> tempted to do that for now. (mod_python might even provide a useful
> template for doing this; I'd need to look.) Even if it's only a
> stopgap measure to be subsequently be reworked at leisure for IPC, at
> least it'd give us something we can ship. Or will it be just as big
> and complex as the IPC option?
PyObjC support *is* a big deal. Presumably people will be wanting to
call into Mac OS X APIs from scripts that run in Mac applications!
>>>> Redirecting I/O at all sounds like a bad idea in the first place.
>>>
>>> stdin/stdout/stderr have no meaning within OSA:
>>
>> Yeah, they have no meaning -- so why bother mapping them to something
>> else?
>
> Because 'print' in Python serves pretty much the same purpose as 'log'
> in AppleScript, and since Python prints to stdout it seems logical to
> redirect stdout to send log events to the host process instead. It can
> still go to Console as well if folks think that'd be useful. The
> primary goal is to make MacPythonOSA a good OSA citizen, even when it
> means diverging from conventional Python behaviour; any useful
> Unixisms we can retain on top of its OSA-ness are simply a bonus.
So put something in the script's namespace that's called "log" and make
it do what log does.
-bob
More information about the Pythonmac-SIG
mailing list