Вести с полей

Закачал очередное обновление IBProvider в личные кабинеты клиентов и залип на таблице:

Дело к зиме идет, а он худеть начал 🙂

Вести с полей

Привет всем.

1. Выложен новый триал IBProvider v5.8 (сборка 32840). В этой сборке продолжены анализ и зачистка кода. Бинарники еще немного похудели.

2. Не то чтобы размер бинарных файлов очень сильно напрягал, но уже пришлось переместить архив со всеми ранее выпущенными версиями (финальными и промежуточными) на отдельный 2TB диск. Четверть диска пока свободна, но исходя из текущих планов, это свободное место будет выжираться немного бодрее.

3. Время от времени приходится напоминать себе конечный пункт этих самых планов. Потому что, когда «топчешься на месте» четвертый месяц, забываешь ради чего все затевалось. Сейчас это делать стало немного проще, поскольку появилась такая картинка:

Вести с полей

Привет всем.

1. Выложено обновление IBProvider v5.7. Нулевое число предупреждений 4-го уровня (VS2019, Release), Карл. Осилил.

2. Размышляя над исправлениями v5.7, пришел к выводу, что надо бы обновить и IBProvider Free. Чисто на всякий случай.

3. Решил, что пришло время завязать с VS2013 и VS2015. С 2020 года. Дорогие Россияне, я устал.

4. Теперь можно заняться по настоящему интересными задачами.


PS. Чисто для развлечения. Вчера в libtommath закоммитили исправление, предложенное более чем три года назад. Это все, что вам нужно знать про Open Source проекты.

Visual Studio 2019 (v16.3.3)

Сегодня обновил свою VS2019 до версии 16.3.3 и обнаружил занятную вещь — 64-битные бинарники IBProvider реально очень сильно «похудели».

32-битные бинарники тоже «сбросили в весе», но не так сильно.

ПлатформаVS2019 v16.2.5VS2019 v16.3.3Разница
32 бита5 686 272 байт5 678 592 байт-7 680 байт
64 бита6 889 984 байт6 276 608 байт-613 376 байт

Прогнал номинальные тесты 64-битного бинарника — работают без проблем.

Интересно.

Вести с полей

Выпуск следующего обновления IBP v5.7 немного затянулся. Что-то я закопался с устранением мелких проблем, в которые меня тыкает компилятор.

Изменений внесено достаточно много, но как обычно — помнишь только последнее.

Последним было решение проблем компиляции IBProvider (vc16/vs2019) с включенным злобным режимом «Conformance Mode=Yes». Спасибо коллективному разуму и rg45 лично.

Пока писал, вспомнил про другие глобальные изменения.

1. Переезд «сборочного процесса» с make.exe (борланд/эмбаркадера) на msbuild.

2. Обнаружил и задействовал опцию компилятора «Enable Function-Level Linking» (/Gy). Бинарники ощутимо похудели. На производительности вроде не отразилось.

3. Вместе с провайдером будут еще обновлены «LCPI Ole Db Services».

Релиз v5.7 будет через неделю. Максимум через две. Пора уже закругляться 🙂

InterBase

Сдается мне, этот сервер достиг своего идеального состояния.

Только что загруженный «Developer Edition» полностью идентичен тому, который я скачивал 2018-12-13 (InterBase 2017, v13.3).

Amen.

UPD [2019-11-18]. Ан нет, шевелится — InterBase 2020. Смотрю на ссылку, а она не https. Походу, с ресурсами у них как у всех.

Подключение к FB 2.x через собственного клиента IBP

После прогона номинальных тестов IBProvider с FB2.5.9, обнаружил в логе сервера множество записей вида

VXP2-FB02-5-9 Sat Sep 28 22:09:35 2019
SERVER/process_packet: connection rejected for DIMA.-1.-1

Ошибок на уровне самих тестов не наблюдается.

После непродолжительного ступора, сообразил — это небольшие проблемы подключения к серверу через собственного клиента FB.

Он сначала пробует подключаться с использованием 13-го протокола. А потом предлагает подключиться через «12,11,10».

Можно было сразу предлагать «13,12,11,10», как это делает fbclient.dll, но там есть вопросы к надежности.

Для избежания «промахов» с 13-ым протоколом в строке подключения можно явно указать используемый протокол — 12.

А для устранения «промахов» с TCP/IP v6, которые нигде не отображаются, но приводят к тормозам подключения, надо еще явно указать использование TCP/IP v4.

То есть, строка подключения должна выглядеть приблизительно так:

location=inet4://server_name/d:\database\employee.fdb;remote:protocol=12;

ADO.NET провайдер v1.14.1

Выпущено обновление .NET провайдера v1.14.1.

Как говорится — «нет худа без добра».

В процессе разбора проблемы с VS2019+FW4.8, нашел мелкую багу в одном из VSIX и, главное, радикально перетряхнул EXE-инсталлятор провайдера.

Если не ошибаюсь, он (EXE-инсталлятор) был написан пять лет назад. Как он работает — я уже ахез. Его какой-то мутант написал… Но сейчас (после перетряхивания) хоть станет попроще добавлять поддержку новых версий FW.

Сломался просмотр данных в VS2019+FW4.8

В последней VS2019 (16.2.5), после установки .NET FW4.8, перестал работать просмотр данных таблиц через наш ADO.NET провайдер. Server Explorer -> любая таблица -> контекстное меню -> загрузить данные -> пустое окно.

До установки FW4.8 (на FW4.7.2) проблем не было.

Это плохая новость.

Хорошая новость — через стандартный провайдер (System.Data.OleDb) просмотр данных тоже перестал работать.

Нужно звонить в ЖЭК и оставлять заявку.

Interlocked функции для Int64 и WinXP

В детстве меня покусал Джеф Рихтер, поэтому я свято верил в то, что Interlocked-функции экспортируются системной DLL-ю.

В сгенерированный машинный код для вызова этих функций я не заглядывал.

Как следствие, я считал что версии для 64-битных чисел на старой WinXP не поддерживаются и использовать их нельзя…

Этому способствовало и описание этих функций. Например, InterlockedExchange64:

Minimum supported client Windows Vista [desktop apps | UWP apps]
Minimum supported server Windows Server 2003 [desktop apps | UWP apps]
Target Platform Windows

А тут внезапно обнаружилось, что эти функции (по большому счету) не экспортируются, а встраиваются в точку вызова.

Это радикально все меняет!

        return static_cast<_Ty>(_InterlockedIncrement64(_Atomic_address_as<long long>(this->_Storage)));
000000013F40ABC2  mov         rcx,qword ptr [this]  
000000013F40ABC9  call        std::_Atomic_address_as<__int64,std::_Atomic_padded<unsigned __int64> > (013F3FA5CCh)  
000000013F40ABCE  nop  
000000013F40ABCF  mov         ecx,1  
000000013F40ABD4  lock xadd   qword ptr [rax],rcx  
000000013F40ABD9  inc         rcx  
000000013F40ABDC  mov         rax,rcx  

Приведенный код нормально отрабатывает на 32-битной XP SP2.

Написал бы Рихтер про это в своем третьем издании «Win для Pro» — я бы 20 лет не тупил.