Adding DEPRECATED define

Discuss about anything related to the Irrlicht Engine, or read announcements about any significant features or usage changes.
Post Reply

should a DEPRECATED keyword be added to warn users and prepare old stuff removment?

Poll ended at Thu Apr 23, 2009 7:18 pm

yes
17
94%
no
0
No votes
i dont care
1
6%
 
Total votes: 18

Nox
Posts: 304
Joined: Wed Jan 14, 2009 6:23 pm

Adding DEPRECATED define

Post by Nox »

Hi,

what do you think about a DEPRECATED macro which generates a warning/message and can be added to every part which is deprecated. This way the users sees directly what has changed and after some releases the deprecated parts can be dropped. This can help to keep the API small and cute, informs the users and if the "dropintervals" are big enough the backward compatibility wont suffer to much.
Sylence
Posts: 725
Joined: Sat Mar 03, 2007 9:01 pm
Location: Germany
Contact:

Post by Sylence »

Yes would be a nice-to-have.
position2d coming to my mind for example...
Software documentation is like sex. If it's good you want more. If it's bad it's better than nothing.
hybrid
Admin
Posts: 14143
Joined: Wed Apr 19, 2006 9:20 pm
Location: Oldenburg(Oldb), Germany
Contact:

Post by hybrid »

What would this macro look like?
Nox
Posts: 304
Joined: Wed Jan 14, 2009 6:23 pm

Post by Nox »

referring to http://gcc.gnu.org/onlinedocs/gcc-4.1.2 ... yntax.html and http://msdn.microsoft.com/en-us/library ... S.80).aspx i guess something like this will do it:

Code: Select all

#if _MSC_VER >= 1400 //vs 2005 or higher
#define _IRR_DEPRECATED __declspec(deprecated) 
#elif __GNUC__ >= 3 //not sure if all 3 version support this feature but above 3.1 should
#define _IRR_DEPRECATED  __attribute__ ((deprecated))
#else
#pragma message( "this compiler is not supported yet (concerning _IRR_DEPRECATED)." )
#define _IRR_DEPRECATED
#endif
Usage:

Code: Select all

class X
{
     _IRR_DEPRECATED virtual void test()  {}
};
struct _IRR_DEPRECATED X
{
};
simple isnt it?
wITTus
Posts: 167
Joined: Tue Jun 24, 2008 7:41 pm
Location: Germany

Post by wITTus »

Excellent idea.
Generated Documentation for BlindSide's irrNetLite.
"When I heard birds chirping, I knew I didn't have much time left before my mind would go." - clinko
Nox
Posts: 304
Joined: Wed Jan 14, 2009 6:23 pm

Post by Nox »

Code: Select all

#if _MSC_VER >= 1300 //vs 2003 or higher
#define _IRR_DEPRECATED __declspec(deprecated)
#elif __GNUC__ >= 3 //not sure if all 3 version support this feature but above 3.1 should
#define _IRR_DEPRECATED  __attribute__ ((deprecated))
#else
#pragma message( "this compiler is not supported yet (concerning _IRR_DEPRECATED)." )
#define _IRR_DEPRECATED
#endif

typedef _IRR_DEPRECATED int test1;
typedef _IRR_DEPRECATED int test2;


struct _IRR_DEPRECATED test3
{
};

class Interface
{
    public:
    _IRR_DEPRECATED virtual void test4() = 0;
};

class Implementation : public Interface
{
    public:

    void test4() {}
};

int main()
{
    test1 var1; //warning
    test2 var2; //warning
    test3 var3; //warning

    Implementation* i = new Implementation;
    i->test4();
    static_cast<Interface*>(i)->test4(); //warning
    delete i;
    return 0;
}
tested with gcc 4.3, gcc 3.3 only reports the first 2 tests.
Last edited by Nox on Wed Mar 25, 2009 12:09 pm, edited 1 time in total.
full.metal.coder
Posts: 68
Joined: Sat May 10, 2008 11:30 am
Contact:

Post by full.metal.coder »

I would suggest using the #warning preproc instead of #pragma message() as the later is less "portable" AFAIK.
hybrid
Admin
Posts: 14143
Joined: Wed Apr 19, 2006 9:20 pm
Location: Oldenburg(Oldb), Germany
Contact:

Post by hybrid »

Hmm, I thought that MSVC requires that attribute at a different place, and skipped it due to this problem some month ago. So can someone text this with MSVC and tell which warnings are generated?
The #else branch should go without a warning IMHO, as it would be too annoying with other compilers and deprecations in SMaterial or so.
Nox
Posts: 304
Joined: Wed Jan 14, 2009 6:23 pm

Post by Nox »

well msvc 2008 does #warning not know and this seems to be a GCC only extension. But you are right. #pragma message is not support too. Another really standard way were to add a #error but its a bit hard :wink: . But atm i see no other way :-/. May be a simple printf but this wont be shown up at compiletime.


EDIT:

vs2008
1>------ Build started: Project: test, Configuration: Debug Win32 ------
1>Compiling...
1>main.cpp
1>c:\users\nox\desktop\test\main.cpp(29) : warning C4996: 'Interface::test4': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(21) : see declaration of 'Interface::test4'
1>c:\users\nox\desktop\test\main.cpp(33) : warning C4996: 'test1': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(10) : see declaration of 'test1'
1>c:\users\nox\desktop\test\main.cpp(34) : warning C4996: 'test2': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(11) : see declaration of 'test2'
1>c:\users\nox\desktop\test\main.cpp(35) : warning C4996: 'test3': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(15) : see declaration of 'test3'
1>c:\users\nox\desktop\test\main.cpp(39) : warning C4996: 'Interface::test4': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(21) : see declaration of 'Interface::test4'
1>c:\users\nox\desktop\test\main.cpp(39) : warning C4996: 'Interface::test4': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(21) : see declaration of 'Interface::test4'
1>c:\users\nox\desktop\test\main.cpp(33) : warning C4101: 'var1' : unreferenced local variable
1>c:\users\nox\desktop\test\main.cpp(42) : warning C4996: 'test1': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(10) : see declaration of 'test1'
1>c:\users\nox\desktop\test\main.cpp(34) : warning C4101: 'var2' : unreferenced local variable
1>c:\users\nox\desktop\test\main.cpp(42) : warning C4996: 'test2': was declared deprecated
1> c:\users\nox\desktop\test\main.cpp(11) : see declaration of 'test2'
1>c:\users\nox\desktop\test\main.cpp(35) : warning C4101: 'var3' : unreferenced local variable
in fact the msvc need that _declare at spezial places but the __attribute__ can be used more freely.

EDIT2:

vs2005
Kompilieren...
main.cpp
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(29) : warning C4996: 'Interface::test4' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(21): Siehe Deklaration von 'Interface::test4'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(33) : warning C4996: 'test1' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(10): Siehe Deklaration von 'test1'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(34) : warning C4996: 'test2' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(11): Siehe Deklaration von 'test2'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(35) : warning C4996: 'test3' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(15): Siehe Deklaration von 'test3'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(39) : warning C4996: 'Interface::test4' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(21): Siehe Deklaration von 'Interface::test4'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(33) : warning C4101: 'var1': Unreferenzierte lokale Variable
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(42) : warning C4996: 'test1' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(10): Siehe Deklaration von 'test1'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(34) : warning C4101: 'var2': Unreferenzierte lokale Variable
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(42) : warning C4996: 'test2' wurde als veraltet deklariert
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(11): Siehe Deklaration von 'test2'
c:\dokumente und einstellungen\nox\desktop\test\test\main.cpp(35) : warning C4101: 'var3': Unreferenzierte lokale Variable
vs 2003 supports its as well
Kompilieren...
test2.cpp
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(30) : warning C4996: 'Interface::test4' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(23): Siehe Deklaration von 'Interface::test4'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(35) : warning C4996: 'test1' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(12): Siehe Deklaration von 'test1'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(36) : warning C4996: 'test2' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(13): Siehe Deklaration von 'test2'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(37) : warning C4996: 'test3' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(17): Siehe Deklaration von 'test3'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(41) : warning C4996: 'Interface::test4' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(23): Siehe Deklaration von 'Interface::test4'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(35) : warning C4101: 'var1': Unreferenzierte lokale Variable
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(44) : warning C4996: 'test1' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(12): Siehe Deklaration von 'test1'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(36) : warning C4101: 'var2': Unreferenzierte lokale Variable
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(44) : warning C4996: 'test2' wurde als veraltet deklariert
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(13): Siehe Deklaration von 'test2'
c:\Dokumente und Einstellungen\Nox\Eigene Dateien\Visual Studio Projects\test2\test2.cpp(37) : warning C4101: 'var3': Unreferenzierte lokale Variable
Verknüpfen...
EDIT3:
well the warning only appears once ;)
Nox
Posts: 304
Joined: Wed Jan 14, 2009 6:23 pm

Post by Nox »

Okay ticket added :)
MasterGod
Posts: 2061
Joined: Fri May 25, 2007 8:06 pm
Location: Israel
Contact:

Post by MasterGod »

Very cool stuff.

Great idea.
Image
Dev State: Abandoned (For now..)
Requirements Analysis Doc: ~87%
UML: ~0.5%
Post Reply