Sunday, February 27, 2011

Tea Leaves for 64-bit Delphi

Your reviewer was looking at the KSDev purchase and thinking...


Pesky 32-bit assembly and legacy issues.The whole VCL is peppered with 32-bit legacy code, some going even back to 16-bits, such as aliases for WinProcs, WinTypes.


Judging from the last version of KSDEV library before Eugene pulled it from his website, the latest XE codes with some unusual 64-bit codes, some parts of the Embarcadero wiki before they removed it from public view.


Here is your reviewer's take about the current state of Delphi/64.Delphi 64-bits requires a full compiler rewrite. That means, only the language stays the same, everything else doesn't matter.


For example, if the definition of "program", "for", "if", "while", "being", "end" stays the same or similar, it is considered Delphi or Pascal language.


In a liberal sense, that is how RemObjects does it: With RemObjects Prism, the NET library is the main library instead of VCL, there are compatible constructs to make porting code from Delphi/Win32 to NET/Prism.


In order to code for Delphi 64, the whole entire VCL needs to be re-written to first remove the assembly parts and make it as "compiler magic" or in-line assembly routines that is linked to the final 64-bit EXE file.


The first part is easy. Making equivalents to the original Delphi/Pascal codes: Go back a few versions where the IntToStr, and other routines were not converted assembly and use the original codes.


The second part is not-so-easy: The Delphi VCL is limited to Win32 only and nothing for Mac or Linux.


The trick is to make the final result language compatible. Remember the QT/Kylix library, where the Delphi 6/7 had an alternate implementation called QT(whatever).


QT and WxWidget are both respectable libraries, except the fact that the Borland C++ compiler is so far "out of the C++ loop" that it could never hope to have the same respect Microsoft Visual 2008, 2010, Intel C++, GCC and Digital Mars C++ compiler have today.


C++ Builder XE
Talking about C++ Builder is like talking about an athlete who claims it is the "best", won many former awards, with lots of boasting, pomp and grandeur - because of the corporate sponsor decided to stop the athlete from training, making it fat and lazy. The corporate sponsors then decided to silenced the critics by threatening NDA or humiliating them publicly.


In the past 10 or so years, there were certain critics who went to presentations with floating point performance reviews but was stopped last minute because of NDA or Borland threatened lawsuits at them. Some of the critics were so vocal and so disappointed about it, many of them are University professors -- they went and subsequently switch from Delphi to Visual Studio for their teaching syllabus and never looked back.


(To rub insult to injury, C++ builder is almost 90% slower than Visual C++ or even Intel C++ compiler. You can find out easily by running SpecInt, LinPack or the recently compatible Crypto Library to find your own conclusions.)


In relation to QT and WxWidget, there is no or very little documentation about QT for C++ Builder 2010/XE or even WxWidget for C++ Builder 2010/XE.


After heckling with trying to get WxWidget or QT to compile, developers face Interesting problems with C++ Builder: Intellisense sucks, very long compile times, even longer than Visual Studio or Intel C++ compiler, inability to compile code that compiles with Visual Studio/GCC/ICC.


What your reviewer thinks about Delphi XE2 (Delphi Exorcist Edition II)Delphi 32-bit version would have a new VCL library called the UCL library along with the current VCL side-by-side.


In order to make a 64-bit EXE file, the person would have to use UCL exclusively.


Remember how Kylix did it? They had pascal files with QT(whatever) and since Borland could not control the language or state of QT includes, it lead to three completely unusable versions of Kylix.


Since UCL would be cross-platform, it meant instead of TButton, the person would have to re-code their application to use UForm, UButton, URadioButton, UGrid, then to stop the users from doing stupid things, like screwing up the 64-bit registers or doing stupid 32-bit tricks (such as modifying the ES:DI) or the usual assembly code that peppers a VCL application.


The no-assembly issue would make sense. For instance, OSX 64-bit calling conventions or memory management is completely different from Win32 memory management.


Kryukov Software DevelopmentThis would make Mr. Eugene Kryukov, founder of Kryukov Software Development (or KSDEV) very happy person. For many years, the KSDEV VCL libraries does not have a good report writer, good grid and good edit controls. You can be sure DevExpress, Nevrona, Report Builder, LMD, TMS would then make superb components (each sold separately, like toys) built on-top of Eugene's components.


Since the most popular cross-platform libraries would not be used (because of C++ builder issues, GPL licensing issues), Embarcadero decided to use KSDEV because it Mr. Eugene Kryukov was the last person who knew how to write a cross-platform component library and cheap enough for Embarcadero to buy over.


DevExpress is estimated to be worth at least US$20 million, almost the same price as Embarcadero Delphi purchase, making it too expensive for Embarcadero to buy over.


How did Borland value Delphi at almost 70% less than the original US$100 million it sought, when it sold to Embarcadero? The answer itself lies in the way how Borland treated it customers and those on the newsgroup alike: Very shabbily, ignoring complaints and enforcing a SA-damn subscription or annual Delphi updates and payments.

Delphi's Last StandEmbarcadero promises 1st half of 2011 to deliver a working 64-bit compiler. Will they deliver? If the momentum to port Delphi codes to NET, C#, C++ and leave Delphi continues, and they still don't have a working usable 64-bit compiler and library anytime soon, it will be game-over.


It will be game-over because the new Delphi/64 will come with a new UCL component library and everything needs to be rewritten for it to be compatible with Delphi/64. That means -- other component vendors, if they are not in good graces or fell out with Embarcadero (like leaking out Delphi 2010, Delphi 2009 beta builds or uploading Delphi beta builds to chinese FTP sites) will be in for a big surprise.


Those hardest hit will be the component vendors because they need to rewrite their codes to be UCL compatible, the report writer guys need to update the libraries to 64-bit compatible, the grid guy needs to update the grid, the database guy needs to update their database-code and so on...


Those programs which contain custom components needs to be upgraded too, don't forget. Those old libraries which are still used, but the vendor went out of business, they will not be compatible and need significant porting effort to make them work with 64-bits (like making TurboPower Abbrevia, TurboPower Opherus UCL compatible).


Unless you patched KSDEV code before, or posted heavily on KSDEV forum formerly about issues and advised on work-arounds, or wrote Delphi components..., it is going to be tough work doing the code migration...


Most of the Delphi developers don't reach this level because they are so lazy and just buy one component pack after another to solve their problems...


Then, there are the usual gang of idiots who uses warez and pirated cracks, hacks and Delphi-Lovers who use all pirated crap to avoid paying for their libraries. Those people will really feel "Delphi-Love", when, the company went out business, they used a cracked or hacked version of their VCL products and will soon start begging for a non-existent 64-bit version of the same VCL codes. This will become reality soon.

Please see article Tea Leaves for 64-bit Delphi Part 2

:)

16 comments:

Radek Červinka said...

Why do you write this articles? Is this revenge to EMBT? Do you stole something? I think so. Why are not doing something useful instead - maybe go to Egypt :-)?

But there is some notices...

BTW: Delphi 64 probably will include BASM. Delphi 64 required only new codegen and linker. There is not warm love to QT in R&D. Procedures in pascal can be better inlined that in BASM assembler (passing data). Whole VCL and RTL can be compiled as PUREPASCAL (every asm routine have pascal version).

Anonymous said...

My estimates for a Delphi 64 ready for productive use has always been 2015. It would be a big surprise if there's anything worth evaluating prior that.

Come on... it's 2011 and components for Unicode-Delhi still aren't where they should be...

Trying to print Logistics Barcodes (GS1-128) seems to be an adventure. Rave Reports is dead. And Fast Report seems to contain a half baked mock up - that almost fooled me into buying the product.

ZeosLib 7.0.0 is still Alpha?!?

I think someone selling "D7 forever" T-Shirts could make a fortune.

scottyroo said...

There's always another side to the story... usually the story a company might find damaging, which may result in unspeakable motives to which you accuse of...

Some people stand up and fight back because they care and they are tired of companies spinning things to their favor...

What happened to being honest? Why is the "informer" made out to look like the bad guy?

Strange times we live in... That are changing because of the internet and people like the writer who truly are trying to inform their readers of both sides.

What kind of person questions these motives? Or disagrees with them?

Gad D Lord said...

Pity that after watching how to write QT apps for Android, and what's new in jQUery 1.5m the next thing to read was your article.

While other players are playing completely new games, the Borcadero team is still fighting problems solved ages ago (like multiplatform support or 64-bit compiler). Pity, but I guess you are right.

My only hope is that they are ready with 64-bit prior to the 128-bit comes along.

Radek Červinka said...

Yes, I like EMBT (not Borland). They did in 3 years what Borland did not manage for x years (generics, unicode, 64bit near, hinted ARM compiler) and they heavy investing in Delphi. And for this reasons, this blog is for me unfair and not normal.

Yes, they did some things wrong - but for me Delphi is good hand.

But appreciated no censorship in comments on this blog - thank you.

Anonymous said...

I just recently tried out the trial of Delphi XE and Delphi Prism XE and was shocked to notice that Windows 3.1 controls were still included. Why is Embarcadero still including controls for an operating system nearly 20 years old? Are there still any Win 3.1 boxes out there? Even the banking industry (where I work), notoriously slow at change, is at least on Windos XP.

Anonymous said...

Don't fuck with my win 3.1 controls. The directory and file listbox components are still very useful.

Unknown said...

Funny how, for someone so disgustingly breaching the NDA, you get your facts so consistently wrong!

Delphi Haters said...

Statements regarding Delphi/64 is based on educated guessing, some source code that was removed before KSDEV announced the buy-over from Embarcadero, the missing "help" site that contained UCL, UButton, UForm, URadioButton help.

Statement regarding the first part, where I discussed about Delphi/64 requires a full rewrite is factually accurate: Embarcadero is taking more than 2 or 3 years for this and no new announcement while everyone waits.

The biggest problem is making the VCL 64-bit compatible. This is an educated guess regarding what RemObjects, the former Kylix (anyone used Delphi 7 QT?) did it. They would say: rewrite this in Prism or Kylix, but change the sematics so that instead of TButton, it is QButton, TForm is is QForm and so on. Should it not also be the same or similar for Delphi/64?

The statement for the second part, there are a couple of critics who voiced their concerns. You can browse the older Dr Dobbs's, SD Time archives for proof of this. There are those compiler reviews where they compared C++ Builder, Symantec C++ (now called Digital Mars), Intel C++ and Microsoft C++ compiler. Borland was left out with a very sorry note that the critics were silenced due to NDA.

The statements for the third part, is that: Since C++ Builder supports C++, why can it not compile WxWidgets or QT? Did anyone try? Or did they try... and gave up? ...

The statements for the forth part is based on Delphi/Kylix, RemObjects Prism/Mono and educated guessing into changes required.

I could be wrong... but history has proven that in order for Borland to make a Kylix or RemObjects to make Prism, they made lots of changes to the sources and then gave us a shabby product, expecting us to pay an upgrade every year.

Few years back, it was three disaster versions of Kylix and nobody could use it. Borland had a chance to fix all those bugs but never bothered to. The only person who fixed those bugs was Simon Kissel, who kissed-death from Borland.

Go figure and come to your own conclusions. Go and educate yourself.

If these come educated guessing is accurate... this blog is the only blog that has written accurately when Delphi XE came (60 days after the last big promotion), this blog is the only blog that criticizes about Delphi and does so with truth and accuracy, not here-say and whispers.

Radek Červinka said...

>They would say: rewrite this in
>Prism or Kylix, but change the
>sematics so that instead of
>TButton, it is QButton, TForm is is
>QForm and so on.

No: TForm is still TForm in Kylix, but unit Forms is QForms. So I expected that similar concept will be used. VCL will be expanded, but for multiplatform UCL with different units can be used.

TButton will be TButton in both library, but maybe in different unit.

And about KSDEV - EMBT now have mobile (and crossplatform) framework from this company, and there are hints about ARM compiler and recently they confirmed strong mobile plans.

Delphi Haters said...

I don't exactly remember, it's been such a long time since I touched Delphi 6/7...

Embarcadero is welcome to raid my offices if they want. There's many physical boxes of Delphi, C++ Builder, even a box for TurboPascal, DBase and other stuff I brought from Borland.

Heck, they can even find licenses for Delphi 2007, Delphi 2009, Delphi 2010, Delphi XE...

I would be interested in their ARM or whatever offerings.

The question for Delphi/ARM would be same as Delphi 64-bits: When?

In the mean time, I am happily coding away with full version of PocoLibrary and WxWidgets.

Anonymous said...

Looks like you are disappointed Delphi Lover :-) That is is good.
I miss old Borland days...when Borland C++ was excelent and Delphi spirit...sigh

Guest said...

I guess VCL is OK for 32/64 and the UCL thing is for cross-platform uses.
and maybe UCL is fully compatible or even basically the same as VCL if you compile to Windows, but for new projects targeting other platforms you must use UCL.

and the compiler maybe in a radical refactoring process but a fully rewrite is unlikely.

Anonymous said...

BTW look at this note from David I :
'Our XE developer tools are the best way to accelerate your development today and for the next 10 years.'

http://blogs.embarcadero.com/davidi/2011/03/02/40425

Anonymous said...

Look here fag : http://yfrog.com/gy5czjp

Ricardo A. said...

I think, deep in their heart, every "delphi hater" is a disappointed former "delphi lover". For those who never felt good-old-days-Delphi was the best dev. tool ever, would never feel so angry about what it became...

I understand you, DH... as Mr. Gad said, it's really pity, but you're right.