PrestoSoft Blog :: Home

Saturday, August 12, 2023

ExamDiff Pro 14.0 Released!

We are pleased to announce that we've released ExamDiff Pro 14.0.

Here's what's new in this version:
  • Ability to match file structures (functions, classes, etc.) for text file comparison
  • Ability to detect programming language for files without supported extensions and clipboard contents
  • Portable version
  • Language support for Typescript
  • Language support for JSON
  • Document Type pane in the text comparison/merge status bar
  • Show preview of clipboard contents on mouseover in the Compare dialog
  • Ability to switch between different code pages to display byte codes in binary comparison
  • Option to not show Compare dialog on startup
  • Text comparison/merge status bar usability improvements
  • The width of the address column in binary comparison views is based on file sizes
  • More intuitive behavior of the "Run in new instance" option in the Compare dialog
  • Better support of Unicode characters in text comparison
  • Better syntax tree parsing performance for large files
  • When "Retain file/directory pair" in Options | Global is used, files/directories are now populated for all three modes: file and directory comparison and file merge
  • Better startup and comparison performance
You can find more details about ExamDiff Pro 14.0, as well as a download link, here, and the complete list of changes here.

Labels: , ,

Friday, April 21, 2023

ExamDiff Pro 14.0 Beta

We are pleased to announce a public beta program for ExamDiff Pro 14.0.
You can download ExamDiff Pro 14.0 Beta for 32-bit Windows and for 64-bit Windows. The upgrade is free for all users who purchased ExamDiff Pro less than 12 months before this release (or more, depending on the number of maintenance years purchased).

Here's what's new in ExamDiff Pro 14.0 (as compared to 13.0):

Matching File Structures for Comparison

ExamDiff Pro 14.0 introduces a new advanced option: the ability to match file structures in text comparison. With this option turned on, ExamDiff Pro will automatically create links between the start and end lines of structures such as functions, classes, etc, that match between the two files, using a heuristic based on the structure "signature" (i.e. function signature, class signature, and so on) to determine whether two structures are "matching".

For more information, see our blog entry about structure comparison.

Automatic Programming Language Detection

Another much-requested feature is automatically detecting document types based on file content. In other words, ExamDiff Pro will now automatically detect programming languages for source code files, in turn enabling features like syntax highlighting and the scope bar. This feature recognizes all built-in document types in ExamDiff Pro and is powered by the open-source Guesslang machine-learning library.

For more information, see our blog entry about programming language detection.

Portable Version

> Version 14.0 introduces the ability to run ExamDiff Pro as a portable application. This means that you'll be able to run it without installing it, and without modifying your Windows configuration in any way (i.e. without moving any files anywhere or making any changes to your Windows Registry). Portable mode can be useful in situations in which you want to run ExamDiff Pro on a computer that is not yours, if you want to run ExamDiff Pro off a USB drive, etc..

For more information, see our blog entry about programming the portable version.

Other Additions In ExamDiff Pro 14.0
  • Language support for Typescript
  • Language support for JSON
  • Document Type pane in the text comparison/merge status bar
  • Show preview of clipboard contents on mouseover in the Compare dialog
  • Ability to switch between different code pages to display byte codes in binary comparison
  • Text comparison/merge status bar usability improvements
  • The width of the address column in binary comparison views is based on file sizes
  • More intuitive behavior of the "Run in new instance" option in the Compare dialog
  • Multiple bug fixes

Labels: , ,

Friday, January 06, 2023

ExamDiff Pro 14.0: Portable Version

Version 14.0 will introduce the ability to run ExamDiff Pro as a portable application. This means that you'll be able to run it without installing it, and without modifying your Windows configuration in any way (i.e. without moving any files anywhere or making any changes to your Windows Registry). Portable mode can be useful in situations in which you want to run ExamDiff Pro on a computer that is not yours, if you want to run ExamDiff Pro off a USB drive, etc.

The portable version of ExamDiff Pro will be a separate ZIP file that you download separately from the regular, non-portable version. Here's what the contents of this ZIP file look like:

The portable version of ExamDiff Pro supports all of the same features as the regular version of ExamDiff Pro except for the Windows Explorer Shell extension, which requires installation to function.

You can tell if you are currently running the portable version of ExamDiff Pro from the Help | About dialog:

Labels: , ,

Wednesday, January 04, 2023

ExamDiff Pro 14.0: Automatic Programming Language Detection

ExamDiff Pro 14.0 will introduce a much-requested feature: automatically detecting document types based on file content. In other words, ExamDiff Pro will now automatically detect programming languages for source code files, in turn enabling features like syntax highlighting and the scope bar. This feature works for all built-in document types in ExamDiff Pro and is powered by the the open-source Guesslang machine-learning library.

Automatic document type detection is turned on by default and can be toggled in Options | Document types:

Now, if we paste some TypeScript code into a blank comparison window and it will automatically get detected as TypeScript, with syntax highlighting and scope bar features enabled:

More precisely, auto-detection will happen in the following situations (when the Automatically detect file type for unknown extensions option is enabled):
  • a file is compared either without a extension or with an extension that doesn't correspond to any known ExamDiff Pro doctype
  • a comparison is initiated from clipboard contents
  • text is pasted into a comparison window from the clipboard
Note that plain-text files (or any other files that Guesslang isn't sure about) will be auto-detected as the Default/Plain Text doctype, which disables features like syntax highlighting. This means that for files that aren't source code, ExamDiff Pro will continue to work as usual even with doctype auto-detection turned on.

Even if you have disabled the Automatically detect file type for unknown extensions option, you can also manually trigger doctype auto-detection at any time by selecting Set Document Type | Auto Detect from the context menu.

Lastly, note that this feature is already enabled in DiffNow, our free online file comparison tool powered by ExamDiff Pro. Simply paste any source code into it and DiffNow will auto-detect the doctype during comparison.

Labels: , , ,

Sunday, November 27, 2022

ExamDiff Pro 14.0: Matching File Structures for Comparison

ExamDiff Pro 14.0 will introduce a new advanced comparison option: the ability to match file structures (functions, classes, etc.) for comparison. This is a fairly advanced feature that can result in more clear comparison results for programmers.

Like the scope bar introduced in ExamDiff Pro 13.0, structure matching is powered by the open-source Tree-sitter library, and will be available for all major programming language doctypes defined in ExamDiff Pro, including C++, C#, Java, JavaScript, and more.

Let's illustrate this feature by showing a couple of examples of situations in which it can be useful.

To start with, here's ExamDiff Pro comparing the before-and-after of simple refactor of a JavaScript function:

This diff looks ugly and doesn't do a good job of capturing what happened — that is, some functionality from the generateIDForObject() function got factored out into a separate function. The problem is that the closing brace of the generateIDForObject() function in the left file is getting matched to the wrong closing brace in the second file. Because there are not a lot of completely identical lines between the two files, ExamDiff Pro's comparison algorithm doesn't have a good way to decide which closing brace in the second file to match to the one in the first file, and it ends up making a match that results in a confusing diff.

Ideally, we would like to match the closing braces of the generateIDForObject() function in each file together. We can do this ourselves using the manual synchronization feature to link these lines together manually. Now the diff looks much clearer:

But drawing links between lines ourselves kind of defeats the purpose of using a file comparison tool. Is there any way that ExamDiff Pro could automatically determine that these lines naturally should be linked together, based on the fact that they correspond to the boundaries of the same function?

This is where the Match file structures for comparison feature comes in. We can open up Options | Text Comparison | Advanced and check the Match file structures for comparison box:

Then re-compare these files, and voila! ExamDiff Pro is able to give us exactly what we want, automatically:

So how does this work? Basically ExamDiff Pro does the same file structure parsing that it does for generating the scope bar, and uses its knowledge of which functions, classes, and other structures correspond to which between the two files to draw "invisible" links between corresponding starting and ending lines of each structure, in a similar way to how fuzzy line matching works. It's as though we went through the files and drew links at the start and end of each matching function, except ExamDiff Pro was nice enough to do all that work for us instead.

In fact, we can even visualize these "invisible" links, using the new "Show fuzzy/structure links" option under Options | Display:

Turning this option on, we can now see structure links (as well as fuzzy-matching links) between lines in the splitter, indicated by a lighter color than manual synchronization links:

Let's try a slightly more complicated example, this time showing a refactor involving overloaded C++ functions. Here's what it looks like without the Match file structures for comparison option:

This diff look a little off and doesn't really indicate what happened in the refactor — namely, one overload of GetNavigatableDiffCount() got deleted and one overload got modified. We would expect to see the GetNavigatableDiffCount(BOOL bUnresolvedConflictsOnly) method definition in the second file be matched with the GetNavigatableDiffCount(BOOL bUnresolvedConflictsOnly, int nPass) definition in the first file, but instead it's being matched with the GetNavigatableDiffCount() definition line. Without structural matching, the best ExamDiff Pro can do in terms of matching heuristically is fuzzy matching individual lines. This often gives the expected result, but here it doesn't, because the GetNavigatableDiffCount(BOOL bUnresolvedConflictsOnly, int nPass) method definition is broken into multiple lines in the first file but is a single line in the second file, so fuzzy matching can't tell that these definitions "belong together".

Fortunately for us, matching file structures comes to the rescue again! If we enable Match file structures for comparison, ExamDiff Pro is able to correctly deduce which function definitions are a closer match and links these functions' start and end lines accordingly:

Labels: , ,