Новый отчет за номером #72410 описывает неадекватное поведение финализатора при использовании advanced records.
понедельник, марта 23, 2009
суббота, марта 14, 2009
Ошибка компиляции на ровном месте
Если у класса или записи определить вложенный энумератор, который будет иметь поля "управляемых" типов (string, interface, dynamic array, variant), то при попытке использования в операторе for-in-do мы получим ошибку компиляции на несоответствие типов. Воспроизводится, и на Turbo Delphi Explorer, и на Delphi 2009 Update 1. Репорт #72213.
понедельник, февраля 02, 2009
Обновлен Common.Encodings.pas
На домашней страничке выложен обновленный Common.Encodings.pas
Добавлены классы кодировок UTF-32 и UTF-32BE (только Delphi 2009), добавлен метод определения кодировки по BOM. Добавлены функции-аналоги WideCharToMultiByte и MultiByteToWideChar для кодировок UTF-16, UTF-16BE, UTF-32, UTF-32BE. Функции приведены к единым сигнатурам. Определен процедурный тип с сигнатурой кодирующей и декодирующей функций. Добавлен воркараунд для корректного определения доступности кодировок UTF-7, UTF-8 под Windows NT 4.0
суббота, января 31, 2009
Утечки на интерфейсных параметрах
Теряются объекты передаваемые в качестве параметров интерфейсных типов в случае, когда не происходит кастинга с проверкой (as) к определенному интерфейсу. Для кода:
Test(TMyObject.Create('1')); // will not be destroyed
Test(IInterface(TMyObject.Create('2'))); // will not be destroyed
Test(TMyObject.Create('3') As IInterface);
утечки будут в первых двух вызовах. Воспроизводится, и на Turbo Delphi, и на Delphi 2009. Отчет #71015.
пятница, января 16, 2009
QC, в чем магия?
Только вчера "ругался" на неторопливость правки багов в компиляторе, а сегодня глянул на свой отчет №70529 и удивился -- он получил статус Internally Opened (как я понимаю, над ошибкой уже работают). Так вот, в чем магия? Неужели голос Алексея был решающим? ;)
четверг, января 15, 2009
Ошибка в Delphi 2009 Update 1
Передача односимвольной строки в диспетчеризируемый метод приводит к передаче кода символа, а не строки. Лечится приведением строки к строке :) т.е. вот так: String('1'). Репорт номер 70529, поддержите, кому не лень.
пятница, ноября 07, 2008
пятница, октября 31, 2008
Приемчик
Потребовалось символ юникод строки проверить на предмет вхождения в суррогатную пару (а конкретно, является ли символ младшим суррогатом). Все бы ничего, но индекс символа вычисляемый и вычислять его для каждого сравнения (коих собственно два) не кошерно. Есть варианты решения:
1. Сохранить индекс в переменной. Просто, но нужна переменная.
2. Сделать функцию и заинлайнить ее. Нужна функция.
3. Извернуться.
Собственно, я о третьем варианте:
With WordRec(AContent[ACharIndex + CharCount]) Do
If (Word(Bytes) >= $DC00) And (Word(Bytes) <= $DFFF) Then;
воскресенье, октября 26, 2008
Оперативность QC
Все шесть моих репортов прошли во внутреннюю базу в среднем через 2 недели после подачи. Шустро. Правда с одним лажа вышла, отрепортил о баге пофикшеном в релизе :(
пятница, октября 10, 2008
Полный QCец...
Только я отрепортил о нескольких ошибках, как меня снова перестало пускать к сервису... Плавающие баги, они самые милые, ага :)
p.s.
Ой блин... Снял галку DN Authentification и все снова заработало. Сплошные воркараунды :))
среда, октября 08, 2008
Я победил QC :)
понедельник, октября 06, 2008
Val в Delphi 2009
Знаете как работает Val с юникодом? Рассматриваются лишь младшие байты символов :( Для проверки прогоните цикл от lo(Char) до high(Char) и посмотрите, сколько символов будет "успешно" преобразовано в число. Грустно. Если кто-то это читает, заQCите плиз...
пятница, октября 03, 2008
Обновился Common.Encodings
В метод GetEncoding добавлен параметр со значением по умолчанию позволяющий указывать на возможность использования стандартных (определенных в классе TEncoding) кодировок. Скажем, код GetEncoding('utf-16') создаст новый объект класса TUnicodeEncoding, а код GetEncoding('utf-16', True) вернет существующий объект TEncoding.Unicode;
понедельник, сентября 29, 2008
Косяк в TEncoding.FreeEncodings;
Не освобождается объект кодировки UTF7. И когда я только QC буду побеждать... :)
воскресенье, сентября 28, 2008
среда, сентября 24, 2008
Delphi 2009 aka Tiburon. TEncoding.
На домашней страничке выложен модуль Common.Encodings расширяющий возможности стандартного класса TEncoding. Модуль содержит class helper для TEncoding и несколько вспомогательных advanced records.
Примеры использования:
1.) Перечисление доступных кодировок
Var
ei : TEncodingInfo;
Begin
For ei In TEncoding.Encodings Do
If ei.IsAvailable Then
WriteLn('codepage: ', ei.CodePage, ' name: ', ei.Name);
End;
2.) Создание кодировки по имени:
TEncoding.Encodings.ByName('utf-16').GetEncoding;или
TEncoding.GetEncoding('utf-16');3.) Создание кодировки по номеру кодовой страницы:
TEncoding.Encodings.ByCodePage(CP_UTF16_BE).GetEncoding;
или
TEncoding.GetEncoding(CP_UTF16_BE);
4.) Получение информации о существющей кодировке:
With TEncoding.UTF8.GetInfo Do
WriteLn('codepage: ', CodePage, ' name: ', Name, ' display name: ', DisplayName);
пятница, сентября 19, 2008
Delphi 2009. Вкратце.
Юникод+дженерики+анонимные методы это все понятно.
Порадовала скорость среды! И особенно скорость CodeInsight (несмотря на то, что я его все равно всегда отключаю)
Наконец-то они научились различать Implicit и Explicit для записей в нативе (2007 не пробовал, может и там уже было). Но вот редактор сильно подкачал, разучившись (в 2006 он и не сильно-то умел) перемещаться по Ctrl+Shift+Up/Down между декларацией и реализацией перегруженных операторов записи (правда, я тестировал на 12.0.3155.16733, может в релизе и поправили), а также разучился (для перегруженных операторов опять же) по Ctrl+Shift+C создавать макет метода по описанию.
Появился UInt64 -- беззнаковое 64битное число.
BeginThread и TInterfaceList по-прежнему имеют потенциальные утечки.
Неработает передача Int64 в параметре диспетчеризуемого метода (вызов метода от вариантной переменной). Точнее, если передавать переменную типа Int64 все работает, а если значение Int64(1024) -- нет.
Exception обзавелся потенциальной поддержкой стек-трейсинга, но только потенциальной :)
Очень порадовал {$POINTERMATH}
В комментариях исходников встречается sysmac.h. Интересно, это то о чем я думаю...?
Порадовал хелпер для TRTLCriticalSection (syncobjs.pas)
Порадовал обновленный ZLib
Огорчает нелепость использования системных InterlockedCompareExchangePointer (и прочих Interlocked...) при наличии нативных в system.pas
Ribbon огорчил неаккуратными скинами (ждем редактора :) или сторонних, качественных скинов) и моргающей отрисовкой. DoubleBuffered Ribbon-контрола не помогает, а буферизовать форму то еще извращение.
TLinkLabel неюзабельна совершенно, т.к. на системах младше XP, линки распознаваться не будут и пользователь будет видеть разметку.
пятница, августа 15, 2008
воскресенье, мая 18, 2008
понедельник, мая 12, 2008
Embarcadero + CodeGear
О покупке CodeGear компанией Embarcadero, стало известно почти неделю тому назад. А вот обращение к клиентам CodeGear, в котором, в частности, говорится о том, что дальнейшая разработка будет нацелена на гетерогенные платформы и различные СУБД. Ребята, идем на Linux и MacOS? :)