Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site
Search in forums












SourceForge.net Logo
Home » Developing U++ » U++ Developers corner » What is the highest version of U++ that does not require C++11 ?
What is the highest version of U++ that does not require C++11 ? [message #46705] Sat, 16 July 2016 10:37 Go to next message
kov_serg is currently offline  kov_serg
Messages: 37
Registered: August 2008
Location: Russia
Member
What is the highest version of U++ that does not require C++11 ?

https://github.com/ultimatepp/mirror/tree/2f36d0eb38533758a6 35aa3cda6008046234b881

[Updated on: Sat, 16 July 2016 11:17]

Report message to a moderator

Re: What is the highest version of U++ that does not require C++11 ? [message #46706 is a reply to message #46705] Sat, 16 July 2016 17:04 Go to previous messageGo to next message
Novo is currently offline  Novo
Messages: 1358
Registered: December 2006
Ultimate Contributor
kov_serg wrote on Sat, 16 July 2016 04:37
What is the highest version of U++ that does not require C++11 ?


An announcement was posted on Monday 31 August 2015. Try to check revisions, which are close to this date.


Regards,
Novo
Re: What is the highest version of U++ that does not require C++11 ? [message #46708 is a reply to message #46706] Sat, 16 July 2016 21:15 Go to previous messageGo to next message
kov_serg is currently offline  kov_serg
Messages: 37
Registered: August 2008
Location: Russia
Member
I rebuild from source last stable version (9251) and disable upgrade. Now it works with out C++11.
And upgrade window should have button select all. Checking thousands of comboboxes is masochism.

I've found the black date it is 22 Feb 2016 ( https://github.com/ultimatepp/mirror/commit/84ed89f483818832 c9811ceaafefd79f7d2ce665 )

+#ifndef CPP_11
+#error This version of U++ REQUIRED C++11
+#endif


My opinios transition into C++11 is a big strategic mistake. Until there is no modules there is no worthwhile reason to use it.
New features will couse even more problems in furute. Also it ruins backward compatibility with old machines. Old versions works even on i486 with windows95 and old suse distros.
For new computers there are a lot of better tools.

ps: all prebuild binaries for ubuntu has problems. I don't know why. But if rebuild from source it works normal.

[Updated on: Sat, 16 July 2016 21:18]

Report message to a moderator

Re: What is the highest version of U++ that does not require C++11 ? [message #46709 is a reply to message #46708] Sat, 16 July 2016 21:30 Go to previous messageGo to next message
Klugier is currently offline  Klugier
Messages: 1075
Registered: September 2012
Location: Poland, Kraków
Senior Contributor
Hello kov_serg,

Quote:

My opinios transition into C++11 is a big strategic mistake. Until there is no modules there is no worthwhile reason to use it.
New features will couse even more problems in furute. Also it ruins backward compatibility with old machines. Old versions works even on i486 with windows95 and old suse distros.


I think transient to C++11/C++14 is the only way to keep upp competitive to other C++ frameworks. Keeping old standard only for backwards compatibility is not an option for future of U++. Please notice that several features that is available in newer standards like auto and lambdas allows us to develop U++ faster and easier. It is also good value for framework users code.

Moreover, sometimes ago Mirek created branch uppclassic that contains code that is compatibility with old standard. I think we should add this in our documentation - where find old sources. Mirek can you give us path to this branch - I cannot find it on github?

Quote:

For new computers there are a lot of better tools.


Can you specific what kind of competitors do you mean? Now days, we have got still many features to offer them.

Backing to prebuilds on Ubuntu - probably dolik.rc knows the problem. The issue was mention in another topic.

Sincerely,
Klugier


U++ - one framework to rule them all.

[Updated on: Sat, 16 July 2016 21:33]

Report message to a moderator

Re: What is the highest version of U++ that does not require C++11 ? [message #46710 is a reply to message #46709] Sat, 16 July 2016 23:07 Go to previous messageGo to next message
kov_serg is currently offline  kov_serg
Messages: 37
Registered: August 2008
Location: Russia
Member
Quote:

I think transient to C++11/C++14 is the only way to keep upp competitive to other C++ frameworks.

Are you joking. "This frame work may work only with C++11 and works stable only on latest compiler and only for this os and only on x64 platform with lates Xeon processors. This make as competitive to others. Others are going to the bright future. So we do."
If it can not find niche it simply dies. In what field it competitive, if you reduce platform where it could run.

Quote:
Keeping old standard only for backwards compatibility is not an option for future of U++.

Everything flows, everything changes but breaking compatibility is the last thing should be done.
Where you benifits for example it it will not run on PentiumD like Windows10?

Quote:
Please notice that several features that is available in newer standards like auto and lambdas allows us to develop U++ faster and easier. It is also good value for framework users code.

I see nothing special in this features. THISBACK works fine.
Are you sure this allow you faster and easier work? It help make dynamyc linking of packages. Increasing gui responsibility?
There is no serious reasons to use labdas except reactive programming.

"Ultimate++ promises radical reduction of code complexity of typical desktop applications" but I see no reduction of code complexity is this. All new features increasing complexity.

In brief: you reduce portability and increase complexity but what you get labda, auto, shorter for. But does not this increase productivity? Or this is only cool useless features like latest iPhone in your pocket.
Re: What is the highest version of U++ that does not require C++11 ? [message #46711 is a reply to message #46710] Sat, 16 July 2016 23:37 Go to previous messageGo to next message
Klugier is currently offline  Klugier
Messages: 1075
Registered: September 2012
Location: Poland, Kraków
Senior Contributor
Hello,

To obtain the latest C++03 sources from U++ repo you can type:
svn checkout svn://www.ultimatepp.org/upp/classic/uppsrc classic_uppsrc


Please notice that latest C++11 version is located at
svn checkout svn://www.ultimatepp.org/upp/trunk/uppsrc


I will keep in mind your post and I think we should solve this problem somehow - like putting classic/uppsrc to tar/zip etc. If you have any ideas - please let us know about it. Please notice that maintaining two branches is expensive for us. Only critical bugs should land in C++03 branch.

Sincerely and thanks,
Klugier


U++ - one framework to rule them all.

[Updated on: Sat, 16 July 2016 23:40]

Report message to a moderator

Re: What is the highest version of U++ that does not require C++11 ? [message #46713 is a reply to message #46705] Sun, 17 July 2016 12:36 Go to previous messageGo to next message
mr_ped is currently offline  mr_ped
Messages: 825
Registered: November 2005
Location: Czech Republic - Praha
Experienced Contributor
I don't even see, how you can have problem with C++11 source.

If your own source is C++03 only, so set your compiler to build upp with C++11 (14), and your code with C++03, and link it. But you should migrate to C++11 like yesterday, it's so much better.

edit: about increased productivity
For me certainly C++14 helps a lot. "auto" and "constexpr" I use daily. Unified {} initializers syntax helps me a lot, so I don't have to remember all the special quirky ways how to initialize some things to value. Things like "for (auto i : {0, 1, 2})" *reads* good to me. I don't use lambdas much, can't get used to their syntax yet. But just the basic stuff plus official move semantics were enough for me to switch right away in 2011, now it's 5 years later and basically every decent platform has full C++11 compiler, and almost complete C++14 one.

[Updated on: Sun, 17 July 2016 12:42]

Report message to a moderator

Re: What is the highest version of U++ that does not require C++11 ? [message #46731 is a reply to message #46713] Thu, 21 July 2016 07:22 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Please just use 'classic'. It is maintained and things even get backported (right now I am backporting new RichText features back to classic).

BTW, I have got several projects using 'classic' too (mostly because of compiler is missing on target platform).

Mirek
Re: What is the highest version of U++ that does not require C++11 ? [message #46808 is a reply to message #46731] Sun, 14 August 2016 21:22 Go to previous messageGo to next message
kov_serg is currently offline  kov_serg
Messages: 37
Registered: August 2008
Location: Russia
Member
I will say more. Microsoft and Google has aim to cut out old systems.
Just try to compile program for winnt4 of even for winxp (with WINVER=0x400 _WIN32_WINNT=0x400). Even if target platfom is available. Then you try to run on target you will unpleasantly surprise.
The same in latest android sdk application will not start on target even if it compiled for old target. But will work on new devices.
https://i.ytimg.com/vi/OGAu_DeKckI/hqdefault.jpg

http://louis.steelbytes.com/vs2008_vs_win40.html
https://supportxpdotcom.wordpress.com/2012/03/28/what-makes- apps-developed-with-visual-c-11-beta-not-run-on-windows-xp
http://stackoverflow.com/questions/35618098/android-support- libraries-23-2-0-cause-app-to-crash
...

I see no reason why my application should not work on old version of os if they run on them before.
Why mingw has no static runtime and depends on msvcrt? Why LLVM does not support winxp?
http://risovach.ru/thumb/upload/200s400/2012/12/generator/lila-beremenna_6228626_orig_.jpeg
Re: What is the highest version of U++ that does not require C++11 ? [message #46813 is a reply to message #46808] Tue, 16 August 2016 11:18 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
Also, the issue of "just use classic" is not as simple.

It is not a question of using the latest compilers and using C++ pre 11 to compile "legacy" code. All done, right?

It is the issue that these new compilers WILL NOT COMPILE old code. I, and it appears a lot of people on the forum, have ton of issues when switching, with weird errors, mostly related to deleted members and what not.

I have a job to to and honestly can't be bothered to even google these errors. I have zero interest in C++ 11x and if the compilers can't handle my old code, well then I just won't use the compiler.

I will try to fix these errors, months or years down the line, when I have free time.

Until then, sometimes I can use some workarounds and will still try to make a concentrated effort to make my code compatible with Visual Studio 2014.
Re: What is the highest version of U++ that does not require C++11 ? [message #46818 is a reply to message #46705] Wed, 17 August 2016 10:09 Go to previous messageGo to next message
mr_ped is currently offline  mr_ped
Messages: 825
Registered: November 2005
Location: Czech Republic - Praha
Experienced Contributor
When gcc is set to -std=c++03, it should work with legacy source on syntax level at least.

I'm not sure how it will go with include files, some of them got maybe renamed, but that should be quick to fix.

I wonder what other kind of errors/problems there are, I never met anything serious, then again my C++ sources are not that huge. But if you consider how fast Mirek was able to switch whole UPP code base to C++11, it shouldn't be that bad?
Re: What is the highest version of U++ that does not require C++11 ? [message #46840 is a reply to message #46818] Fri, 26 August 2016 13:42 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
Quote:
Yup, still can't compile anything, not even the command line application.

Reverted to pre C++11x versions.


Scratch that. After deleting all previous version and a fresh install, I managed to get something that only has a couple of different error for the command line project, so might get it to compile.

One is:
BuildMethod.cpp(24): error C2676: binary '<<=': 'Upp::String' does not define this operator or a conversion to a type acceptable t
    o the predefined operator


The other one is:
error C2280: 'Block::Block(const Block &)': attempting to reference a deleted function


Block is:
class Block: Moveable<Block> {
public:
	WithDeepCopy<VectorMap<String, Variable>> Vars;
	int Temps;

	Block() {
		Temps = 0;
	}

	rval_default(Block);
};


So how does one handle this with the new C++?

Anyway, these two problems are fixable.

But I think it is fair to say that the C++ 11x integration did not work at all well. Almost killed U++ for me.

[Updated on: Fri, 26 August 2016 13:59]

Report message to a moderator

Re: What is the highest version of U++ that does not require C++11 ? [message #46859 is a reply to message #46840] Tue, 30 August 2016 09:29 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
Quote:

String& operator<<=(const String& s)
"Deep" assignment. It is equivalent of standard assignment followed by Shrink operation (in other words, internal buffer gets reallocated to the exact size of source).


Hmmm, that means that I can replace <<= with = in the new C++?
Re: What is the highest version of U++ that does not require C++11 ? [message #46860 is a reply to message #46859] Tue, 30 August 2016 09:38 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
Quote:

Block is:
class Block: Moveable<Block> {
public:
	WithDeepCopy<VectorMap<String, Variable>> Vars;
	int Temps;

	Block() {
		Temps = 0;
	}

	rval_default(Block);
};



The rval_default was preventing the copy.

OK, at least for the command line projects I will use MSC14 and latest U++ for e trial period of 2 weeks.
Re: What is the highest version of U++ that does not require C++11 ? [message #46861 is a reply to message #46860] Tue, 30 August 2016 17:03 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
So, I used the new U++ for only a day in console mode (the GUI projects are not ported yet), and here are my observation:

1. C++ 11x is manageable, but there needs to be a document with common problems and their solutions. My GUI project is still full of copy issues.
2. The new Core is cleaner and better organized. I like it. It is in great shape. Maybe need a bit more work, but it is really minor.
3. The debugger is absolutely bad. It has never been this bad. It totally fails at recursive debugging, messing up the context fully. Strangely, this goes for my old install too, so I guess I never noticed it before.
4. The "automatic setup" now works, but needs some feedback. You click it and nothing happens. I had an install without TDM, manually copied over TDM, clicked automatic setup, TDM was not detected. I had to copy the old *.bm files and restart TheIDE and it worked.
5. MSC14/visual Studio 2015 is still detected as "MSC15". It is not 15. It is 14. MSC15 is the 2016 version that is not fully out yet and has a TBA on the release date. Might be even VS 2017. Easy fix.
6. MSC11 won't compile .rc, but I guess that version isn't maintained anymore.
7. Target file override is no longer stored based on package. This makes TheIDE borderline unusable for me. Every single project has an override for it's resulting .exe and executables can't work outside their "install" folder.

One day is not enough to asses the status, but things are finally looking good. Some of the problems look very solvable to me. I think I can fully migrate to the latest U++ and only have to worry about a couple of forked controls because of bugs.

[Updated on: Tue, 30 August 2016 17:52]

Report message to a moderator

Re: What is the highest version of U++ that does not require C++11 ? [message #46863 is a reply to message #46860] Wed, 31 August 2016 19:29 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
cbpporter wrote on Tue, 30 August 2016 09:38
Quote:

Block is:
class Block: Moveable<Block> {
public:
	WithDeepCopy<VectorMap<String, Variable>> Vars;
	int Temps;

	Block() {
		Temps = 0;
	}

	rval_default(Block);
};



The rval_default was preventing the copy.

OK, at least for the command line projects I will use MSC14 and latest U++ for e trial period of 2 weeks.


Well, yes, with hindsight, rval_default was probably sort of mistake (maybe just communication mistake). I believe that we need comprehensive docs about pick/clone and composition issues.

In above example, removing rval_default will simply generate copy and move constructors 'std-style'. Which is OK, but I will still push for pick/clone style... (where 'clone' is explicit unless '=' is move).

Mirek
Re: What is the highest version of U++ that does not require C++11 ? [message #46864 is a reply to message #46859] Wed, 31 August 2016 19:34 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
cbpporter wrote on Tue, 30 August 2016 09:29
Quote:

String& operator<<=(const String& s)
"Deep" assignment. It is equivalent of standard assignment followed by Shrink operation (in other words, internal buffer gets reallocated to the exact size of source).


Hmmm, that means that I can replace <<= with = in the new C++?


Yes.

Originally (pre 2013) <<= meant deep copy and 'other data assignement'. Deep copy meaning is deprecated in favor of 'clone'.

With String, it was always pointless anyway, so it is now removed.

Witch containers, use a = clone(b). Or a = pick(b) if you want move. frankly, pick is now 100% synonyme for std::move, so you can write a = std::move(b) too...

We still use <<= for widget data assignment.

Mirek

Mirek
Re: What is the highest version of U++ that does not require C++11 ? [message #46865 is a reply to message #46808] Fri, 02 September 2016 09:24 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
kov_serg wrote on Sun, 14 August 2016 21:22

Why mingw has no static runtime and depends on msvcrt? Why LLVM does not support winxp?


I guess part of reason is that C++11 standard multithreading library is based on condition variable which does not have Win32 API support in WinXP.

U++ provides workaround for that, but it is nasty and perhaps less effective.

Mirek
Re: What is the highest version of U++ that does not require C++11 ? [message #46884 is a reply to message #46865] Tue, 06 September 2016 09:04 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
Finally, I am happy to be able to move on: all projects can now build with latest U++, MSC14 or TDM. With only 3 forked CtrlLib classes Smile.

Old U++ and VC versions will be passively phased out.

I still found memory corruption bugs when compiling under 64 bits, but for 32 bit things work right now, so one battle at a time!
Re: What is the highest version of U++ that does not require C++11 ? [message #47887 is a reply to message #46705] Tue, 18 April 2017 21:45 Go to previous messageGo to previous message
aftershock is currently offline  aftershock
Messages: 143
Registered: May 2008
Experienced Member
I have similar problem
I have current stable IDE..(version 10804). Windows....VIsual studio 17 64 bit
Why is it calling a copy constructor at map.h 212

threads[free_index].Run ( THISBACK5 ( execute_bot_in_background, bot1, a, params, result_mode, stat_group_id ) );

main.cpp(1502): error C2280: 'Upp::VectorMap<Upp::String,double>::VectorMap(const Upp::VectorMap<Upp::String,double> &)': attempting to reference 
    a deleted function
d:\upp\uppsrc\core\Map.h(212): note: compiler has generated 'Upp::VectorMap<Upp::String,double>::VectorMap' here
d:\upp\uppsrc\core\Map.h(212): note: 'Upp::VectorMap<Upp::String,double>::VectorMap(const Upp::VectorMap<Upp::String,double> &)': function was implicitly deleted becau
    se a base class invokes a deleted or inaccessible function 'Upp::AMap<K,T,Upp::Vector<T>>::AMap(const Upp::AMap<K,T,Upp::Vector<T>> &)'
        with
        [
            K=Upp::String,
            T=double
        ]
d:\upp\uppsrc\core\Map.h(190): note: 'Upp::AMap<K,T,Upp::Vector<T>>::AMap(const Upp::AMap<K,T,Upp::Vector<T>> &)': function was implicitly deleted because a data membe
    r invokes a deleted or inaccessible function 'Upp::Index<Upp::String>::Index(const Upp::Index<Upp::String> &)'
        with
        [
            K=Upp::String,
            T=double
        ]
d:\upp\uppsrc\core\Index.h(210): note: 'Upp::Index<Upp::String>::Index(const Upp::Index<Upp::String> &)': function was implicitly deleted because 'Upp::Index<Upp::Stri
    ng>' has a user-defined move constructor
        ]

[Updated on: Tue, 18 April 2017 21:59] by Moderator

Report message to a moderator

Previous Topic: Use zlib inside another library
Next Topic: U++ in a computer cluster
Goto Forum:
  


Current Time: Thu Mar 28 18:04:59 CET 2024

Total time taken to generate the page: 0.01591 seconds