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 » Community » U++ community news and announcements » New Core
Re: New Core [message #46442 is a reply to message #46388] Wed, 11 May 2016 10:54 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
koldo wrote on Wed, 04 May 2016 09:38
Hello Mirek

What will be the improvements and where do you expect the compatibility problems may appear?


Here is the brief summary:

http://www.ultimatepp.org/srcdoc$Core$Core2016$en-us.html
Re: New Core [message #46445 is a reply to message #46439] Wed, 11 May 2016 15:30 Go to previous messageGo to next message
Mindtraveller is currently offline  Mindtraveller
Messages: 917
Registered: August 2007
Location: Russia, Moscow rgn.
Experienced Contributor

mirek wrote on Wed, 11 May 2016 11:33
Web was planned to be removed. It was DEPRECATED years ago.

Is there anything in Web that you need? I guess I can still fix it...


Oh, sorry I wasn't aware of deprecated status of Web package.
After looking into code, it looks like HttpQuery is the only dependant class from Web package I still use.
Re: New Core [message #46446 is a reply to message #46445] Wed, 11 May 2016 15:32 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
Mindtraveller wrote on Wed, 11 May 2016 16:30
mirek wrote on Wed, 11 May 2016 11:33
Web was planned to be removed. It was DEPRECATED years ago.

Is there anything in Web that you need? I guess I can still fix it...


Oh, sorry I wasn't aware of deprecated status of Web package.
After looking into code, it looks like HttpQuery is the only dependant class from Web package I still use.

Really? I had no idea Smile.

What are we supposed to use instead?
Re: New Core [message #46447 is a reply to message #46446] Wed, 11 May 2016 18:40 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
cbpporter wrote on Wed, 11 May 2016 15:32
Mindtraveller wrote on Wed, 11 May 2016 16:30
mirek wrote on Wed, 11 May 2016 11:33
Web was planned to be removed. It was DEPRECATED years ago.

Is there anything in Web that you need? I guess I can still fix it...


Oh, sorry I wasn't aware of deprecated status of Web package.
After looking into code, it looks like HttpQuery is the only dependant class from Web package I still use.

Really? I had no idea Smile.

What are we supposed to use instead?


For years, there is a superior alternative in Core, HttpRequest. It can handle much more of http and is (if needed) async.

E.g.

http://www.codeproject.com/Articles/1068378/Simple-multi-req uest-web-crawler-using-Uplusplus


Mirek
Re: New Core [message #46448 is a reply to message #46447] Thu, 12 May 2016 03:04 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
Which is the last "old core" version. For bookmarking Smile.
Re: New Core [message #46449 is a reply to message #46381] Thu, 12 May 2016 04:45 Go to previous messageGo to next message
Novo is currently offline  Novo
Messages: 1358
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 Smile

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 Go to previous messageGo to next message
dolik.rce is currently offline  dolik.rce
Messages: 1789
Registered: August 2008
Location: Czech Republic
Ultimate Contributor

mirek wrote on Wed, 11 May 2016 10:40
dolik.rce wrote on Mon, 09 May 2016 20:51
mirek wrote on Mon, 09 May 2016 17:25
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? Smile

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 Sad

Honza
Re: New Core [message #46451 is a reply to message #46449] Thu, 12 May 2016 09:09 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Novo wrote on Thu, 12 May 2016 04:45
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 Smile

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.


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
Re: New Core [message #46455 is a reply to message #46447] Thu, 12 May 2016 15:10 Go to previous messageGo to next message
Mindtraveller is currently offline  Mindtraveller
Messages: 917
Registered: August 2007
Location: Russia, Moscow rgn.
Experienced Contributor

mirek wrote on Wed, 11 May 2016 19:40
For 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")
			{
			}
...
Re: New Core [message #46456 is a reply to message #46451] Thu, 12 May 2016 16:23 Go to previous messageGo to next message
Novo is currently offline  Novo
Messages: 1358
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 Go to previous messageGo to next message
Novo is currently offline  Novo
Messages: 1358
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 176 times)


Regards,
Novo

[Updated on: Fri, 13 May 2016 00:20]

Report message to a moderator

Re: New Core [message #46461 is a reply to message #46457] Thu, 12 May 2016 19:29 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
And a question: I can fully understand the 16 bit alignment for allocation and I've used a lot in the past SSE, so this is a good move.

But why make the smallest allocation size 32, not 16?
Re: New Core [message #46468 is a reply to message #46461] Fri, 13 May 2016 16:48 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
I've been slightly reluctant with the changes since I'm suing an older compiler.

And while I'm not sure I'll switch over to the new core, I'm done with the old compiler. In some micro benchmarks with VS2010, my code runs 4 times slower than with MINGW with 100000 iterations.

So I'm done with VS2010 Laughing Laughing .
Re: New Core [message #46469 is a reply to message #46468] Fri, 13 May 2016 17:05 Go to previous messageGo to next message
cbpporter is currently offline  cbpporter
Messages: 1401
Registered: September 2007
Ultimate Contributor
cbpporter wrote on Fri, 13 May 2016 17:48
I've been slightly reluctant with the changes since I'm suing an older compiler.

And while I'm not sure I'll switch over to the new core, I'm done with the old compiler. In some micro benchmarks with VS2010, my code runs 4 times slower than with MINGW with 100000 iterations.

So I'm done with VS2010 Laughing Laughing .

Well, MSC11 is not any better than 10.

I'll try the latest MSC on Monday.

But can actually MINGW or TDM or whatever is called be actually so good at optimizing my code or is there something else going on?
Re: New Core [message #46474 is a reply to message #46461] Sat, 14 May 2016 07:52 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
cbpporter wrote on Thu, 12 May 2016 19:29
And a question: I can fully understand the 16 bit alignment for allocation and I've used a lot in the past SSE, so this is a good move.

But why make the smallest allocation size 32, not 16?


It is related to the implementation of allocator.

In short: There are small blocks and there are large blocks. At some point, I need to know if freed block is small or large. Fast method to do that is to use single bit in address - small blocks are always 32 bytes aligned, large blocks are 32 bytes misaligned. Therefore small block has to be multiple of 32.

Previous core used the same process, but 16 byte misalignment. So the smallest block was 16 bytes and alignment 8 bytes.

Of course, I have tested this (with theide and other apps) and the increase in memory consumption is negligible.
Re: New Core [message #46475 is a reply to message #46456] Sat, 14 May 2016 07:59 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Novo wrote on Thu, 12 May 2016 16:23
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.


I do not quite understand the question. I was just combining until it worked. Then adjusted 'instant setup' to found options.

BTW, my hypothesis here is that it is a bug linker that makes it impossible to combine size and speed optimized code (after all, there are no issues in Posix). Perhaps something related to inlines (-O3 is more aggresive in inlining everything). SO whatever, all is now -O2.

Mirek
Re: New Core [message #46476 is a reply to message #46450] Sat, 14 May 2016 08:00 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
dolik.rce wrote on Thu, 12 May 2016 06:42

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 Sad

Honza


Hopefully fixed (I have just removed our abs definitions, which were there to support old compilers...)
Re: New Core [message #46477 is a reply to message #46457] Sat, 14 May 2016 08:56 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Novo wrote on Thu, 12 May 2016 17:08

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


You would need "cross-compling" ide... (does not exist at the moment).

Why not just use wine and current nightly build? Works like charm. (Actually, nightly build is built this way - wine mingw).

Mirek


Re: New Core [message #46478 is a reply to message #46455] Sat, 14 May 2016 09:03 Go to previous messageGo to next message
mirek is currently offline  mirek
Messages: 13975
Registered: November 2005
Ultimate Member
Mindtraveller wrote on Thu, 12 May 2016 15:10
mirek wrote on Wed, 11 May 2016 19:40
For 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++;
	}
}

Re: New Core [message #46479 is a reply to message #46478] Sat, 14 May 2016 23:57 Go to previous messageGo to previous message
Mindtraveller is currently offline  Mindtraveller
Messages: 917
Registered: August 2007
Location: Russia, Moscow rgn.
Experienced Contributor

mirek wrote on Sat, 14 May 2016 10:03

I see.

Well, looks like we need to move this piece of code from Skylark to Core, right?


Yes. It will be handy little addition.
Previous Topic: Core: New String methods
Next Topic: ide: Optimal mode removed
Goto Forum:
  


Current Time: Thu Mar 28 15:38:16 CET 2024

Total time taken to generate the page: 0.01239 seconds