On Sat, Oct 6, 2012 at 11:47 PM, Oleg Endo <oleg.e...@t-online.de> wrote:
> On Sat, 2012-10-06 at 20:59 +0200, _ wrote:
>> Now obviously you can't put stl everywhere.
>> I don't see kernel and low level C or C++ libs using boost or stl. any
>> time soon.
>> Afterall. No reasonable library uses it either due to binary 
>> incompatibilities.
>
> It seems that your proposed fix to that is as binary incompatible as
> using std::unique_ptr or std::shared_ptr.  What happens when you link a
> library that was compiled with '*~' pointers enabled, with a library
> that was compiled without those pointers, and both exchange
> data/objects?
>

I have no idea ;D I am just crazy programmer with crazy idea. And on
top of it kinda bad programmer too.
There probably will be problems. Problems that I most probably I will
have no idea how to solve because my experience and skill in c/c++ or
gcc is not anywhere near of yours or anyone in this group. Well..
probably excluding the viagra spammer guy I saw in mailinglist archive
;D
Point of the switch proposal was if there are other crazy enough
people out there wishing to see/play with this switch or willing to
help with this experiment. because it is what it is. Crazy experiment.
And as optional switch it's harmless to rest of gcc.
I have no idea how to even start adding it in gcc as optional switch
so it would probably take me ages when doing it alone.

Now about your binary compatibility question.
*~ pointers that destroy themself when leaving scope are mainly
usefull as structure members or for local computations in members
functions. ie temporary array of pointers that needs to be sorted etc.
For objects that need to be passed around there are standard pointers
like before.
In other words  *~ pointers would probably be of no use in library
interface headers anyway..
And since interfaces should be stable using standard pointers in
interface header of such lib should keep them linkable like before  I
guess.

>> C or C like templateless C++ code is still domain of most  os /
>> drivers source code out there.
>> Just go agead and try to ask Linus to wrap all pointers to stl
>> templates ;D I think you will run for your life then.
>
> Have you asked him for his opinion on your proposed solution?

I wouldnt' call it solution. Let's call it experiment.
Actually this morning I attempted just for fun ;D. But I guess it's
pretty much impossible to hear his opinion. Linus has god like status
in my eyes considering what he achieved. But.. Maybe that's a good
thing ;D What if he said that having automatic cleanup also for some
dynamic objects is "dumbest idea he ever heard". Then my little switch
experiment in gcc would be probably doomed. But you are right
I shouldn't had sayed it. Now I am kinda scared if he will find out ;D

>
>> Not everybody agrees that wrapping every single variable to macro like
>> templates and spreading simple code logic over zilion files is way to
>> go. But the main problem holding stl back is it's binary and header
>> incompatibilities.
>
> Adding a non-standard compiler extension most likely will not be and
> improvement for those problems.

It's no different to let's say using  -funsigned-char. Code not
expecting it will break too.
So why not try? C++ evolves yet C stays pretty much dormant. Maybe
it's good thing but having optional switch that can reduce bugs and
memory leaks in c as it already does in c++ will probably not hurt.

> But if you really want to try it out, you can do it by writing a custom
> preprocessor that triggers on '*~' and replaces the preceding token with
> std::unique_ptr< token > or std::shared_ptr< token >.

Interesting idea to find potential pitfalls sooner probably. Thx.
So far I had been testing only my stupid Scope idea
http://www.codeproject.com/KB/cpp/468126/Scope.zip
Since simulating scope for dynamic objects was all that I was able to
do without adding compiller functionality..
I hate that derive and Scope object. But it' different kind of
problem than implementing pointer *~ in gcc

struct Object : Scope::Obj {
};

Scope global;
// entering scope
void proc() {
    Scope local;
    char*  text = strdup(local,"text"): // malloc based memory have
automatic cleanup too

    Object* obj = new(global) Object(); // obj will get destructor
called on program exit

    Object* array[1000]={0};            //sorting pointers is fast
compared to array of objects
    for(int i=0;i<1000;i++) {              // on item 500 exception
causes leaving of scope and cleanup
        array[i] = new(local) Object(); // creates object associated
with "local" scope
    }
}
// we left scope so "Scope local" and all associated object /memory
// gets destructors called/freed in proper order

>
> Cheers,
> Oleg
>

Cheers
Ladislav
crazy unemployed programmer

Reply via email to