Closed trusch closed 5 years ago
Wiki information was inaccurate; I changed it to TBD. There is no fixed date, some time this year. If we get more help, it will be sooner; please consider contributing in either labor or sponsorship.
Is there a ToDo-list or something like that? I would love to contribute features to poco, or at least help to rewrite some parts of the code to use c++11 features.
For now, all we have is the milestone. We do occasionally teleconference. Typically it is on weekend, date/time agreed ad-hoc during the week, so if you want to join next time let us know, we'll notify you and make 2.0 one of the agenda items. You can email me directly: at(alex, dot(pocoproject, org))
On 04/13/15 15:26, trusch wrote:
Is there a ToDo-list or something like that? I would love to
contribute features to poco, or at least help to rewrite some
parts of the code to use c++11 features.
—
Reply to this email directly or view
it on GitHub.
Hello,
for the start there is some initial C++11 changeset to the current
develop branch:
https://github.com/mkrivos/poco/tree/c++11
Marian
Yes, please switch develop branch to C++11. It's 2015 and all recent compilers support it. ;-r
Yes, it's about time we start introducing C++11 features into POCO. Since 2.0 won't happen for some time anyway, let's officially allow C++11 features in develop for the 1.7.0 release. We'll probably need to define an allowed subset of features based on the compilers we'll want to support. Personally, I'm for dropping support for VC++ < 2012, as well as GCC < 4.6. My main concern is certain embedded Linux platforms, which are a bit too conservative with their toolchain choices.
@mkrivos can you please send pull request to develop branch with summary of your c++11 changes?
Any volunteers to reimplement Poco::SharedPtr in terms of std::shared_ptr?
@obiltschnig: are we going to break backward compatibility and get rid of all naked pointers in interfaces or should that be left for 2.0?
I'd say introduction of C++11 features into existing and new code only. No interface changes.
I can go for Poco::SharedPtr.
And for those stuck with old compilers: we'll continue to support 1.6.x with critical bugfixes.
What about move constructors? There's quite a bit of work adding those to existing classes.
We'll add them piece-by-piece, as we get around to it.
Great news!
Please consider that you drop some really neat stuff when supporting VS 2012. Also in my personal experience people that used VS 2012 have all moved to VS 2013. I know that GCC 4.7 is pretty easy to maintain with VS 2013, but not sure about 4.6. Note that even the ancient current Debian release uses GCC 4.7 and the next release (using GCC 4.9) will probably be out this month.
Language features that you will not be able to use with VS 2012:
This my work list for Foundation part:
Dynamic:Var [done]
Buffer [done]
Any
Array
AutoPtr [done]
AutoReleasePool ?
BasicEvent
Clock
Condition
DateTime
Delegate
DirectoryIterator ?
DirectoryWatcher ?
ErrorHandler
Event
Exception
Expire
ExpireDecorator
FIFOBuffer
File
FileStream
FunctionDelegate
FunctionPriorityDelegate
HashMap ?
HashSet ?
HashTable ?
KeyValueArgs
ListMap
LocalDateTime
Manifest
MemoryPool
Message
Mutex & FastMutex
NamedEvent
NamedMutex
NamedTuple
NotificationCenter
NotificationQueue
ObjectPool
Observer
Optional
Path
Pipe
Priority*
Process
RWLock
Random
RecursiveDirectoryIterator
RefCountedObject ?
RegularExpression
RunnableAdapter ?
ScopedLock
ScopedUnlock
Semaphore
SharedLibrary
SharedMemory
SharedPtr
SimpleHashTable ?
Stopwatch
SynchronizedObject
Task
TaskManager
TemporaryFile
TextConverter
TextIterator
Thread
ThreadLocal
ThreadPool
ThreadTarget
TimedNotificationQueue
Timer
Tuple
URI
UUIDGenerator
This list doesn't cover stream based classes and is not
complete. Now we can assign pririty
dor this items.
Marian
-------- Original Message --------
Subject: Re: [poco] when will the 2.0 release be ready? (#776)
From: Aleksandar Fabijanic <notifications@github.com>
To: pocoproject/poco <poco@noreply.github.com>
CC: Marian Krivoš <marian.krivos@gmail.com>
Date: 4/13/2015, 10:51:38 PM
What about move constructors? There's quite a bit of work
adding those to existing classes.
—
Reply to this email directly or view
it on GitHub.
I needed to study C++11 for a project, so I made a study of converting some relevant Poco classes to C++11. https://github.com/RangelReale/poco/tree/moderncpp
In the process I took some classes that overlapped C++11 new features and used, and ended up modifying a lot of this. This is the current state, I compiled my application with it for tests, and had no problems. Also all tests passes.
Tested with:
I incorporated mkrivos changes, and the changes are CMake only for now, maybe this can by used for ideais for how to do this.
This looks like a pretty extensive work, I would be in favor of merging this for 1.7. /cc @obiltschnig
+1
Günter Obiltschnig Applied Informatics Software Engineering GmbH
Am 04.12.2015 um 15:11 schrieb Aleksandar Fabijanic notifications@github.com:
This looks like a pretty extensive work, I would be in favor of merging this for 1.7. /cc @obiltschnig
— Reply to this email directly or view it on GitHub.
@RangelReale I'll take a deeper look this weekend, try to build with gmake and let you know if I run into any problems;
The other problem I see is how the POCO_ENABLE_CPP11/14 will be defined for the client app the same way the library was compiled, in the current implementation I detected this using CMake.
I was able to build it with:
$ clang++ --version
Apple LLVM version 7.0.0 (clang-700.1.76)
Target: x86_64-apple-darwin14.5.0
Thread model: posix
$ g++ --version
g++ (Ubuntu 4.9.2-10ubuntu13) 4.9.2
and VS 2013
You can document minimum compiler versions and any other specifics and send pull request.
Are you sure it compiled with VS2013? Did you compile with CMake? The current branch only enables C++11 for CMake builds. I tried compiling it and it fails in VS2013. I am changing this to detect in Platform_XXX.h for the pull request.
I missed that you commented auto-detection on windows. There are some bugs still present in 2013 that I don't think are worth the effort to work around.
We can auto-enable support starting with VS 2015, I tried this and it builds fine:
--- a/Foundation/include/Poco/Platform_WIN32.h
+++ b/Foundation/include/Poco/Platform_WIN32.h
@@ -166,6 +166,9 @@
#elif (_MSC_VER >= 1800) && (_MSC_VER < 1900) // Visual Studio 2013, MSVC++ 12.0
#define POCO_MSVS_VERSION 2013
#define POCO_MSVC_VERSION 120
+#elif (_MSC_VER >= 1900) && (_MSC_VER < 2000) // Visual Studio 2015, MSVC++ 14.0
+ #define POCO_MSVS_VERSION 2015
+ #define POCO_MSVC_VERSION 140
#endif
@@ -195,10 +198,10 @@
#endif
-// Enable C++11 support for VS 2010 and newer
-//#if defined(_MSC_VER) && (_MSC_VER >= 1700) && !defined(POCO_ENABLE_CPP11)
-// #define POCO_ENABLE_CPP11
-//#endif
+// Enable C++11 support for VS 2015 and newer
+#if defined(_MSC_VER) && (POCO_MSVS_VERSION >= 2015) && !defined(POCO_ENABLE_CPP11)
+ #define POCO_ENABLE_CPP11
+#endif
One thing that is important to remember and publicize is for contributors to be mindful when introducing C++11/14 features into the codebase, they will have to be #ifdef'd for a while; it's too early to disregard everyone with compiler older than VS 2015. It would be good to have the POCO_ENABLE_CPP11
auto-enabling on other compilers too, based on compiler version.
I made these changes, and I could compile on MSVC 2013. It seems this version doesn't support "= default" for move assignment operator.
If you can make it work with 2013, even better
Also, see what you think about the compiler detection I am doing for C++11/14 support. I am detecting specific compiler versions for MSVC, GCC Clang and AppleClang (which have a different version scheme).
https://github.com/RangelReale/poco/commit/5c533ec67f87a07fc917dc7bfd46adfb0ebd0718
Your scheme is obviously better because it distinguishes between 11 and 14, I'm fine with it.
For the makefile build on GCC (and Clang?) the flag -std=c++0x must be used, any idea on how to integrate it on the build config files? It problably needs to detect the compiler version too?
Something like this (bit more elaborate in real implementation because you have to detect version greater or equal):
GCCVERSION = $(shell gcc --version | grep ^gcc | sed 's/^.* //g')
ifeq "$(GCCVERSION)" "4.8.1"
CFLAGS += -DPOCO_ENABLE_CPP11
endif
in Darwin-clang, Darwin-gcc, Linux-clang and Linux-gcc, there is some WiP there by @zosrothko recently, so coordinate with him.
Also g++ -std=c++11 -x c++ -dM -E - < /dev/null | grep GNUC
displays
#define __GNUC_PATCHLEVEL__ 1
#define __GNUC__ 5
#define __GNUG__ 5
#define __GNUC_RH_RELEASE__ 4
#define __GNUC_STDC_INLINE__ 1
#define __GNUC_MINOR__ 1
There is also
$ g++ -std=c++11 -x c++ -dM -E - < /dev/null | grep _cplusplus
#define __cplusplus 201103L
$ g++ -x c++ -dM -E - < /dev/null | grep _cplusplus
#define __cplusplus 199711L
@zosrothko did you do something about different compiler flags in Makefiles? I was trying to find something searching the net, but I don't have much experience in shell programming, this is what I did currently (wip):
https://github.com/RangelReale/poco/commit/7906b50d5808bfcfc9847e8e680a69e1400f239e https://github.com/RangelReale/poco/commit/e8d3e95a632cc42c15525e27de16c8ea5c14360f https://github.com/RangelReale/poco/commit/ee1a3fcfb4c94fd3536d97465d7325a21bafbdb7
@zosrothko @RangelReale this is a big and important pull, it would be shame if it went sour and fell out of sync; can one of you get it wrapped up soon so it can be merged?
I already made some line comments in https://github.com/RangelReale/poco/commit/7906b50d5808bfcfc9847e8e680a69e1400f239e & https://github.com/RangelReale/poco/commit/e8d3e95a632cc42c15525e27de16c8ea5c14360f
I am ready to test this PR on VS2013, Cygwin and Fedora before it will be merged
On Fedora, makedepend.gcc fails /home/fandre/poco-moderncpp/build/script/makedepend.gcc src/Debugger.cpp /home/fandre/poco-moderncpp/cpp11/Foundation/.dep/Linux/x86_64/Debugger.d /home/fandre/poco-moderncpp/cpp11/Foundation/obj/Linux/x86_64/debug_static /home/fandre/poco-moderncpp/cpp11/Foundation/obj/Linux/x86_64/release_static /home/fandre/poco-moderncpp/cpp11/Foundation/obj/Linux/x86_64/debug_shared /home/fandre/poco-moderncpp/cpp11/Foundation/obj/Linux/x86_64/release_shared -Iinclude -I/home/fandre/poco-moderncpp/CppUnit/include -I/home/fandre/poco-moderncpp/CppUnit/WinTestRunner/include -I/home/fandre/poco-moderncpp/Foundation/include -I/home/fandre/poco-moderncpp/XML/include -I/home/fandre/poco-moderncpp/JSON/include -I/home/fandre/poco-moderncpp/Util/include -I/home/fandre/poco-moderncpp/Net/include -I/home/fandre/poco-moderncpp/Crypto/include -I/home/fandre/poco-moderncpp/NetSSL_OpenSSL/include -I/home/fandre/poco-moderncpp/NetSSL_Win/include -I/home/fandre/poco-moderncpp/Data/include -I/home/fandre/poco-moderncpp/Data/SQLite/include -I/home/fandre/poco-moderncpp/Data/ODBC/include -I/home/fandre/poco-moderncpp/Data/MySQL/include -I/home/fandre/poco-moderncpp/Zip/include -I/home/fandre/poco-moderncpp/PageCompiler/include -I/home/fandre/poco-moderncpp/PageCompiler/File2Page/include -I/home/fandre/poco-moderncpp/PDF/include -I/home/fandre/poco-moderncpp/CppParser/include -I/home/fandre/poco-moderncpp/MongoDB/include -I/home/fandre/poco-moderncpp/Redis/include -I/home/fandre/poco-moderncpp/PocoDoc/include -I/home/fandre/poco-moderncpp/ProGen/include -Wall -Wno-sign-compare -DPOCO_BUILD_HOST=obelix -D_XOPEN_SOURCE=500 -D_REENTRANT -D_THREAD_SAFE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DPOCO_HAVE_FD_EPOLL In file included from /usr/include/c++/5.1.1/type_traits:35:0, from include/Poco/Alignment.h:43, from include/Poco/Foundation.h:115, from include/Poco/DigestEngine.h:23, from src/DigestEngine.cpp:17: /usr/include/c++/5.1.1/bits/c++0x_warning.h:32:2: erreur: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
On Cygwin with gcc 4.9.3, Foundation/ArchiveStrategy compilation fails make -C /cygdrive/z/git/poco-modencpp/Foundation make[1]: Entering directory '/cygdrive/z/git/poco-modencpp/Foundation' \ Compiling src/ArchiveStrategy.cpp (debug, shared) g++ -Iinclude -I/cygdrive/z/git/poco-modencpp/CppUnit/include -I/cygdrive/z/git/poco-modencpp/CppUnit/WinTestRunner/include -I/cygdrive/z/git/poco-modencpp/Foundation/include -I/cygdrive/z/git/poco-modencpp/XML/include -I/cygdrive/z/git/poco-modencpp/JSON/include -I/cygdrive/z/git/poco-modencpp/Util/include -I/cygdrive/z/git/poco-modencpp/Net/include -I/cygdrive/z/git/poco-modencpp/Crypto/include -I/cygdrive/z/git/poco-modencpp/NetSSL_OpenSSL/include -I/cygdrive/z/git/poco-modencpp/NetSSL_Win/include -I/cygdrive/z/git/poco-modencpp/Data/include -I/cygdrive/z/git/poco-modencpp/Data/SQLite/include -I/cygdrive/z/git/poco-modencpp/Data/ODBC/include -I/cygdrive/z/git/poco-modencpp/Data/MySQL/include -I/cygdrive/z/git/poco-modencpp/Zip/include -I/cygdrive/z/git/poco-modencpp/PageCompiler/include -I/cygdrive/z/git/poco-modencpp/PageCompiler/File2Page/include -I/cygdrive/z/git/poco-modencpp/PDF/include -I/cygdrive/z/git/poco-modencpp/CppParser/include -I/cygdrive/z/git/poco-modencpp/MongoDB/include -I/cygdrive/z/git/poco-modencpp/Redis/include -I/cygdrive/z/git/poco-modencpp/PocoDoc/include -I/cygdrive/z/git/poco-modencpp/ProGen/include -DPOCO_NO_FPENVIRONMENT -DPOCO_NO_WSTRING -std=c++0x -std=c++14 -DPOCO_BUILD_HOST=idefix -D_XOPEN_SOURCE=500 -D__BSD_VISIBLE -Wa,-mbig-obj -g -D_DEBUG -c src/ArchiveStrategy.cpp -o /cygdrive/z/git/poco-modencpp/Cygwin/Foundation/obj/Cygwin/i686/debug_shared/ArchiveStrategy.o In file included from include/Poco/Mutex.h:29:0, from include/Poco/Thread.h:25, from include/Poco/ActiveDispatcher.h:25, from src/ArchiveStrategy.cpp:24: include/Poco/Mutex_STD.h:110:7: error: 'timed_mutex' in namespace 'std' does not name a type std::timed_mutex _mutex; ^ include/Poco/Mutex_STD.h: In member function 'void Poco::FastMutexImpl::lockImpl()': include/Poco/Mutex_STD.h:134:2: error: '_mutex' was not declared in this scope _mutex.lock(); ^ include/Poco/Mutex_STD.h: In member function 'bool Poco::FastMutexImpl::tryLockImpl()': include/Poco/Mutex_STD.h:139:9: error: '_mutex' was not declared in this scope return _mutex.try_lock(); ^ include/Poco/Mutex_STD.h: In member function 'void Poco::FastMutexImpl::unlockImpl()': include/Poco/Mutex_STD.h:144:2: error: '_mutex' was not declared in this scope _mutex.unlock(); ^ /cygdrive/z/git/poco-modencpp/build/rules/compile:53: recipe for target '/cygdrive/z/git/poco-modencpp/Cygwin/Foundation/obj/Cygwin/i686/debug_shared/ArchiveStrategy.o' failed make[1]: * [/cygdrive/z/git/poco-modencpp/Cygwin/Foundation/obj/Cygwin/i686/debug_shared/ArchiveStrategy.o] Error 1 make[1]: Leaving directory '/cygdrive/z/git/poco-modencpp/Foundation' Makefile:116: recipe for target 'Foundation-libexec' failed make: * [Foundation-libexec] Error 2 [FrancisANDRE@idefix Cygwin ]$gcc --version gcc (GCC) 4.9.3 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
I see it will not be an easy task supporting all configurations. Maybe it should be better if I do a PR to a moderncpp branch on the main project instead of develop, is this possible?
A separate branch may be a good intermediate step. I have created a c++11 branch from current develop. Create a pull request for this branch, then I can also do some work on it.
Yes, building a cross platform application like Poco is a heavy investment and @obiltschnig with @aleks-f have made a real real good job in the design and orchestration of this Poco app. Now, all contributors are wellcome to sustain on the long term this effort for the benefic of all....
If we draw a line of minimum compiler versions for C++11/14 and allow forcing of c++98-only mode, then it should be possible to compile it with older compilers anywhere where new stuff fails. And we don't have to bend backwards to satisfy non-conformances. In any case, 1.7 can be considered a development release, with compilers/platforms not building documented, as we did with 1.5. I'll move that milestone somewhere in January that everyone is comfortable with. I want to add the NetEx with WebSocket events and ASN library for that release.
From my point of view, I'm fine with dropping support for C++98/03 compilers with 1.7. We just should specify a baseline of supported compilers and language features okay to use. From what I remember we already discussed those, although I'd be perfectly fine with VS2013, clang 3.3, gcc 4.8.1. For those stuck with C++98/03, we can continue to support the 1.6 releases. What I don't want is too much of #ifdef'd code.
Yes, we did discuss it, at the time I think we said VS 2012 but it will have to be 2013. And it looks like there are some g++ non-conformances on some platforms.
Hasn't everyone moved to VS2015 yet? MS made nice progress and VS2017 is about to be released.
According to the roadmap 2.0 should have been released about two month ago. Is there any Information about this? My project depends on integrating poco as a cmake subproject, so I'm really waiting for 2.0 because I dont want to release something depending on the develop branch.
Kind regards,
Tino