The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,830 other subscribers

Archive for the ‘Delphi’ Category

[RSP-10484] GetIt shouldn’t block the IDE – Embarcadero Technologies

Posted by jpluimers on 2019/01/24

I was amazed that this was marked as “Closed; won’t fix” as every respectable IDE I use but Delphi has a package manager that by now can download and update packages in the background without blocking the IDE [RSP-10484] GetIt shouldn’t block the IDE – Embarcadero Technologies.

–jeroen

Read the rest of this entry »

Posted in Delphi, Development, Software Development | 1 Comment »

Chuck Jazdzewski links (ex co-architect of the Delphi VCL architecture)

Posted by jpluimers on 2019/01/24

While doing some research, I bumped into Chuck Jazdzewski on Twitter: “Doing some historical posts to resurrect my blog. http://t.co/kSXy3ARUhR” so I decided to archive a few more links about Chuck because few of the early Delphi R&D team on-line history is slowly fading away into bit-heaven.

Back in the Delphi days, together with Anders Hejlsberg, Chuck Jazdzweski he has co-architected the the Delphi VCL component architecture and the foundations of the Delphi IDE.

Nowadays he’s working at Google and even speaking on conferences, grown far beyond his “be at conferences, but just chat with people” in the Delphi days: [WayBackChuck Jazdzewski – NG-Conf April 18–20th 2018 – The World’s Original Angular Conference

Chuck is a Software Engineer on the Angular team at Google. He is a programming language geek, UI framework and component library veteran, and has a passion for simplifying the task of programming. Before Google, he worked at Microsoft and Borland.

–jeroen

Posted in Delphi, Development, Software Development | 2 Comments »

On my research list: Delphi; automatically generate class body from interface definition

Posted by jpluimers on 2019/01/23

Still need to research this: [WayBack] I search for way to automatically generate class body from interface definition… – Jacek Laskowski – Google+

–jeroen

Posted in Conference Topics, Conferences, Delphi, Development, Event, ModelMaker Code Explorer, Software Development | 2 Comments »

Convert Indesign Sketch to code: Petra Sketch Plugin | Melbourne | Applying Code

Posted by jpluimers on 2019/01/22

Interesting code generator from 3D models into Xamarin, Delphi or Oxygene code:

[WayBack] Petra Sketch Plugin | Melbourne | Applying Code

Convert Sketch drawings to iOS, macOS, Android a​nd​ Windows native drawing code.

[WayBack] Documentation of Petra Sketch Plugin | Melbourne | Applying Code

Via:

–jeroen

Posted in .NET, C#, Delphi, Development, Software Development, Xamarin Studio | Leave a Comment »

Why don’t I get the warning W1036 Variable “‘MyStrings’ might not have been initialized”…

Posted by jpluimers on 2019/01/21

Historically, [WayBack] W1036: Variable '%s' might not have been initialized (Delphi) has had a lot of gotchas.

The most important still is that it never show for managed types (strings, interfaces, etc).

Usually W1036 shows for non-managed types, but Dan Hacker has found a new case where it does not in [WayBack] Why don’t I get the warning W1036 Variable “‘MyStrings’ might not have been initialized’ if the StringsToDo parameter in DoSomething is defined as a var… – Dan Hacker – Google+

He noticed it in Delphi XE and 10.2 Tokyo.

I tested it with the Win32 compiler in XE8.

This warns:

program W1036;
{$APPTYPE CONSOLE}
uses
  System.SysUtils,
  System.Classes;

procedure DoSomething(var StringsToDo: TStringList); // <-------- this line makes the difference
begin
  //do nothing
end;

procedure Test;
var
  MyStrings : TStringList;
begin
  MyStrings.Free;   {W1036 warning if StringsToDo param is NOT var}
  DoSomething(MyStrings);
end;

begin
end.

This does not warn:

program W1036;
{$APPTYPE CONSOLE}
uses
  System.SysUtils,
  System.Classes;

procedure DoSomething(StringsToDo: TStringList); // <-------- this line makes the difference
begin
  //do nothing
end;

procedure Test;
var
  MyStrings : TStringList;
begin
  MyStrings.Free;   {W1036 warning if StringsToDo param is NOT var}
  DoSomething(MyStrings);
end;

begin
end.

initially, I misread his report and reacted wrongly on the cause (but rightly on the suggested use case of var and of TStringList):

Because a var parameter means that the caller should pass in an initialised parameter. Otherwise it should be an out parameter, not a var parameter.

var parameter for reference types like TStrings (only pass as TStringList if it deliberately is not compatible with TStrings) is a risky thing anyway, because the called method can overwrite it and then the caller has to notice the change, then decide what to do with the previous value (likely free it).

I later correct myself:

Looking better, I think it is a compiler issue.

The only difference between nothing and var is the loading of the parameter as a pointer:

with var

//W1036.dpr.16: MyStrings.Free; {W1036 warning if StringsToDo param is NOT var}
//004CD924 8B45FC mov eax,[ebp-$04]
//004CD927 E8B8A6F3FF call TObject.Free
//Project1.dpr.17: DoSomething(MyStrings);
//004CD92C 8D45FC lea eax,[ebp-$04]
//004CD92F E8E0FFFFFF call DoSomething
without var
//W1036.dpr.16: MyStrings.Free; {W1036 warning if StringsToDo param is NOT var}
//004CD924 8B45FC mov eax,[ebp-$04]
//004CD927 E8B8A6F3FF call TObject.Free
//Project1.dpr.17: DoSomething(MyStrings);
//004CD92C 8B45FC mov eax,[ebp-$04]
//004CD92F E8E0FFFFFF call DoSomething

So:

  • with a var, a pointer to the instance of MyStrings (obtained by a lea instruction) gets pushed on the stack
  • without a var, the instance of MyStrings (obtained by a mov instruction) gets pushed on the stack.

For the difference metween mov and lea, and the use of [] brackets, see:

–jeroen

Source: Why don’t I get the warning W1036 Variable “‘MyStrings’ might not have been i…

Read the rest of this entry »

Posted in Conference Topics, Conferences, Delphi, Development, Event, Software Development | 3 Comments »

GitHub – pyscripter/python4delphi: Free components that wrap up Python into Delphi and Lazarus (FPC)

Posted by jpluimers on 2019/01/17

Interesting: [WayBack] GitHub – pyscripter/python4delphi: Free components that wrap up Python into Delphi and Lazarus (FPC)

Via [WayBack] 【Develope a rabbitmq application with python4delphi】 You can download the vcl from https://github.com/pyscripter/python4delphi The VCL can support pyth… – dorje sona – Google+

–jeroen

Posted in Delphi, Development, Software Development | Leave a Comment »

Some interesting bits on interface delegation including a class helper trick – via Stefan Glienke – Google+

Posted by jpluimers on 2019/01/17

Every time he finds a new compiler use, I’m all like “wow!”. This time [WayBackStefan Glienke – Google+: One of these rare moments when the compiler positively impresses me found a new way to make single responsibility principle easier to attain by using a class helper to resolve interface delegation.

In the comments are a few nice tidbits on what the compiler emits in order to implement interface delegation and reference counting.

–jeroen

Posted in Delphi, Development, Software Development | Leave a Comment »

IDE Fix pack for Rio development snapshot – via Delphi-PRAXiS [en]

Posted by jpluimers on 2019/01/17

If you dare using Delphi 10.3 Rio instead of waiting for Update 1 to stabalise (and hopefully speed up things), you might want to try the development snapshot of [WayBackIDE Fix pack for Rio – Page 2 – Delphi Third-Party – Delphi-PRAXiS [en] that got released last week (thanks Andy!):

A new development snapshot of IDE Fix Pack for 10.3 Rio is available.

The Win64 (DCC64) and Android (DCCAARM) compiler patches should now work as excepted.

Changes:

  • Added: Support for Delphi 10.3 Rio
  • Added: Fix for TStringList.IndexOfName bug (RSP-21633)
  • Added: Fix for access violoation in the Welcomepage JScript9.dll binding
  • Added: TCustomListBox.ResetContent is skipped if the handle isn’t created yet
  • Added: DFM Streaming optimizations
  • Added: FillChar uses Enhanced REP MOVSB/STOSB cpu feature if available for large sizes.
  • Added: Enabled CPU LOCK string assignment optimization for local variables
  • Added: -Oe (experimental optimizations) and -x-cgo compiler option extension (Remove of some unneccessary push/pop operations)
  • Added: Expression Evaluator allows array access to pointers even if the type wasn’t declared with {$POINTERMATH ON}
  • Added: New compiler option extensions: -x–compileonly, -x–reslist, -x–depfile, -x–unitstats
  • Added: More performance optimization for the DCC64 compiler
  • Added: TStringBuilder.SetLength optimization [RSP-19178]
  • Added: TStrings.GetDelimitedText optimization
  • Fixed: Packages with duplicate units may not have caused a fatal compiler error.

IDEFixPackD103Reg64.7z

fastdccD103vDev.7z

Related:

–jeroen

Posted in Delphi, Delphi 10.3 Rio (Carnival), Development, Software Development | 4 Comments »

Getting the class from an TRttiProperty by using MetaclassType

Posted by jpluimers on 2019/01/09

Basically I learned that I should not only look for ClassType, but also for MetaclassType: [WayBack] Not a major problem, but given that xProp is a TRttiProperty instance is there a better way to get the ClassType of a property that is tkClass? – Chad Hower – Google+:

Chris Rolliston

The System.Rtti way is this –

x := xProp.PropertyType.AsInstance.MetaclassType;

Been in since TRttiContext was first added, IIRC.

It indeed has been documented since Delphi 2010: [Archive.is] Rtti.TRttiClassRefType.MetaclassType – RAD Studio VCL Reference

–jeroen

Posted in Delphi, Development, Software Development | Leave a Comment »

Delphi sorcery: Loop wars – measuring performance

Posted by jpluimers on 2019/01/08

[WayBack] Delphi sorcery: Loop wars – measuring performance – already showing some nice optimisations that should have been in the RTL into the first place, – sprouted into a nice discussion at [WayBack] Since there was this offtopic argument going on about performance of for-in versus for-to. – Stefan Glienke – Google+ with some relatively straightforward forand for ... in loop compiler optimizations that could be done, but we have dreamt of for like the last decade or two.

–jeroen

Posted in Delphi, Development, Software Development | Leave a Comment »