Someone complained that there is an object file incompatibility between gcc
3.2 and 3.4, but so far has not been able to reproduce it. I am aware of
some issues with C++ sources.
In any case I would like to know if anyone has experienced any
interoperability issues with objects produced by GCC 3.2, 3.3 or 3.4
Personally, I think it was a cockpit error, but if anyone is aware of object
file incompatibility issues, please let me know.
--
Jerry Feldman <gaf(a)blu.org>
Boston Linux and Unix user group
http://www.blu.org PGP key id:C5061EA9
PGP Key fingerprint:053C 73EC 3AC1 5C44 3E14 9245 FB00 3ED5 C506 1EA9
I have used the commercial version of SlickEdit for my IDE ever since I was
liberated from VStudio.
Unfortunately, v10 is totally un-usable for me because I use dual-monitor and
they eliminated the project and build toolbars from undocked windows. What
this means is if you want to be able to go back and forth between
project/classes/files (in the project toolbar before) you have to have all
the windows open and separate (taking up the entire desktop).
Thought I'd warn anyone else in the same situation before spending money on an
upgrade.
They said they may change......
we'll see.
Damn! (I love SlickEdit)
B-)
I'm trying to mofify a small PERL program that was written for me.
Since I have no previous experience of using this language I wonder how
I can
debug it.
PERL seems to be aninterpreter more than a debugger ...
thanks a lot,
MEM
Can anyone suggest good sources of information, particularly books on
the new features in Java 1.5?
I'm particularly interested in generics. For example, it seems to me,
that you should can build up concepts as interfaces and specify template
classes with templates that must implement particular interfaces. This
would be better than C++ because I don't think you can specify that a
template class must, for example, implement assignable and equality
comparable, in C++. (I know Boost does this, but there is some runtime
overhead.) The new java may be capable of it if you're willing to accept
.equals() instead of operator=(), etc.
I'm also interested to find out other new features. Apparently templates
are compiled once only - no code bloat and no delayed errors.
Can anyone comment on the status of gcj and java 1.5? If gcj can handle
java 1.5 templates, it may compile better than C++ and give comparable
run-speed.
--
JDL
ActivePerl is free. However, registration is needed.
http://www.activestate.com/Products/Download/Register.plex?id=ActivePerl
Maura Edelweiss Monville wrote:
> But I feel at a loss about which product/code I can suggest my
> supervisors for downloading as there are many choices. In addition,
> is the PERL version for Windows available for free as it is for Linux
> ??? I guess it isn't ....
Thanks to some SuSE lists members I could get my PERL program running
perfectly and have even refined it to filter
the extracted records in a number of selectable ways.
Problem: I run and do all my development on SuSE.
My supervisors only know Windows ... sigh .....sigh ... sigh ...
I know PERL is cross-platform and a PERL version does exist also for
Windos/XP
I've just opened the web site from which I can download PERL foe WINDOS:
http://www.activestate.com/
But I feel at a loss about which product/code I can suggest my
supervisors for downloading as there are many choices.
In addition, is the PERL version for Windows available for free as it is
for Linux ??? I guess it isn't ....
Thank you very much for all your help.
regards,
maura
> > If I have a pointer pointing to address 256 and then look at address
> > 257, by how many BYTES have I jumped in physical memory?
>
> 2
>
> 2? are you sure? It would be two in an old fashioned 16 bit machine
> with a 16 bit databus; but this is a 64 bit machine and the original
> definition of a word was a hardware word (not a Bill Gates 16 bit
> thingy.)
Woops, I saw the numbers 256 and 258. I meant 1.
> > With Linux, both addresses 256 and 257 lie in the same page (each 4096
> > bytes). All the bytes within a single page maps to a single physical
> > page frame of the same size.
> ah! this is one of the ideas I seek: is address 256 pointing to
> byte number 256-1 = 255, and 257 pointing to the very next character
> in the string
> or:
> byte number 8 x 256 -1 = 2096-1 and 257 to 8 x 257 - 1 = last
> plus 8 bytes because the memory is 64 bit (8 byte) ?
The address 256 IS the address of the 256'th (zero offset) byte. So the
address 256 is byte number 256, and the address 257 is the next byte.
Regards,
Håkon Hallingstad
Software Developer, EDB
+47 2252 8218
hakon.hallingstad(a)edb.com
www.edb.com
"IT er ikke alt - men det hjelper"
pelibali wrote:
>Hi,
>
>After commenting out more, than half of your program, it got
>confirmed, that your $erg variable is always empty. Our programming
>styles are slightly different, but you could solve your problem like
>this:
>
>my($dummy, $erg, $MT, $ZA, $rest) = split( /\s+/, $line, 5);
>
>So I added a first variable, which will be always empty, and increased
>the number of fields produced to 5. Now everything should work.
>
>More elegant solution would be to put the pieces of the line into an
>array and simply skip it's element nr 0. Other similarly good solution
>would be to send your line through a s/// regexp to get rid of the
>leading space(s):
>
>while (<INFILE>)
>...
>$line = ($_ =~ s/^\s+//);
>
>
>Best regards,
>Pelibali
>
>Ps. Bug here:
># Open output file
>open( OUTFILE, "> " . $outfile ) || die "ERROR: Can't open $infile:
>$!\n";
>
>
>
It works but I had to replace : <>$line = ($_ =~ s/^\s+//);
with $line =~ s/^\s+//;
because the assignment operator "=" coupled with the substitution
operator, returns the characters being substituted so I was getting all
lines made up of a whitespace only.
Finally, in this simplest version, the Number of MT=18 records found by
my PERL program coincides with the number found by just a bash shell
command. ... which makes me feel confident that it does work.
Thanks to your precious help I've learnt something about PERL.
Thank you to you all.
maura
I will explain what happens on i386.
> I understand that if I have a pointer, ptr, which points to an
> array of some structure then ptr++ will point to the next element.
> But that is all done in software. I want to optimise my software
> to match what happens in hardware.
The software translates a ++ptr to adding the element size to the logical
address stored in ptr. If ptr was declared as an array of int's, then ++ptr
would add 4 to ptr.
> If I have a pointer pointing to address 256 and then look at address
> 257, by how many BYTES have I jumped in physical memory?
2
With "physical memory" I assume you mean physical memory as in the
following:
Through a hardware/software mechanisms, logical addresses are
translated
to linear addresses (segmentation) and then to a physical addresses
(paging).
With Linux, both addresses 256 and 257 lie in the same page (each 4096
bytes). All the bytes within a single page maps to a single physical page
frame of the same size.
The kernel assigns (almost) arbitrary page frames to pages. So if the two
addresses were on each side of a page boundary, you do not know the
difference of the physical addresses.
> In old style
> memory of 16 bit words it would jump one word, that is 4 BYTES, but in
> a machine with 8 bit words it would jump one word of 2 BYTES. That is,
> always one machine word. Also, if your machine was up to date, it always
> had the matching data bus to access a full word (machine word, not a Bill
> Gates 'word') in one take. (Cheap machines, with a cheap data-bus, would
> take two mouths full.)
Does not make sense to me. Are you talking about the the size of the memory
fetches the CPU caches are transfering memory to/from memory ?
> An equivalent question would be:
> If I have a string, Str(16), of bytes Str(0) to Str(15) containing
"ABCDEFGHIJKLMNOn"
> (n=NUL) in a 32 bit machine, does the request for Str(9) ie "J"
electronically load this
> character directly into the least significant byte of the register, (doubt
it) or, by
> assembler code (generated by the compiler) Load the characters "IJKL"
into the register,
> shift right, ("00IJ") and mask ("oooJ") ? That is: does the electronic
system access one
> byte directly? or perhaps the load/shift/mask is done in hardware? (doubt
it)
One byte (assuming you are using 1 byte characters).
> For me the important issue is, for a 64 bit machine:
> I suspect that access to IntArray(23) is
> faster if defined as int64_t IntArray(128)
> ie as 64 bit words with the top bits generally being zero than if
defined as int32_t IntArray(128)
> ie as 32 bit words
> because, for a 64 bit machine, the latter will store two values into each
> physical address.
The CPU caches would rather see your array in the smallest possible memory
region. When you want access to Str(9), it fetches, say, 128 bits around
that value to cache. The when you ask for Str(10), it is already in the
cache.
But some operations may be faster for 64 bits than for 32 bits. I guess the
operations multiplication and division/remainder might be faster (ask AMD).
So whether int32_t or int64_t is fastest is probably very dependent on your
application.
Regards,
Håkon Hallingstad
Software Developer, EDB
+47 2252 8218
hakon.hallingstad(a)edb.com
www.edb.com
"IT er ikke alt - men det hjelper"
Greetings,
Since there is no appropriate SuSE forum for this I am posting the question
where I believe the most interest will be (ie programmers).
What I really need to know is how modern 64 bit memory is addressed.
I understand that if I have a pointer, ptr, which points to an array
of some structure then ptr++ will point to the next element.
But that is all done in software.
I want to optimise my software to match what happens in hardware.
If I have a pointer pointing to address 256 and then look at address 257,
by how many BYTES have I jumped in physical memory?
In old style memory of 16 bit words it would jump one word, that
is 4 BYTES, but in a machine with 8 bit words it would jump one word
of 2 BYTES. That is, always one machine word.
Also, if your machine was up to date, it always had the matching
data bus to access a full word (machine word, not a Bill Gates 'word')
in one take.
(Cheap machines, with a cheap data-bus, would take two mouths full.)
An equivalent question would be:
If I have a string, Str(16), of bytes Str(0) to Str(15)
containing "ABCDEFGHIJKLMNOn" (n=NUL)
in a 32 bit machine,
does the request for Str(9) ie "J"
electronically load this character directly into the least significant byte
of the register, (doubt it)
or, by assembler code (generated by the compiler)
Load the characters "IJKL" into the register, shift right, ("00IJ")
and mask ("oooJ") ?
That is: does the electronic system access one byte directly?
or perhaps the load/shift/mask is done in hardware? (doubt it)
For me the important issue is, for a 64 bit machine:
I suspect that access to IntArray(23) is
faster if defined as int64_t IntArray(128)
ie as 64 bit words with the top bits generally being zero
than if defined as int32_t IntArray(128)
ie as 32 bit words
because, for a 64 bit machine, the latter will store two values into each
physical address.
(I must experiment with int_fast32_t )
(In a 32 bit machine everybody knows that it requires two bites of
the cherry to get a 64 bit integer or float value.)
The significance of this last question would be that there may be no value in
having data 'nn byte aligned'.
Thanks to any hardware boffins,
Colin