RE: floor op
From: Lars Balker Rasmussen [mailto:[EMAIL PROTECTED] Burnett, David [EMAIL PROTECTED] writes: the idea of having a 'floor' op. I've implemented an op for floor on native numbers. Feel free to give it a whirl. (I'm not sure if floor(-0.0) is meant to return -0.0 or not, but it does.) Floor is supposed to return the lowest 'integer' not greater than the original value, so floor(-1.0) returns (-1.0) therefore ignoring the oddity of there being a -0.0 in the first place it make sense that floor(-0.0) returns -0.0 :-) So I now I have a working my perlin noise (with turbulence) implementation written in pure pasm :-) Cool! So, how does it perform? ;) Slow :-) But I'm making no claims on how good the code is. It's my first, from scratch assembler program ever. On the 2.4GHz P4 at work, its 63s to create a 1001x10001 pgm using no optimisation options when running parrot, from the POW distribution, which also means no JIT. My Java version creates a 1001x10001 PNG in around 10 seconds. There are big differences in IO (the Java version is buffered) to consider and the Java version probably has optimised floor and rand capability :-) Dave == Information in this email and any attachments are confidential, and may not be copied or used by anyone other than the addressee, nor disclosed to any third party without our permission. There is no intention to create any legally binding contract or other binding commitment through the use of this electronic communication unless it is issued in accordance with the Experian Limited standard terms and conditions of purchase or other express written agreement between Experian Limited and the recipient Experian Limited (registration number 653331) Registered office: Talbot House, Talbot Street, Nottingham NG1 5HF
parrotZ license issues (was Re: Parrot Z-machine)
Sigh. My plan in starting this discussion was not to talk about licenses. But it sounds like it's safer not to use Winfrotz if we don't have to. I note that Games::Rezrov is same terms as Perl itself license. However, in his effort to make Rezrov run fast, the author (by his own admission) obfuscated the code. In addition, I may want to copy some pieces of the C code wholesale for implementing certain opcodes, so it'll be a lot easier to have stealable C code than translating obfuscated Perl back into C. Jzip, meanwhile, says: Copyright (c) 2000 John D. Holder. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. To my untrained eyes, that sounds safer, since it appears to be less restrictive than either GPL or Artistic. Now let's get this license stuff out of the way so I can get to actual coding! -Amir p.s. re the email subject: For now, I'm calling the Parrot Z-machine project parrotZ. It's simple, it expresses that it's Z-machine in Parrot, and it even rhymes with frotz if you pronounce it right. It might or might not stand for parrotZ: A Register-based Runtime Of The Z-machine. And as you know, coming up with a good name is half the battle in finishing a tough project. Well, maybe half a percent of the battle. __ Do you Yahoo!? Yahoo! SiteBuilder - Free, easy-to-use web site design software http://sitebuilder.yahoo.com
RE: [RfC] vtable-dump
What's a dump stream actually going to look like? E.g., $a = [1, 2, 3]; print dump($a); 1: PMC PerlArray 2: 3 # element count 3: PMC PerlInt# [0] 4: 1 # value 5: PMC PerlInt# [1] 6: 2 # value 7: PMC PerlInt# [2] 8: 3 # value Fine and good. But dump must handle object graphs, which can be recursive or self-referential or whatnot: $a = { b = undef }; $b = { a = $a}; $a-{b} = $b; print dump($a); 1: PMC PerlHash 2: 1 # key-value count 3: PMC PerlString # keys[0] 4: b# value 5: PMC PerlHash # values[0] 6: 1 # key-value count 7: PMC PerlString # keys[0] 8: a# value 9: !!! Panic! Dump needs to refer to line 4 again, or else recurse! How? Most serializers use a seen hash not only to indicate that an object has been seen, but also to remember a name or number for that object. If dump had remembered $a = line 4, it could finish off with something like... 9: Again 4# values[0] A seen hash is also threadsafe, can be interrupted by DoD, and is safe for recursion. (By threadsafe, I mean that unchanged data structures can be safely serialized from multiple threads without ill effect or possibility of deadlock.) -- Gordon Henriksen IT Manager ICLUBcentral Inc. [EMAIL PROTECTED]
Re: [PATCH] File Spec
On Mon, 1 Sep 2003, Michael G Schwern wrote: You also must worry about volumes. Unix: No user visible concept of a volume Windows: VOLUME:\dir1\dir2\file VMS: VOLUME:[dir1.dir2]file This has been worrying me for some years. The concept of volume has different implications for different platforms. [please excuse long rambling explanation...] One could argue that the mount points in Unix, though normally invisible, are volumes in the sense that they do affect the semantics of certains system calls, most especially rename and link, but depending on mount options also open, write, ioctl and others. Making them visible is normally exhorbitantly expensive though, so you don't want to do so unless absolutely necessary. It's also clear that the relationships between volume and root directory differ. For Mac, volumes are within a pseudo root directory, whereas for Win32 a root directory exists on a volume. So although they share the same names, they aren't really portable concepts in any meaningful way. What these various OSes do share is a concept of current locus (or loci) within some filename space. * On Unix both the working and root directories can be changed; * On Windows the current (working) directory is a feature of the current volume; changing to another volume and back again will bring you to the same working directory, even if you changed the current directory on another volume. (This behaviour changes between different versions of Windows.) * On Classic Mac (and VMS?) only the working directory can be changed; the root directory is faked to be the top of the startup volume; * On RMX an arbitrary number [*] of current loci can be established, and refered to as if they were independent volumes, or accessed by open handles (much like filedescriptors); the standard C library uses these to fake the behaviour of various POSIX functions, but these loci can be shared between processes and thus the POSIX emulation can be fooled. * Similarly, versions of Unix which have fchdir and/or fchroot allow a working directory or root directory to be selected from an arbitrary number of already-opened directories; * Some (ancient) systems don't have any directory hierachy, so a root directory is meaningless But also importantly, in the general case it is not possible to determine a path between two loci, and in particular between a root directory and a working directory. * In Unices with fchdir to have a current working directory that is outside the current root directory; * Filesystem permissions may prevent traversing from one locus to another; (normally this would prevent construction of a path from one to the other, but even given such a path, it might not be usable) The more important question is how do we interpret these things to decide if certain operations should reasonable be expected to succeed? Give or take ownership issues of course... Some of them we already can do somewhat portably: * How do we take the results of readdir and make them usable? * If we use chdir, how do we later get back to the same working directory? * Is a given filename dependent on the working directory? * Do two pathnames A and B refer to the same entity? Just by inspecting the pathnames? By checking whether they're links to the same file (inode)? * Do two pathnames A and B refer to entities in the same directory? If so then we can assume that if permissions allow us to access A then they will probably also allow us to access B. Not that we shouldn't check the results of both attempts of course, but if one succeeds and the other fails then we would be excused for just bailing instead of trying harder. Some of them are a lot harder to do portably: * Can we rename a file from name A to name B? A directory? If it's one that we just created? One that we got from readdir? How can we construct A from B or B from A to guarantee that we can? Roughly this translates to are A and B on the same volume? unless you're on Unix where we pretend that there aren't any volumes... * How do we do transactional file replacement? That is, either replace a target file with a complete replacement, or not at all. On Unix we do this by creating a temporary file in the same directory and once it has been completely written, renaming it to replace the target atomically. Or just deleting it to roll back the transaction. Assuming this method is possible for another OS, how do we construct the temporary filename from the target filename? * Can we create a hard link from name A to name B? A symbolic link? How can we construct A from B or B from A to guarantee that we can? Given two pathnames A and B, how do we make the shortest relative path C between them (to use for a relative symbolic link)? On Unix you can create a hard link anywhere under the same mount
Re: [PATCH] File Spec
[EMAIL PROTECTED] [EMAIL PROTECTED] wrote: [ snipped a lot of explanations ] Please keep in mind, that the intended usage inside Parrot just should be to locate some standard include or extension files for Parrot internals. More abstraction and complexity can always be added above that or implemented by HLLs. leo
Re: [RfC] vtable-dump
Ok, this thread has now +45 entries, I'll try to summarize the proposed PMC traversal schemes. 0) As the subject still applies ;-) we want to be able to dump() or pretty_print() a PMC (and possibly aggregate members of that). This turns out to be a special case of a deep traversal over nested PMCs of any kind, which might contain self-references and the like. 1) There are more such traverse-like operations namely DOD, clone(), freeze(). thaw() is different, as we run over the frozen byte-stream and regenerate the PMC structures from that. 2) Proposals for DOD, freeze(), clone(), dump() 2a) Implement clone() dump() on top of freeze(): clone=freeze+thaw, dump() is generated in the debugger sub-system 2b) A general traverse() vtable that calls freeze/clone/dump-vtables. DOD is a separate traversal (mark).[1] 2c) A more general traverse(), which is our current DOD mark() functionality using next_for_GC.[2] Comparison 2a 2b 2c clone needs intermediate frozen string[3] yes - - clone involves 2 steps yes - - dump has to know PMCs internals[4] yes - - duplicates recognition overheadHash Hash- Traversals per aggregate for clone/freeze[5]1 1 3 Thread-safe[6] yesyes - Increases PMC size[7] - - yes Adds complexity to DOD[8] - - yes Cache friendly[9] - yes - Code duplication[10]- - yes [1] I consider Benjamin's proposal as some generalization of this for now and a mixture of 2a) and 2b) (clone=freeze/thaw). [2] mark() as of Parrot 0.0.6, each PMC gets on the next_for_GC list [3] e.g. for clone(Array[1]) the intermediate frozen image is first generated in memory, then scanned again during thaw(). [4] what about dynamically loaded PMCs? [5] 2c): 1. mark() per PMC, 2. clone() or freeze(), 3. clear next_for_GC. mark is called inside clone/freeze again, which additonally kills data cache coherency. [6] While all schemes aren't thread-safe from user level (e.g. manually sorting an array containing shared PMCs, while it gets frozen), 2c) isn't thread-safe at low-level, as the next_for_GC pointer inside the PMC is used as a duplicate marker. But if a user changes shared resources its a user problem. We only guarantee atomic updates per PMC (s. P6E p 86f by Dan). [7] next_for_GC (and others like poperties) are in the PMC_EXT structure now. Plain PMC scalars don't contain other PMCs, so the can be marked life directly by setting just their live_flag. [8] Additionally DOD has some shortcuts for marking e.g. a PMC pointing to another or to an array of PMCs. [9] 2a): The intermediate frozen image for clone() 2c): 3 passes over aggregates; each PMC gets pulled in during DOD [10] 2a): mark + freeze 2b): mark + traverse 2c): all traverse functions duplicated This is of course my personal POV. If anything is wrong above please correct me as well as WRT missing issues. My major concerns are regarding footnotes [3], [5], [7], [8], and [9]. These haven't been commented/answered yet at all. Thanks for reading til here ;-) leo leo
Re: [RfC] vtable-dump
Gordon Henriksen [EMAIL PROTECTED] wrote: Panic! Dump needs to refer to line 4 again, or else recurse! How? Don't Panic! Here is the point, where either next_for_GC is used or the seen hash. The former is/was used to mark (visit) PMCs. If they have been visited, they have that pointer set else not. This can be used during serialization. The latter is in my proposal. A seen hash is also threadsafe, can be interrupted by DoD, and is safe for recursion. (By threadsafe, I mean that unchanged data structures can be safely serialized from multiple threads without ill effect or possibility of deadlock.) Yes. That's what I'm saying. leo
Re: deadlock vs global mutex for pmc scans
Uri Guttman [EMAIL PROTECTED] wrote: so i don't see any major downside to a global mutex vs the nastiness of deadlocks and handling them. the mutex means no difficult coding issues and it can handle all the different (i agree with dan and vote for one common scan iterator) possible scan iterators. While I'm not against a global mutex to protect user code from undefined behavior of traversing a PMC (Iff we will work around user problems), I don't see the point, why we should use a scheme that isn't thread-safe per se, adds overhead to DOD runs, and worse is really cache unfriendly. Please read (and comment :) my summary posted separately. uri leo
Re: [RfC] vtable-dump
Garrett Goebel [EMAIL PROTECTED] wrote: As I was googling to see how other people have approached these problems I ran across: http://blogs.gotdotnet.com/cbrumme/CategoryView.aspx/CLR What did you find there, besides a description that a certain company is producing b0rken software ;-) leo
Re: Bugs in BASIC interpreter?
Amir Karger [EMAIL PROTECTED] wrote: Hi. I get the following error when I try to parrot -o basic.pbc merged_basic.pasm (in parrot 0.0.10 on Win32): [ missing commas ] I also got an error from the puts function on line 120 of alpha.pasm. I don't know what puts means, but changing it to print allows that to compile. Yep. puts was obsoleted. I'll put in these fixes. The bad news is that when I then try to parrot it, Windows throws me an error window saying parrot died. I don't know why. linux SIGSEGVs. The problem is expr.pasm:419 containing a string with 1024 chars in one line. This is one of the known problems of imcc/parrot. There is no official limit on lines, strings or identifier length, while internally its assumed that there is one. This is of course a bug. We have to define some reasonable limits on identifier and line length. Long strings need some syntax (here doc, continuation marker, C-like, whatever) that allow for arbitrary length. And of course the string internals needs fixing, implement snprintf or Parrot strings. Thanks for reporting -Amir leo
Re: deadlock vs global mutex for pmc scans
On Wed, 3 Sep 2003, Uri Guttman wrote: IMO the simplest solution is a global mutex when doing any scans through the pmcs. For the lock to be useful any and all mutators would have to aquire it, as well as anyone reading the shared variables, since we need to keep anyone from changing the internal structure of the PMCs, as well as the PMC metastructure, while we're running a scan. (And this gets more interesting if we have multiple interpreters each of which share some data with other interpreters but aren't necessaarily operating in a fully shared environment) Dan
Re: Is there any way to dynamically add a method to a class?
On Mon, 25 Aug 2003, Joseph Ryan wrote: So, I know how to use find_method to get a method from an object; but is there any way to dynamically add a method to a class? Basically, I want to do something like this: newclass P2, Foo new P1, P2 addr I0, _Foo::somemethod setmethod P1, somemethod, I0 findmethod P0, P1, somemethod invoke So, how do I do it? :) What's supposed to happen is that each class has a backing namespace, and methods all live in that namespace. Generally objects, no matter what their HLL class, will be PMCs that have subclassed (at the parrot level) ParrotObject. Anyway, for a perl/python/ruby object of class Foo, to add a new method you'd just add a new sub/method name/PMC binding to the Foo namespace. Dan
RE: [RfC] vtable-dump
Leopold Toetsch wrote: Garrett Goebel [EMAIL PROTECTED] wrote: As I was googling to see how other people have approached these problems I ran across: http://blogs.gotdotnet.com/cbrumme/CategoryView.aspx/CLR What did you find there, besides a description that a certain company is producing b0rken software ;-) The thoughts of a CLR developer on implementation issues: mistakes made, lessons learned, nasty things to keep in mind, etc. Discussions of lock-free thread-safe coding issues, balancing the CLR's memory model with cpu memory models, GC, finalization, exceptions, MP, NUMA, JIT, security policies, managed code, typing, shared vtables, marshaling, serialization. -- Garrett Goebel IS Development Specialist ScriptPro Direct: 913.403.5261 5828 Reeds Road Main: 913.384.1008 Mission, KS 66202 Fax: 913.384.2180 www.scriptpro.com garrett at scriptpro dot com
Re: Is there any way to dynamically add a method to a class?
Dan Sugalski [EMAIL PROTECTED] wrote: Anyway, for a perl/python/ruby object of class Foo, to add a new method you'd just add a new sub/method name/PMC binding to the Foo namespace. Can I translate that to: some_method in class Foo has a Sub PMC in the global stash, i.e. is retrievable by: .local Sub meth meth = global Foo::some_method # perlish mangling or, how else would that look like in PASM? BTW what is the linked list in the global stash for? Dan leo
Re: Is there any way to dynamically add a method to a class?
On Thu, 4 Sep 2003, Leopold Toetsch wrote: Dan Sugalski [EMAIL PROTECTED] wrote: Anyway, for a perl/python/ruby object of class Foo, to add a new method you'd just add a new sub/method name/PMC binding to the Foo namespace. Can I translate that to: some_method in class Foo has a Sub PMC in the global stash, i.e. is retrievable by: .local Sub meth meth = global Foo::some_method # perlish mangling or, how else would that look like in PASM? Pretty much like that. Pure pasm'd do a store_global into the right stash, but not much past that. BTW what is the linked list in the global stash for? Python. It's got nested global namespaces--what's supposed to happen is that when you do a lookup, if it fails you walk up the chain looking for the symbol until you find it or run out of chain. That way you can have local overrides of global namespaces. It's... an interesting way to do things, but it does it, so there's support in for it. Dan
Re: Is there any way to dynamically add a method to a class?
Dan Sugalski wrote: On Mon, 25 Aug 2003, Joseph Ryan wrote: So, I know how to use find_method to get a method from an object; but is there any way to dynamically add a method to a class? Basically, I want to do something like this: newclass P2, Foo new P1, P2 addr I0, _Foo::somemethod setmethod P1, somemethod, I0 findmethod P0, P1, somemethod invoke So, how do I do it? :) What's supposed to happen is that each class has a backing namespace, and methods all live in that namespace. Generally objects, no matter what their HLL class, will be PMCs that have subclassed (at the parrot level) ParrotObject. Anyway, for a perl/python/ruby object of class Foo, to add a new method you'd just add a new sub/method name/PMC binding to the Foo namespace. I'm a bit lost here; what does that mean? How do I do it? Does .sub _Foo::somemethod print Foo-ey goodness. .end add somemethod to the Foo namespace? Or would it have to be: .sub Foo::somemethod print Foo-ey goodness. .end Thanks for the reply, - Joe
Re: Is there any way to dynamically add a method to a class?
Joseph Ryan writes: Dan Sugalski wrote: On Mon, 25 Aug 2003, Joseph Ryan wrote: So, I know how to use find_method to get a method from an object; but is there any way to dynamically add a method to a class? Basically, I want to do something like this: newclass P2, Foo new P1, P2 addr I0, _Foo::somemethod setmethod P1, somemethod, I0 findmethod P0, P1, somemethod invoke So, how do I do it? :) What's supposed to happen is that each class has a backing namespace, and methods all live in that namespace. Generally objects, no matter what their HLL class, will be PMCs that have subclassed (at the parrot level) ParrotObject. Anyway, for a perl/python/ruby object of class Foo, to add a new method you'd just add a new sub/method name/PMC binding to the Foo namespace. I'm a bit lost here; what does that mean? How do I do it? Does .sub _Foo::somemethod print Foo-ey goodness. .end add somemethod to the Foo namespace? No... well, imcc will probably support that eventually. It would be (note the conditional; i.e. you can't do this object stuff yet): .sub _main newsub $P0, .Method, __foo_somemethod global Foo::somemethod = $P0 ... .end .sub __foo_somemethod print Foo-ey goodness. .end If Cglobal is smart. If not: .sub_main newsub $P0, .Method, __foo_somemethod $P1 = global Foo:: $P1[somemethod] = $P0 ... .end Note that __foo_somemethod is a completely arbitrary name. It could have been called _boozebar for all these ops care. Luke Or would it have to be: .sub Foo::somemethod print Foo-ey goodness. .end Thanks for the reply, - Joe
Linking pdump and dissassemble
Hi, I want to include pdump and disassemble in POW, and they seem not to be compiled by a normal Configure/make. So, I went to compile them, and while I can get pdump.obj and disassemble.obj, I'm having trouble linking them. Please could somebody put me out of my misery and tell me what I need to link them against? :-) I've played around with it for quite a while by trying to figure out what I should be using, and looked through the docs (didn't find anything to help). Many thanks, Jonathan
Re: [PATCH] File Spec
Leopold Toetsch wrote: [EMAIL PROTECTED] [EMAIL PROTECTED] wrote: [ snipped a lot of explanations ] Please keep in mind, that the intended usage inside Parrot just should be to locate some standard include or extension files for Parrot internals. More abstraction and complexity can always be added above that or implemented by HLLs. leo Is there a plan for operating systems without Unix-like hierarchical directory structures (eg IBM I-Series, I think z/OS, I'd assume many other enterprise OSs)? There are further difficulties in that some of these have multiple filesystems which look totally different from each other etc. In general how much effort is it likely to be to get Parrot working on systems which don't look at all like Unix? I've tried to get Perl 5 to build on os/400 before and it wasn't a pleasant experience. Any chance it'll be easier to port Parrot? Chris
Abandoning Subversion
Hi, After a weeks vacation, returning back to work on Ponie I have frequent motivational problems because subversion is treating me so badly. (ie, I don't want to change something because it is such a pain then to commit it, I don't want to upgrade to latest parrot because it will take a whole work day, and so on). That together with questiones raised by several other developers I think it is time to abandon subversion and go to CVS. Since it then can live in cvs.perl.org/ponie I will not have to import parrot, just use the parrot/ directory during development. perl5 sources will have to be imported but that is not such a big deal. Robert, Ask, I am sorry it hasn't worked out with subversion, is it a lot of work involved in setting me up for cvs? Arthur
Re: Abandoning Subversion
take a whole work day, and so on). That together with questiones raised by several other developers I think it is time to abandon subversion and go to CVS. We're not going to twist your arms.. although we are pretty happy with SVN for our use for web stuff. (And in some ways, it's easier for us than CVS.. definitely more flexible.) Since it then can live in cvs.perl.org/ponie I will not have to import parrot, just use the parrot/ directory during development. perl5 sources will have to be imported but that is not such a big deal. Something like that. Robert, Ask, I am sorry it hasn't worked out with subversion, is it a lot of work involved in setting me up for cvs? Not a huge amount, although you're going to lose any old revisions you had. I'll get to this in the next day or two. -R
Re: [RfC] vtable-dump
Gordon Henriksen writes: What you're suggesting also has significant side-effects: It halts hypothetical multithreaded programs, suspends DoD, prevents the traversal mechanism from calling back into parrot code, requires fine-grained locks which are extremely expensive and have been summarily abandoned to great acclaim in all prior works... and for that, still doesn't provide a useful form of thread safety in the general case anyhow. Is there a problem with providing a mechanism which would suspend all threads except for the "current" one, as to ensure that the serialize operates, er, serially. Could it be implemented with a top-priority event post that acquires a global lock? Forgive my ignorance. I'm pretty na誰ve when it comes to threads. Luke
[off-list] Re: Linking pdump and dissassemble
Hi Jonathan, You wrote: Hi, I want to include pdump and disassemble in POW, and they seem not to be compiled by a normal Configure/make. So, I went to compile them, and while I can get pdump.obj and disassemble.obj, I'm having trouble linking them. Please could somebody put me out of my misery and tell me what I need to link them against? :-) I've played around with it for quite a while by trying to figure out what I should be using, and looked through the docs (didn't find anything to help). POW? My Makefile has those two targets... but just in case you can't do that (maybe something to do with that POW thing), here are the command lines + outputs: % make pdump gcc -o pdump pdump.o packdump.o -L/usr/local/lib -g blib/lib/libparrot.a -lpthread -lnsl -ldl -lm -lcrypt -lutil % make disassemble disassemble.c gcc -o disassemble disassemble.o -L/usr/local/lib -g blib/lib/libparrot.a -lpthread -lnsl -ldl -lm -lcrypt -lutil Hope this helped. Luke Many thanks, Jonathan
Re: [off-list] Re: Linking pdump and dissassemble
Oops. Well, I said Ioff-list, didn't I? Doesn't mutt know what I mean!? %-) Luke Luke Palmer writes: Hi Jonathan, You wrote: Hi, I want to include pdump and disassemble in POW, and they seem not to be compiled by a normal Configure/make. So, I went to compile them, and while I can get pdump.obj and disassemble.obj, I'm having trouble linking them. Please could somebody put me out of my misery and tell me what I need to link them against? :-) I've played around with it for quite a while by trying to figure out what I should be using, and looked through the docs (didn't find anything to help). POW? My Makefile has those two targets... but just in case you can't do that (maybe something to do with that POW thing), here are the command lines + outputs: % make pdump gcc -o pdump pdump.o packdump.o -L/usr/local/lib -g blib/lib/libparrot.a -lpthread -lnsl -ldl -lm -lcrypt -lutil % make disassemble disassemble.c gcc -o disassemble disassemble.o -L/usr/local/lib -g blib/lib/libparrot.a -lpthread -lnsl -ldl -lm -lcrypt -lutil Hope this helped. Luke Many thanks, Jonathan
RE: [RfC] vtable-dump
Luke Palmer: # Is there a problem with providing a mechanism which would suspend all # threads except for the current one, as to ensure that the serialize # operates, er, serially. Could it be implemented with a top-priority # event post that acquires a global lock? What about the thread that draws the GUI progress bar so people don't think the computer froze up while serializing 42gb of data? Or worse, the thread that handles the cancel button? --Brent Dax [EMAIL PROTECTED] Perl and Parrot hacker Yeah, and my underwear is flame-retardant--that doesn't mean I'm gonna set myself on fire to prove it.