Home » Community » U++ community news and announcements » New Core
|
|
|
|
|
|
|
|
| Re: New Core [message #46405 is a reply to message #46401] |
Fri, 06 May 2016 10:24   |
cbpporter
Messages: 1428 Registered: September 2007
|
Ultimate Contributor |
|
|
mirek wrote on Thu, 05 May 2016 10:26koldo wrote on Wed, 04 May 2016 09:38Hello Mirek
What will be the improvements and where do you expect the compatibility problems may appear?
I will detail changes soon (but mostly it is about C++11 and multithreading).
So far, apart for one or two minor changes, suprisingly the most compatibility problems are caused by new Core detecting subtle bugs.
It took me 5 minutes to fix those is my largest app.
Mirek
Ah OK!
I shall wait then!
Honestly, I was hoping for a more substantial update to Core. Most classes are fine as they are, even great, but all the free functions are falling out of favor and considered sub-optimal design nowadays. As an example, all the file name related stuff could be grouped under a class called Path with static members and so on.
I help with remembering where everything goes and what names it has. I often know that there is a free function that solves my problem, but I'm not sure how it is called.
Today I've spent like 5 minutes trying to find the function that copies text to clipboard, only to find that in CtrlCore.h there are things like ClearClipboard and WriteClipboardUnicodeText. Things like this should really be Clipboard::Clear and Clipboard::Write.
|
|
|
|
|
|
| Re: New Core [message #46407 is a reply to message #46381] |
Fri, 06 May 2016 22:53   |
|
|
Hi Mirek,
I have updated the packaging to use C++11, but TheIDE build still fail. The error says DeepClone is not declared, you can see it in the build logs, e.g. for Debian Wheezy. Could you have a look at it, please?
Honza
|
|
|
|
|
|
| Re: New Core [message #46410 is a reply to message #46409] |
Sun, 08 May 2016 15:37   |
|
|
mirek wrote on Sun, 08 May 2016 06:31Most likely it is missing MT in main package config.
Oh, right, I missed that it is necessary now.
So the situation is much better now. There is just few problems left:
Ubuntu 12.4 and ScientificLinux 6 both fail, because their compiler (GCC 4.6 and 4.7, respectively) is so old it doesn't even support the option -std=c++11. Also the compiler in Debian Wheezy (GCC 4.7) doesn't work. This one already knows c++11, but thread_local keyword is not implemented, so the compilation fails.
And the last problem is in ArchLinux packages where the compilation fails on conflicting declaration of abs(int64), which is already present in stdlib in C++11.
Is it safe to drop support for the old distros, even though they are still supported? Ubuntu 12.4 has end-of-life scheduled for April 2017, Debian Wheezy has LTS until May 2018 and ScientificLinux 6 even has full support until Q2 2017 (and then maintenance updates until November 2020).
Honza
|
|
|
|
|
|
| Re: New Core [message #46414 is a reply to message #46410] |
Mon, 09 May 2016 11:23   |
 |
mirek
Messages: 14290 Registered: November 2005
|
Ultimate Member |
|
|
dolik.rce wrote on Sun, 08 May 2016 15:37mirek wrote on Sun, 08 May 2016 06:31Most likely it is missing MT in main package config.
Oh, right, I missed that it is necessary now.
So the situation is much better now. There is just few problems left:
Ubuntu 12.4 and ScientificLinux 6 both fail, because their compiler (GCC 4.6 and 4.7, respectively) is so old it doesn't even support the option -std=c++11. Also the compiler in Debian Wheezy (GCC 4.7) doesn't work. This one already knows c++11, but thread_local keyword is not implemented, so the compilation fails.
And the last problem is in ArchLinux packages where the compilation fails on conflicting declaration of abs(int64), which is already present in stdlib in C++11.
Is it safe to drop support for the old distros, even though they are still supported? Ubuntu 12.4 has end-of-life scheduled for April 2017, Debian Wheezy has LTS until May 2018 and ScientificLinux 6 even has full support until Q2 2017 (and then maintenance updates until November 2020).
Honza
Perhaps we can switch it to 'classic'?
Mirek
|
|
|
|
|
|
| Re: New Core [message #46418 is a reply to message #46414] |
Mon, 09 May 2016 16:32   |
|
|
mirek wrote on Mon, 09 May 2016 11:23dolik.rce wrote on Sun, 08 May 2016 15:37
Is it safe to drop support for the old distros, even though they are still supported? Ubuntu 12.4 has end-of-life scheduled for April 2017, Debian Wheezy has LTS until May 2018 and ScientificLinux 6 even has full support until Q2 2017 (and then maintenance updates until November 2020).
Perhaps we can switch it to 'classic'?
It could be done, if you package the 'classic' uppsrc into the nigthly tarball. I could then try to detect GCC version and set the assembly to classic version if the compiler is too old. It doesn't even need to be whole uppsrc, only packages that are necessary to build theide and umk.
Honza
|
|
|
|
|
|
| Re: New Core [message #46420 is a reply to message #46419] |
Mon, 09 May 2016 20:51   |
|
|
mirek wrote on Mon, 09 May 2016 17:25dolik.rce wrote on Mon, 09 May 2016 16:32mirek wrote on Mon, 09 May 2016 11:23dolik.rce wrote on Sun, 08 May 2016 15:37
Is it safe to drop support for the old distros, even though they are still supported? Ubuntu 12.4 has end-of-life scheduled for April 2017, Debian Wheezy has LTS until May 2018 and ScientificLinux 6 even has full support until Q2 2017 (and then maintenance updates until November 2020).
Perhaps we can switch it to 'classic'?
It could be done, if you package the 'classic' uppsrc into the nigthly tarball.
Well, I do not. 'classic' is basically branch for systems not supporting C++11.
I perhaps could generate complete 'classic' tarball.
I understand that it is a branch, but I think it could still be present in the tarball as a "fallback" for older systems. It would also be simpler for the users, because having two tarballs requires explaining them in great detail which one they should use...
Also it would save me a lot of work when packaging, because I wouldn't have to keep track of compiler version for each of the 15 distros and manually choose which one should be used. It would be especially troublesome for ubuntu and debian, where all 7 versions is currently built from the same package.
Honza
|
|
|
|
|
|
|
|
|
|
|
|
| Re: New Core [message #46441 is a reply to message #46420] |
Wed, 11 May 2016 10:40   |
 |
mirek
Messages: 14290 Registered: November 2005
|
Ultimate Member |
|
|
dolik.rce wrote on Mon, 09 May 2016 20:51mirek wrote on Mon, 09 May 2016 17:25dolik.rce wrote on Mon, 09 May 2016 16:32mirek wrote on Mon, 09 May 2016 11:23dolik.rce wrote on Sun, 08 May 2016 15:37
Is it safe to drop support for the old distros, even though they are still supported? Ubuntu 12.4 has end-of-life scheduled for April 2017, Debian Wheezy has LTS until May 2018 and ScientificLinux 6 even has full support until Q2 2017 (and then maintenance updates until November 2020).
Perhaps we can switch it to 'classic'?
It could be done, if you package the 'classic' uppsrc into the nigthly tarball.
Well, I do not. 'classic' is basically branch for systems not supporting C++11.
I perhaps could generate complete 'classic' tarball.
I understand that it is a branch, but I think it could still be present in the tarball as a "fallback" for older systems. It would also be simpler for the users, because having two tarballs requires explaining them in great detail which one they should use...
Honza
Not sure. For starters, it will complicate the tarball. Either I will have to include both source trees, or invent some patching.
I really would like to keep 'classic' as separate thing. Like gtk2-gtk3, KDE4/5 etc.. Those are not coming in single tarball, right?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Re: New Core [message #46449 is a reply to message #46381] |
Thu, 12 May 2016 04:45   |
Novo
Messages: 1431 Registered: December 2006
|
Ultimate Contributor |
|
|
I'm still getting crashes with the new core and mingw x64 (tdm-gcc 5.1). My app is crashing in Optimal and Size configurations. It is crashing with and without SSE2 flag. BLITZ is disabled, precompiled headers are enabled. x86 configuration seems to be fine.
Interestingly, cc1plus.exe is crashing when I'm trying to compile Optimal with debug info
Update: I've checked mingw 5.3.0 x64 Optimal with debug info. I can get a call stack. It is crashing in Upp::Rect_<int>::Rect_, which is inside of Upp::Ctrl::CtrlPaint.
Thanks.
Regards,
Novo
[Updated on: Thu, 12 May 2016 06:03] Report message to a moderator
|
|
|
|
| Re: New Core [message #46450 is a reply to message #46441] |
Thu, 12 May 2016 06:42   |
|
|
mirek wrote on Wed, 11 May 2016 10:40dolik.rce wrote on Mon, 09 May 2016 20:51mirek wrote on Mon, 09 May 2016 17:25I perhaps could generate complete 'classic' tarball.
I understand that it is a branch, but I think it could still be present in the tarball as a "fallback" for older systems. It would also be simpler for the users, because having two tarballs requires explaining them in great detail which one they should use...
Honza
Not sure. For starters, it will complicate the tarball. Either I will have to include both source trees, or invent some patching.
I really would like to keep 'classic' as separate thing. Like gtk2-gtk3, KDE4/5 etc.. Those are not coming in single tarball, right? 
Ok, it'll be more complicated, but I guess I can make it work somehow with two distinct tarballs. Please let me know when the classic archive is ready.
BTW: What about the issue with Arch Linux, did you look at it? I'm totally swamped lately, so I didn't have time to investigate it at all 
Honza
|
|
|
|
|
|
|
|
| Re: New Core [message #46456 is a reply to message #46451] |
Thu, 12 May 2016 16:23   |
Novo
Messages: 1431 Registered: December 2006
|
Ultimate Contributor |
|
|
mirek wrote on Thu, 12 May 2016 03:09
Weird. That is the place it was always crashing, before I have fixed it with 'finetuning' -O options.
Are you using "Instant setup" default options?
Mirek
No, I was using old -O3 and -Os options.
Replacing -Os with -O2 fixed crashes with Optimal and Size configuration.
I didn't change -O3 to -O2 for the Speed configuration.
I do not understand where you are taking options for the Optimal configuration from. They are not declared explicitly anywhere.
Another interesting thing. A quote from documentation: "-Os: optimizes code for size. It activates all -O2 options that do not increase the size of the generated code. It can be useful for machines that have extremely limited disk storage space and/or CPUs with small cache sizes."
So, basically, -Os is -O2 with some limitations.
Thanks.
Regards,
Novo
[Updated on: Thu, 12 May 2016 16:25] Report message to a moderator
|
|
|
|
| Re: New Core [message #46457 is a reply to message #46381] |
Thu, 12 May 2016 17:08   |
Novo
Messages: 1431 Registered: December 2006
|
Ultimate Contributor |
|
|
Another thing.
Could you please convert all Windows-related include file names to lower case? They are all lower case with mingw on Linux.
It looks like this is the right time to do that.
A patch file created by git looks weird, but still ...
You need to use WIN32 flag with mingw on Linux, and TheIDE won't handle rc-files.
Update: if I use WIN32 flag along with GUI and MT, then I get a problem with rc-files. If I just add a -DflagWIN32 common option, then everything compiles, but TheIDE is still linking against Linux libs ...
I guess I'm missing something.
TIA
-
Attachment: mingw.patch
(Size: 5.67KB, Downloaded 305 times)
Regards,
Novo
[Updated on: Fri, 13 May 2016 00:20] Report message to a moderator
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Re: New Core [message #46478 is a reply to message #46455] |
Sat, 14 May 2016 09:03   |
 |
mirek
Messages: 14290 Registered: November 2005
|
Ultimate Member |
|
|
Mindtraveller wrote on Thu, 12 May 2016 15:10mirek wrote on Wed, 11 May 2016 19:40For years, there is a superior alternative in Core, HttpRequest. It can handle much more of http and is (if needed) async.
Yes, I was aware of the HttpRequest alternative. But HttpQuery represented slightly different functionality. It gave a number of useful routines for URL parsing. I used it in http server code to parse URL variables of incoming http request.
while (!shutdown)
{
if (server->IsError())
{
server.Clear();
server.Create().Listen(answerPort,100);
Sleep(200);
}
TcpSocket socket;
socket.Timeout(2000);
if (!socket.Accept(*server))
{
Sleep(50);
continue;
}
HttpHeader http;
http.Read(socket);
int len = static_cast<int>(http.GetContentLength());
if (len > 0)
socket.GetAll(len);
HttpQuery query(http.GetURI());
String rq = query.GetString("RQ"); // this is where HttpQuery is actually used
if (rq == "REQ1")
{
}
else if (rq == "REQ2")
{
}
else if (rq == "REQ3")
{
}
...
I see.
Well, looks like we need to move this piece of code from Skylark to Core, right?
void Http::ParseRequest(const char *p)
{
while(*p) {
const char *last = p;
while(*p && *p != '=' && *p != '&')
p++;
String key = UrlDecode(last, p);
if(*p == '=')
p++;
last = p;
while(*p && *p != '&')
p++;
if(*key != '.' && *key != '@') {
if(key.EndsWith("[]")) {
Value &v = var.GetAdd(key);
if(v.IsNull())
v = ValueArray();
(ValueArray &)v << UrlDecode(last, p);
}
else
var.GetAdd(key) = UrlDecode(last, p);
}
if(*p)
p++;
}
}
|
|
|
|
|
|
Goto Forum:
Current Time: Mon Apr 27 21:50:52 GMT+2 2026
Total time taken to generate the page: 0.01658 seconds
|