Andy’s Blog and Tools

Syndicate content
Delphi, C++Builder and other thoughts
Updated: 13 weeks 17 hours ago

JSON parser JsonDataObjects is now on GitHub

Sun, 02/15/2015 - 12:21

It all started with a new DDevExtensions feature I’m working on, or was working on before my JSON parser project took over. For this new feature I needed to write and read some information to and from a file. XML was out of question, so I came up with a “one line per entry” format. As the feature grew I “suddenly” needed to write more structured data. After trying to do that in a “one line per entry” format the I/O code became such a mess that I deleted it and came up with the idea to use JSON for the file.

After browsing the web and looking into the different JSON parsers for Delphi, I decided that I didn’t need such complicated and feature rich parsers and it would be fun to write my own parser. So I started, not knowing that my class names would be the same of Delphi’s JSON parser, because I never looked into it before I started benchmarking my parser against it.

And here we are. The DDevExtensions feature is on halt and my brand new JSON parser is available on GitHub. It uses a lot of low level tricks to get as much performance out of the different Delphi compilers and RTL and beats Delphi’s JSON parser in performance and memory usage, by far.

Features
  • Fast dual JSON parser for parsing UTF8 and UTF16 without conversion
  • Automatic creation of arrays and objects
  • Easy access mode with implicit operators
  • Compact and formatted output modes
  • Win32, Win64 and ARM Android support (MacOS and iOS may work)
  • Supports Delphi 2009-XE7
Some internal tricks:
  • Elimination of unnecessary _UStrAsg and _UStrClr calls, reduces CPU locks
  • ARC: Faster ARC handling by doing it by hand without the virtual method calls (RSP-9712)
  • Storing string literals where possible instead of creating a heap string for them
  • Caching the last string literal pointer for faster repeated name access. Broken in XE7 (RSP-10015)
  • Specialized own StringBuilder implementation that doesn’t need to copy the buffer to the final string
  • Fast String to Int64 conversion implemented in assembler for x86 and x64
  • Fast String to Double conversion
Categories: News, Blogs, and Tips

IDE Fix Pack 5.8 for 2009-XE7 released

Sun, 02/15/2015 - 07:59

A new release of IDE Fix Pack for RAD Studio 2009-XE7 is available. The new version 5.8 is available for all versions including the versions that I marked “unsupported”. So all 2010, XE2-XE5 users can update from version 5.5 to 5.8 what gives them the “EditorLineEnd.ttr” patch.

This release brings a major performance improvement. If you have large packages with dependencies to other large packages, the compiler spends a lot of time in cleaning up the unit dependencies what can result in a long delay (up to 5 seconds) after you hit a syntax error in the active package project. IDE Fix Pack addresses this bottle neck and reduces the delay to less than half a second.

One of the RAD Studio 2009 .NET code patches in IDE Fix Pack caused the IDE to run into a NullReferenceException when started on Windows 8.1. This patch is now disabled if Windows 8.1 or newer is detected.

If you have copied the rlink32.dll from XE7 to an older RAD Studio version to bypass the “too many resources to handle” linker error, the IDE Fix Pack will now skip its own rlink32.dll patch as it isn’t necessary for XE7’s rlink32.dll.

Some people had problems with installing IDE Fix Pack because the installer is compiled against rtlXxx.bpl and vclXxx.bpl. And if those packages aren’t in the PATH environment variable the Installer failed with the usual standard Windows error message. To work around this issue and not to increase the IDE Fix Pack’s installer’s file size (I know, who cares), I have rewritten the installer in plain “old” WinAPI.

The new IDE Fix Pack changes the behavior of the [F6] (IDE Insight) key in XE5 and newer. If you press [F6] in the editor, IDE Fix Pack will now call “SelectAll” on the IDE Insight edit control so that you can overwrite the old edit text without doing the selection yourself.

IDE Fix Pack Downloads:
Name IDE Version File Size Downloads Added IDE Fix Pack 5.8 2009 (UP4) IDEFixPack2009Reg58.7z 177.14 KB 959 times 2015-02-15 IDE Fix Pack 5.8 (unsupported) 2010 (UP5) IDEFixPack2010Reg58.7z 173.03 KB 1453 times 2015-02-15 IDE Fix Pack 5.8 XE (UP1) IDEFixPackXEReg58.7z 158.89 KB 540 times 2015-02-15 IDE Fix Pack 5.8 (unsupported) XE2 (UP4+HF1) IDEFixPackXE2Reg58.7z 232.42 KB 597 times 2015-02-15 IDE Fix Pack 5.8 (unsupported) XE3 (UP2) IDEFixPackXE3Reg58.7z 184.57 KB 399 times 2015-02-15 IDE Fix Pack 5.8 (unsupported) XE4 (UP1) IDEFixPackXE4Reg58.7z 185.27 KB 325 times 2015-02-15 IDE Fix Pack 5.8 (unsupported) XE5 (UP2) IDEFixPackXE5Reg58.7z 184.41 KB 516 times 2015-02-15 IDE Fix Pack 5.8 XE6 (UP1) IDEFixPackXE6Reg58.7z 305.73 KB 538 times 2015-02-15 IDE Fix Pack 5.8 XE7 (UP1) IDEFixPackXE7Reg58.7z 316.38 KB 2235 times 2015-02-15

fastdcc Downloads:

Name IDE Version File Size Downloads Added fastdcc 5.8 2009 (UP3) fastdcc2009v58.7z 76.4 KB 159 times 2015-02-15 fastdcc 5.8 (unsupported) 2010 (UP5) fastdcc2010v58.7z 80.42 KB 218 times 2015-02-15 fastdcc 5.8 XE (UP1) fastdccXEv58.7z 82.34 KB 170 times 2015-02-15 fastdcc 5.8 (unsupported) XE2 (UP4+HF1) fastdccXE2v58.7z 106.5 KB 174 times 2015-02-15 fastdcc 5.8 (unsupported) XE3 (UP2) fastdccXE3v58.7z 116.65 KB 140 times 2015-02-15 fastdcc 5.8 (unsupported) XE4 (UP1) fastdccXE4v581.7z 112.49 KB 123 times 2015-02-15 fastdcc 5.8 (unsupported) XE5 (UP2) fastdccXE5v58.7z 113.53 KB 153 times 2015-02-15 fastdcc 5.8 XE6 (UP1) fastdccXE6v58.7z 141.13 KB 192 times 2015-02-15 fastdcc 5.8 XE7 (UP1) fastdccXE7v58.7z 150.11 KB 539 times 2015-02-15

Changelog:

  • Fixed: IDE Fix Pack tried to patch the fastdcc32/64/aarm.exe if it was renamed to dcc32/64/aarm.exe (XE6-XE7)
  • Fixed: Windows 8.1 compatibility with .NET code patch (2009)
  • Added: Compiler cleanup code performance optimization for large packages (2009-XE7)
  • Added: If XE7’s rlink32.dll is detected in older Delphi versions the “too many resources to handle” patch is skipped
  • Added: IDE Insight [F6]-Key calls SelectAll (XE5-XE7)
  • Improved: IDE Fix Pack StringLists use CompareStringOrdinal instead of CompareString
  • Changed: Installer/Uninstaller doesn’t require rtl.bpl/vcl.bpl in the PATH anymore
Categories: News, Blogs, and Tips