The recession is caused by many factors - one of them being the recession is made worse by people expecting it to be worse.
Yes I'm looking at you parent article...
I agree it's a nice dose of painful reality arriving now.
But there is something to be said for optimistic belief translating into results, too. It works for some, not everyone.
Why? The difference between wishful la-la dreaming and constructive, creative wishfulness, it's an important difference. Both are useful skills in their respective domains:-)
That's not just young people. A lot of people don't like to change too much. Everyone exhibits confirmation bias: the tendancy to agree with things more strongly which confirm their existing beliefs.
I suspect when you hint "get familiar with a non-MSFT framework" they either don't think you really really mean it, or they think you're not representative of the industry. And most probably because they've invested themselves in an existing path, so it takes a cluebrick to divert them.
Its why there was so much consumer debt - people thought they were entitled to a lifestyle beyond their means, and were willing to take loans to get it.
There's unsustainable debt, and there's loans for financial engineering to make things possible. There's nothing wrong with taking a mortgage if you really can pay it all back - and it's the right thing to do, if it's cheaper than the cost of saving (rent etc. when compared with a mortgage).
If you avoid loans entirely, it's not necessarily the best use of the real resources you do have. Loans are one way to tap into the benefits of trade in society - and can be to the benefit of everyone, it's not a zero-sum game with equal winners and losers.
If you agree that using loans isn't always living beyond your means, but can create value by making certain things possible - how *do* you know what a lifestyle within your means is?
I think the only way is to try it and see what happens. Which is what all those consumer debtors tried, and many are finding it was a bit much.
But for a lot of them, I don't see that they could have known in advance what the level that works out would be. We call some people "greedy" or "consumerist" now, but really there's no level of consumption which everyone can recognise as "just right" except with analysis which is beyond most individuals.
You never really know how many square metres of house and how much fresh food is equivalent - in work exchanged fairly - to your 50 hours a week software development. Because you don't have perfect knowledge of what is sustainable for everyone involved.
Sometimes you get a clearer picture later on, and that seems to be happening now....Or it could just be a non-linear shockwave in the economy and not say much about what is really sustainable at all.
Even now, without knowing where it will settle, it's rather hard to know what level of "lifestyle" actually is fair and sustainable, in other words what "within their means" (over the course of a lifetime) corresponds to.
One strategy is never take out any debt. But that's not always efficient. It just doesn't make sense for some things. For some people's situations, avoiding debt means losing out on things which it is, in fact, perfectly fine and fair and sustainable to enjoy.
(Personally I don't have (and never have had) any net debt, and I have worked up from zero a couple of times. I've had loans but always less than my cash savings, so it's always been net positive. And I worked out a few years ago that saving to buy a place was a better bet than taking a mortgage despite the hit of rent, given my rate of earnings at the time (I live in the UK). But that didn't work out either... oh well:-)
Sounds like we should be tellings each kid they are special and so are all the others.
As a child, I was just afraid of everyone and didn't think about other people except as different to me. As an adult I'm noticing that I get on with people better since I realised that everyone are unique and beautiful snowflakes, even the annoying ones, whether they are similar to me or very different.
I vaguely suspect I would have had a more enjoyable childhood if I'd thought more to look for the 'special' in each of the other children, instead of seeing them as a scary mass of other people. On the other hand, I don't know if I would have grokked it like that back then.
When we have energy in surplus, at the (general) expense of no one, the world may move much more easily to peaceful respect and cooperation.
Maybe.
Alternatively, when we have energy in surplus everywhere, 10% of the world population may decide they no longer need the other 90% to produce things and be their butlers, and prefer to kill them off and enjoy the freedom that comes from not having to get along with people you don't like. And the nice coastal views with nobody spoiling the beach, the huge personal land area, etc. are all appealing.
One of the ideas behind the current system of interdependent world trade ("globalisation") is that economic interdependence reduces the likelihood of nations warring for ideological reasons. (That's not the whole picture, but it's one of reasons that system is pushed by some.)
Energy independence is the opposite of that. What's to say we won't see a lot of ideological war, fuelled by all this surplus energy?
On the other hand, this "international economy" thing makes it more than a little dangerous to dishonour contracts with a foreign company by flouting the rules.
Other countries may do the same back to you in retaliation, which may cost more than just paying up in the first place - depending on your relationship.
It's because it's a nominally a government of representatives, not as some would have it, a government of delegates.
The difference is that representatives are elected to represent their constituents, but they are not expected to embody the views of their constituents. No, they are to present their own views according to their own consciences, with the constituents having elected which person will do that based on their manifestos.
A delegate's job, on the other hand, is to constantly consult with their constituents during the course of their job, to remain up to date with those views, and to represent those views, not their own personal views.
We nominally have representative not delegate democracy in the UK, although MPs' voting records suggest they individually lie on a spectrum between the two, mostly tending to the former.
This means that normally public pressure has most effect when it will be expressed at major elections. The system is in fact designed that way: to prevent the lawmaking process from being entirely ruled by (media-driven?) popular fads. To slow it down, if you like. Make it a bit more reasoned.
Occasionally substantial public pressure changes the direction of policy mid-term.
Recently I heard an interesting argument that the "parental" aspect of UK democracy is getting out of date, as the people are getting better informed, smarter and more interested in issues themselves, so the parliamentary process is a worse fit now than it used to be.
Of course some real world code breaks. Less than you'd think, but enough to matter.
But then a lot of real world code on GNU/Linux breaks if you use the wrong version of GCC, especially on a non-x86 architecture, let alone a different compiler than GCC...
I'm not aware of any currently actively used C compilers where NULL has non-zero representation. There used to be quite a few. The C language FAQ mentions why they were abandoned - because C coders tended to assume an all-zeros representation, which is nearly always invisible (as we've discussed), but occasionally matters.
I've no idea what the C/C++ compilers for.NET use to represent NULL. Choices of compilers: Microsoft, GNU (cscc) and lcc (lcc.net).
Actually no. Pointer math isn't affected by the representation of NULL, as you're never going to add an offset to NULL and dereference the result, are you?
So you're saying this would work still if NULL pointers were not zero?
Yes.
Remember, if you have a nonzero NULL, casting 0 to a pointer (i.e. ((obj*)0) ) results in some nonzero value internally (say like 0xdeadbeef).
(obj*)0) results in a null pointer of type "obj*". It's still a null pointer, will still evaluate to false in boolean contexts, will still compare equal to "0". The internal representation does not matter in most circumstances.
printf("The offset of c is 0x%08x",offsetof(foo,c));
The above prints out "The offset of c is 0x00000008". Change NULL to 0xdeadbeef and the above prints out "The offset of c is 0xdeadbef7".
This is why you should use the compiler's offsetof() macro defined in <stddef.h>. Writing your own, wrongly, is asking for trouble:-)
(I admittedly do exactly that:-) But only on platforms where offsetof() isn't defined or doesn't work)
It has been pointed out that your macro is allowed to work even on a compiler with non-zero-representation null pointers. That's because dereferencing ((obj*)0)->field has implementation defined behaviour anyway (it's a null pointer so it's special), so the compiler is allowed to return the offset.
And you never add pointers to each other, because it makes no sense. offsetof() is fine too - it can be defined in the system header file in an appropriate way.
There times where I have seen code reinterpret a pointer of one type and end up doing pointer math with a different type. A simple enough example is a hack that's often used to allocate a single buffer large enough to contain several different objects. We had a guy here write a memory system that checked for buffer overflows by using a front-porch / back-porch data buffers that would often catch corruption. Internally, the memory system did something similar to this:
There you have code doing math with dissimilar pointers (albeit incrementally) but "pc" does end up being the result of pointer math from a pointer of "MemLink" and "MemFrontPorch".
That's something completely different. There are no pointers being added to each other there. Just integers added to non-null pointers remaining inside an allocated object, and casts between pointers to different structs. Both those things are required to work even on obscure C machines (but make sure the structures have sufficient alignment/padding, otherwise they'll break even on common machines). See the C language FAQ.
it would break most code that uses unions with pointers for storage (i.e. load-in-place fixups) and code that relies on extra bits and bit-patterns shared with pointers (i.e. lots of lockfree code stuffs data into what is assumed to be unused bits in pointers).
A lot of architectural quirks break that sort of code. And yes, that sort of code does break on some architectures. You've put your finger on why all the popular architectures have pointers being simple numbers, though.
Interesting that you pick that out, because that's one thing that non-zero NULL doesn't have to break - as long as it has the same alignment and range as a regular pointer, your tricks with extra bits work ok.
It would probably break a lot of code that uses pointer math as well -- for example, anything using an "offsetof()" style macro.
Actually no. Pointer math isn't affected by the representation of NULL, as you're never going to add an offset to NULL and dereference the result, are you? And you never add pointers to each other, because it makes no sense. offsetof() is fine too - it can be defined in the system header file in an appropriate way.
Still, there are things that don't work as expected if NULL isn't zero. Things like memset(&x, 0, sizeof(x)) and expecting the pointers in x (a structure) to be NULL, that's quite common.
It sounds like you're using tunnelled IPv6 instead of a VPN to get to your machine.
Is it really simpler than a VPN to set up? It sounds exactly like a normal VPN - except there is just one gigantic VPN "the global IPv6 network" Hmm, if it works that easily, I like it.:-)
In which case I'm surprised your work is happy to let IPv6 in so easily while blocking v4 incoming connections... Or maybe they don't know?:-)
If Cleanfeed is such a poor filter that it blocks lots of things people might reasonably want to view, then people will install a workaround and browse with that enabled.
Then "I just stumbled on it while browsing [with a tool installed which makes it possible to read normal web sites which are wrongly blocked]" is back as a reasonable argument.
To be fair, is there any demand for IPv6 connectivity in the UK? I've been working with networks for 18 years, and still never been in an environment where anyone uses IPv6 except to playtest things. Despite this I do make sure all my code supports IPv6 of course:-)
Then one day you need to upgrade the OS to a newer version - just because you need to add an app that isn't 3 years old.
To updrade the OS you have to revalidate all the installed apps you're using on it, probably changing their configs and updating all the app versions at once... And breaking a few things.
Or you have some way to easily move working apps between different machines, whether it's virtualisation or something else...
Right now I have a CentOS 4 server that I really need to upgrade, but it's too dangerous to do so because of the 30 or so apps on it which people depend on daily.
In my experience, at least half will break if a straightforward OS upgrade is done. "Break" includes subtle things like mail forwarding rules that don't work like they did before, and complex network config that cannot be simply transplanted to a new OS version.
This is why I'm likely to put the existing OS image into a VM running on its replacement updated OS image:-)
Can't you simply buy new hardware, which is quite a bit faster, for substantially less than the cost of VMware licenses to run on older hardware - and save money on power and cooling too?
A huge amount of IT work is in no way connected with internet activity... I've noticed some IT folks appear "hip" by having a net presence, keeping regularly updated blogs and so on, but quite a few good folks whose entire career is doing really interesting research don't show up in Google at all, or at best a mention in some university contact database.
Simon PJ made a lot of contributions to Haskell, but many of them were before he worked at MSR. It doesn't make sense to credit MSR for all those contributions.
Haskell itself is a bit older than MSR. I worked a little on a Haskell compiler about 16 years ago.
It might drag it out longer but reduce the "peak" level of effects which could lead to social unrest and misery for a subpopulation who don't deserve that misery.
Then again it might just make it worse. Who am I to judge?
Many economists think it's a better plan than alternatives though, based on Japan's long recession which started quite some years ago (they haven't recovered yet) where they didn't pass a spending stimulus until further into it, and as a result of observing that, many economists decided that a bigger, quicker stimulus is needed.
I have a Western-Digital USB hard drive, and it works with its own cable from my laptop, but with a different USB cable it spontaneously spins down and up every so often, as though it's getting insufficient current through the cable.
At first I thought it was a port on the laptop, but having tried them all, I deduced I had to use the cable which came with the drive.
It won't stay free if your company goes bankrupt, as someone else may acquire its assets. Can you expect a worldwide community to believe that cannot happen?
Mutt doesn't do the requested feature: archive a thread (so it's _not_ in your displayed list) but show the whole thread if an unarchive/unread reply appears on it.
This is one thing Gmail does better than traditional threaded mail readers - for some threads. As others note, for some things where it links the past 2 years of weekly notifications from some list together, that's less good:-)
The recession is caused by many factors - one of them being the recession is made worse by people expecting it to be worse.
Yes I'm looking at you parent article...
I agree it's a nice dose of painful reality arriving now.
But there is something to be said for optimistic belief translating into results, too. It works for some, not everyone.
Why? The difference between wishful la-la dreaming and constructive, creative wishfulness, it's an important difference. Both are useful skills in their respective domains :-)
That's not just young people. A lot of people don't like to change too much. Everyone exhibits confirmation bias: the tendancy to agree with things more strongly which confirm their existing beliefs.
I suspect when you hint "get familiar with a non-MSFT framework" they either don't think you really really mean it, or they think you're not representative of the industry. And most probably because they've invested themselves in an existing path, so it takes a cluebrick to divert them.
Its why there was so much consumer debt - people thought they were entitled to a lifestyle beyond their means, and were willing to take loans to get it.
There's unsustainable debt, and there's loans for financial engineering to make things possible. There's nothing wrong with taking a mortgage if you really can pay it all back - and it's the right thing to do, if it's cheaper than the cost of saving (rent etc. when compared with a mortgage).
If you avoid loans entirely, it's not necessarily the best use of the real resources you do have. Loans are one way to tap into the benefits of trade in society - and can be to the benefit of everyone, it's not a zero-sum game with equal winners and losers.
If you agree that using loans isn't always living beyond your means, but can create value by making certain things possible - how *do* you know what a lifestyle within your means is?
I think the only way is to try it and see what happens. Which is what all those consumer debtors tried, and many are finding it was a bit much.
But for a lot of them, I don't see that they could have known in advance what the level that works out would be. We call some people "greedy" or "consumerist" now, but really there's no level of consumption which everyone can recognise as "just right" except with analysis which is beyond most individuals.
You never really know how many square metres of house and how much fresh food is equivalent - in work exchanged fairly - to your 50 hours a week software development. Because you don't have perfect knowledge of what is sustainable for everyone involved.
Sometimes you get a clearer picture later on, and that seems to be happening now. ...Or it could just be a non-linear shockwave in the economy and not say much about what is really sustainable at all.
Even now, without knowing where it will settle, it's rather hard to know what level of "lifestyle" actually is fair and sustainable, in other words what "within their means" (over the course of a lifetime) corresponds to.
One strategy is never take out any debt. But that's not always efficient. It just doesn't make sense for some things. For some people's situations, avoiding debt means losing out on things which it is, in fact, perfectly fine and fair and sustainable to enjoy.
(Personally I don't have (and never have had) any net debt, and I have worked up from zero a couple of times. I've had loans but always less than my cash savings, so it's always been net positive. And I worked out a few years ago that saving to buy a place was a better bet than taking a mortgage despite the hit of rent, given my rate of earnings at the time (I live in the UK). But that didn't work out either... oh well :-)
Sounds like we should be tellings each kid they are special and so are all the others.
As a child, I was just afraid of everyone and didn't think about other people except as different to me. As an adult I'm noticing that I get on with people better since I realised that everyone are unique and beautiful snowflakes, even the annoying ones, whether they are similar to me or very different.
I vaguely suspect I would have had a more enjoyable childhood if I'd thought more to look for the 'special' in each of the other children, instead of seeing them as a scary mass of other people. On the other hand, I don't know if I would have grokked it like that back then.
Maybe.
Alternatively, when we have energy in surplus everywhere, 10% of the world population may decide they no longer need the other 90% to produce things and be their butlers, and prefer to kill them off and enjoy the freedom that comes from not having to get along with people you don't like. And the nice coastal views with nobody spoiling the beach, the huge personal land area, etc. are all appealing.
One of the ideas behind the current system of interdependent world trade ("globalisation") is that economic interdependence reduces the likelihood of nations warring for ideological reasons. (That's not the whole picture, but it's one of reasons that system is pushed by some.)
Energy independence is the opposite of that. What's to say we won't see a lot of ideological war, fuelled by all this surplus energy?
On the other hand, this "international economy" thing makes it more than a little dangerous to dishonour contracts with a foreign company by flouting the rules.
Other countries may do the same back to you in retaliation, which may cost more than just paying up in the first place - depending on your relationship.
It's because it's a nominally a government of representatives, not as some would have it, a government of delegates.
The difference is that representatives are elected to represent their constituents, but they are not expected to embody the views of their constituents. No, they are to present their own views according to their own consciences, with the constituents having elected which person will do that based on their manifestos.
A delegate's job, on the other hand, is to constantly consult with their constituents during the course of their job, to remain up to date with those views, and to represent those views, not their own personal views.
We nominally have representative not delegate democracy in the UK, although MPs' voting records suggest they individually lie on a spectrum between the two, mostly tending to the former.
This means that normally public pressure has most effect when it will be expressed at major elections. The system is in fact designed that way: to prevent the lawmaking process from being entirely ruled by (media-driven?) popular fads. To slow it down, if you like. Make it a bit more reasoned.
Occasionally substantial public pressure changes the direction of policy mid-term.
Recently I heard an interesting argument that the "parental" aspect of UK democracy is getting out of date, as the people are getting better informed, smarter and more interested in issues themselves, so the parliamentary process is a worse fit now than it used to be.
Of course some real world code breaks. Less than you'd think, but enough to matter.
But then a lot of real world code on GNU/Linux breaks if you use the wrong version of GCC, especially on a non-x86 architecture, let alone a different compiler than GCC...
I'm not aware of any currently actively used C compilers where NULL has non-zero representation. There used to be quite a few. The C language FAQ mentions why they were abandoned - because C coders tended to assume an all-zeros representation, which is nearly always invisible (as we've discussed), but occasionally matters.
I've no idea what the C/C++ compilers for .NET use to represent NULL. Choices of compilers: Microsoft, GNU (cscc) and lcc (lcc.net).
Actually no. Pointer math isn't affected by the representation of NULL, as you're never going to add an offset to NULL and dereference the result, are you?
So you're saying this would work still if NULL pointers were not zero?
Yes.
Remember, if you have a nonzero NULL, casting 0 to a pointer (i.e. ((obj*)0) ) results in some nonzero value internally (say like 0xdeadbeef).
(obj*)0) results in a null pointer of type "obj*". It's still a null pointer, will still evaluate to false in boolean contexts, will still compare equal to "0". The internal representation does not matter in most circumstances.
struct foo { int a,b,c; };
#define offsetof(obj,fld) ((int)(&(((obj*)0)->fld)))
printf("The offset of c is 0x%08x",offsetof(foo,c));
The above prints out "The offset of c is 0x00000008". Change NULL to 0xdeadbeef and the above prints out "The offset of c is 0xdeadbef7".
This is why you should use the compiler's offsetof() macro defined in <stddef.h>. Writing your own, wrongly, is asking for trouble :-)
(I admittedly do exactly that :-) But only on platforms where offsetof() isn't defined or doesn't work)
It has been pointed out that your macro is allowed to work even on a compiler with non-zero-representation null pointers. That's because dereferencing ((obj*)0)->field has implementation defined behaviour anyway (it's a null pointer so it's special), so the compiler is allowed to return the offset.
And you never add pointers to each other, because it makes no sense. offsetof() is fine too - it can be defined in the system header file in an appropriate way.
There times where I have seen code reinterpret a pointer of one type and end up doing pointer math with a different type. A simple enough example is a hack that's often used to allocate a single buffer large enough to contain several different objects. We had a guy here write a memory system that checked for buffer overflows by using a front-porch / back-porch data buffers that would often catch corruption. Internally, the memory system did something similar to this:
MemLink *pa; MemFrontPorch *pb; MemBackPorch *pc;
pa=(MemLink *)malloc(sizeof(*pa)+sizeof(*pb)+sizemem+sizeof(*pc));
pb=(MemFrontPorch *)(pa+1); pc=(MemBackPorch *) (((int)(pb+1))+sizemem);
There you have code doing math with dissimilar pointers (albeit incrementally) but "pc" does end up being the result of pointer math from a pointer of "MemLink" and "MemFrontPorch".
That's something completely different. There are no pointers being added to each other there. Just integers added to non-null pointers remaining inside an allocated object, and casts between pointers to different structs. Both those things are required to work even on obscure C machines (but make sure the structures have sufficient alignment/padding, otherwise they'll break even on common machines). See the C language FAQ.
A lot of architectural quirks break that sort of code. And yes, that sort of code does break on some architectures. You've put your finger on why all the popular architectures have pointers being simple numbers, though.
Interesting that you pick that out, because that's one thing that non-zero NULL doesn't have to break - as long as it has the same alignment and range as a regular pointer, your tricks with extra bits work ok.
Actually no. Pointer math isn't affected by the representation of NULL, as you're never going to add an offset to NULL and dereference the result, are you? And you never add pointers to each other, because it makes no sense. offsetof() is fine too - it can be defined in the system header file in an appropriate way.
Still, there are things that don't work as expected if NULL isn't zero. Things like memset(&x, 0, sizeof(x)) and expecting the pointers in x (a structure) to be NULL, that's quite common.
It sounds like you're using tunnelled IPv6 instead of a VPN to get to your machine.
Is it really simpler than a VPN to set up? It sounds exactly like a normal VPN - except there is just one gigantic VPN "the global IPv6 network" Hmm, if it works that easily, I like it. :-)
In which case I'm surprised your work is happy to let IPv6 in so easily while blocking v4 incoming connections... Or maybe they don't know? :-)
The "it's in my interest not to give you huge implicit credit" argument doesn't work when it costs the company very little to create that credit.
If the company spends a fortune then tries to charge you for costs and a percentage profit, then the argument works.
If Cleanfeed is such a poor filter that it blocks lots of things people might reasonably want to view, then people will install a workaround and browse with that enabled.
Then "I just stumbled on it while browsing [with a tool installed which makes it possible to read normal web sites which are wrongly blocked]" is back as a reasonable argument.
What a silly arms race.
To be fair, is there any demand for IPv6 connectivity in the UK? I've been working with networks for 18 years, and still never been in an environment where anyone uses IPv6 except to playtest things. Despite this I do make sure all my code supports IPv6 of course :-)
Then one day you need to upgrade the OS to a newer version - just because you need to add an app that isn't 3 years old.
To updrade the OS you have to revalidate all the installed apps you're using on it, probably changing their configs and updating all the app versions at once... And breaking a few things.
Or you have some way to easily move working apps between different machines, whether it's virtualisation or something else...
Right now I have a CentOS 4 server that I really need to upgrade, but it's too dangerous to do so because of the 30 or so apps on it which people depend on daily.
In my experience, at least half will break if a straightforward OS upgrade is done. "Break" includes subtle things like mail forwarding rules that don't work like they did before, and complex network config that cannot be simply transplanted to a new OS version.
This is why I'm likely to put the existing OS image into a VM running on its replacement updated OS image :-)
But slower than the subsequent ones.
Can't you simply buy new hardware, which is quite a bit faster, for substantially less than the cost of VMware licenses to run on older hardware - and save money on power and cooling too?
A huge amount of IT work is in no way connected with internet activity... I've noticed some IT folks appear "hip" by having a net presence, keeping regularly updated blogs and so on, but quite a few good folks whose entire career is doing really interesting research don't show up in Google at all, or at best a mention in some university contact database.
Quite simply, the method you describe does not work for everyone. Believing it does not make it so. The causes can be many.
I think you're probably right about "it will break out somewhere else anyway". But the way it breaks out might still be preferable, for some people.
Not if it makes you such an mental wreck that you're incapable of coherent thought for long enough to go shopping.
Simon PJ made a lot of contributions to Haskell, but many of them were before he worked at MSR.
It doesn't make sense to credit MSR for all those contributions.
Haskell itself is a bit older than MSR. I worked a little on a Haskell compiler about 16 years ago.
Maybe it lets people do new things which translate to economic activity.
Even people who don't want higher speed internet may change the way they work and the type of work they do, if they have it anyway.
One really obvious thing is remote working of the type which is making countries like India richer and the US poorer at the moment.
It might drag it out longer but reduce the "peak" level of effects which could lead to social unrest and misery for a subpopulation who don't deserve that misery.
Then again it might just make it worse. Who am I to judge?
Many economists think it's a better plan than alternatives though, based on Japan's long recession which started quite some years ago (they haven't recovered yet) where they didn't pass a spending stimulus until further into it, and as a result of observing that, many economists decided that a bigger, quicker stimulus is needed.
It also depends on the USB cable.
I have a Western-Digital USB hard drive, and it works with its own cable from my laptop, but with a different USB cable it spontaneously spins down and up every so often, as though it's getting insufficient current through the cable.
At first I thought it was a port on the laptop, but having tried them all, I deduced I had to use the cable which came with the drive.
It won't stay free if your company goes bankrupt, as someone else may acquire its assets. Can you expect a worldwide community to believe that cannot happen?
Mutt doesn't do the requested feature: archive a thread (so it's _not_ in your displayed list) but show the whole thread if an unarchive/unread reply appears on it.
This is one thing Gmail does better than traditional threaded mail readers - for some threads. As others note, for some things where it links the past 2 years of weekly notifications from some list together, that's less good :-)