[Diff-tools] Что ж оно всё такое убогое?
От: Sinix  
Дата: 15.05.10 11:30
Оценка: 12 (6)
Выкроил время, потестил диффалки. Из списков на wiki и stackoverflow отобрались (по алфавиту):

Из жалости пропущены AnkhSvn diff, TFS-овский diffmerge.exe, Tortoise Merge и KDiff.
Наклёвывается весьма интересная вещь — CodeCompare, если в следующей бете наконец починят глючащий детект регионов — добавлю в список.

Скриншоты (2 mb). Исходники для проверки.
Рецепт: взять чуть-чуть кода (Program 1.cs)...
  Скрытый текст
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Calc
{
  class Program1
  {
    static void Main(string[] args)
    {
      int count = 10 * 1000;
      byte[] buffer = new byte[count];

      Random rnd = new Random();

      rnd.NextBytes(buffer);

      long total = 0;
      foreach (byte b in buffer)
      {
        total += b;
      }

      Console.WriteLine("AVG: {0}", total * 1.0 / buffer.Length);

      Console.ReadKey();
    }
  }
}

... добавить чуть-чуть рефакторинга (Program 2.cs)...
  Скрытый текст
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Calc
{
  class Program2
  {
    const int Count = 10 * 1000;

    private static byte[] GetBytes()
    {
      byte[] buffer = new byte[Count];

      new Random().NextBytes(buffer);

      return buffer;
    }

    static void Main(string[] args)
    {
      byte[] buffer = GetBytes();

      Console.WriteLine("AVG: {0}", GetAverage(buffer));

      Console.ReadKey();
    }

    private static double GetAverage(byte[] buffer)
    {
      long total = 0;
      foreach (byte b in buffer)
      {
        total += b;
      }
      return total * 1.0 / buffer.Length;
    }
  }
}

... и перетасовать (Program3.cs).
  Скрытый текст
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Calc
{
  class Program3
  {
    const int Count = 10 * 1000;

    private static byte[] GetBytes()
    {
      byte[] buffer = new byte[Count];

      new Random().NextBytes(buffer);

      return buffer;
    }

    private static double GetAverage(byte[] buffer)
    {
      long total = 0;
      foreach (byte b in buffer)
      {
        total += b;
      }
      return total * 1.0 / buffer.Length;
    }

    static void Main(string[] args)
    {
      byte[] buffer = GetBytes();

      Console.WriteLine("AVG: {0}", GetAverage(buffer));

      Console.ReadKey();
    }

  }
}


Результаты — на скриншотах.
Единственный (да и то условно) правильный дифф между Program1.cs и Program3.cs — старый добрый windiff. За ним толпятся Compare It!, Compare++, WinMerge, Beyond Compare и Araxis — у каждого свои глюки, так что явного победителя нет, порядок — по личным предпочтениям.

Из толпы слегка выбивается Compare It!, который а) иногда вспоминает про перемещённые строчки (а winmerge лучше бы про них и не вспоминал) и б) лучше остальных прожёвывает файлы c кучей изменений (доберусь до работы — скину примеры).

Чтоб сразу не переезжать в КСВ: что там ещё осталось из юзабельных diff/merge под win?

P.S. Off: когда уже [cut] и [s] добавят в редактор?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.