pocoproject / poco

The POCO C++ Libraries are powerful cross-platform C++ libraries for building network- and internet-based applications that run on desktop, server, mobile, IoT, and embedded systems.
https://pocoproject.org
Other
8.32k stars 2.15k forks source link

when will the 2.0 release be ready? #776

Closed trusch closed 5 years ago

trusch commented 9 years ago

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

aleks-f commented 9 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.

trusch commented 9 years ago

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.

aleks-f commented 9 years ago

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))

mkrivos commented 9 years ago
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
bufferoverflow commented 9 years ago

Yes, please switch develop branch to C++11. It's 2015 and all recent compilers support it. ;-r

obiltschnig commented 9 years ago

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.

aleks-f commented 9 years ago

@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?

obiltschnig commented 9 years ago

I'd say introduction of C++11 features into existing and new code only. No interface changes.

obiltschnig commented 9 years ago

I can go for Poco::SharedPtr.

obiltschnig commented 9 years ago

And for those stuck with old compilers: we'll continue to support 1.6.x with critical bugfixes.

aleks-f commented 9 years ago

What about move constructors? There's quite a bit of work adding those to existing classes.

obiltschnig commented 9 years ago

We'll add them piece-by-piece, as we get around to it.

rafzi commented 9 years ago

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:

See: https://msdn.microsoft.com/en-us/library/hh567368.aspx

mkrivos commented 9 years ago
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.
aleks-f commented 9 years ago

Can you make a wiki page with the list, something like this one

RangelReale commented 8 years ago

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.

RangelReale commented 8 years ago

DONE

WIP

aleks-f commented 8 years ago

This looks like a pretty extensive work, I would be in favor of merging this for 1.7. /cc @obiltschnig

obiltschnig commented 8 years ago

+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.

aleks-f commented 8 years ago

@RangelReale I'll take a deeper look this weekend, try to build with gmake and let you know if I run into any problems;

RangelReale commented 8 years ago

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.

aleks-f commented 8 years ago

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.

RangelReale commented 8 years ago

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.

aleks-f commented 8 years ago

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
aleks-f commented 8 years ago

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.

RangelReale commented 8 years ago

I made these changes, and I could compile on MSVC 2013. It seems this version doesn't support "= default" for move assignment operator.

aleks-f commented 8 years ago

If you can make it work with 2013, even better

RangelReale commented 8 years ago

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

aleks-f commented 8 years ago

Your scheme is obviously better because it distinguishes between 11 and 14, I'm fine with it.

RangelReale commented 8 years ago

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?

aleks-f commented 8 years ago

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.

zosrothko commented 8 years ago

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

zosrothko commented 8 years ago

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

RangelReale commented 8 years ago

@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

aleks-f commented 8 years ago

@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?

zosrothko commented 8 years ago

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

zosrothko commented 8 years ago

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.

error This file requires compiler and library support for the \

zosrothko commented 8 years ago

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.

RangelReale commented 8 years ago

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?

obiltschnig commented 8 years ago

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.

zosrothko commented 8 years ago

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....

aleks-f commented 8 years ago

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.

obiltschnig commented 8 years ago

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.

aleks-f commented 8 years ago

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.

OlafvdSpek commented 7 years ago

Hasn't everyone moved to VS2015 yet? MS made nice progress and VS2017 is about to be released.