Я часто использую FAR3 на своем любимом ноутбуке ThinkPad 380Z (PII 300, 96 MB RAM) который работает на Windows 2000. Сегодня обновил на нем FAR и столкнулся с тем что перестал работать LuaMacro и все Lua плагины. Быстро стало ясно что проблема в добавлении в Lua51.dll функции __DestructExceptionObject (msvcrt.dll). Поворчав подсунул библиотеке враппер из набора KDW но оказалось что эта функция враппера использует инструкции которых нет в Pentium II (SSE2?).
Библиотека из состава Far30b4973.x86.20170610 еще не содержит этой ф-ии, а в Far30b4973.x86.20170612 она уже есть (т.е. в чейнджлоге это не отражено даже косвенно).
Я не призываю разработчиков чинить это что-бы я мог пользоваться программой 2017-го на ноутбуке 1998-го, я всего лишь хочу спросить совета: если я буду в новых билдах FAR перезаписывать эту библиотеку последней рабочей версией для PII то какие проблемы у меня могут появиться и как скоро ?
Lua51.dll и Windows 2000
- Dennis_Moore
- Posts: 295
- Joined: Tue 03 Mar, 2015 19:54
- Location: Kiev
- Has thanked: 6 times
- Been thanked: 17 times
-
- Posts: 6820
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Lua51.dll и Windows 2000
Это отражено в логе коммитов (если вы пользовались/пользуетесь какой-либо системой контроля версий, то должны знать).
Если у вас установлены также "паскалевские" плагины, и вы в Lua вызовете math.log10(0), то упадёт. Другие проблемы на данный момент неизвестны.Dennis_Moore wrote: ↑Wed 28 Jun, 2017 18:51хочу спросить совета: если я буду в новых билдах FAR перезаписывать эту библиотеку последней рабочей версией для PII то какие проблемы у меня могут появиться и как скоро ?
Last edited by Shmuel on Wed 28 Jun, 2017 19:09, edited 1 time in total.
- Dennis_Moore
- Posts: 295
- Joined: Tue 03 Mar, 2015 19:54
- Location: Kiev
- Has thanked: 6 times
- Been thanked: 17 times
Lua51.dll и Windows 2000
Плагины Max Rusov у меня стоят, но ничего не падает возможно по той причине что x86 версии его плагинов собраны в Delphi 7 (смотрел через Bit Detector).
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
-
- Posts: 6820
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Lua51.dll и Windows 2000
С используемой сейчас lua51.dll (LuaJIT 2.1) падений и сейчас нет. А вот с LuaJIT 2.0 мне никакой пыльцой не удалось это падение предотвратить. Совет автора LuaJIT попробовать __control87_2 не подходит, т.к. этой функции нет на x64.
-
- Posts: 6820
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Lua51.dll и Windows 2000
Я так понял, что посыпание Фара волшебной пыльцой (ваше выражение) предполагалось в более широком контексте, чем Windows 2000 x86.
- DrKnS
- Posts: 6114
- Joined: Thu 04 Aug, 2005 06:44
- Location: Kyiv
- Has thanked: 12 times
- Been thanked: 426 times
Lua51.dll и Windows 2000
Насколько я понимаю, в случае luaJIT x64 это не работало потому что вместо стандартного SSE2 (с которым работает control87) там велосипедили плавающую точку вручную на x87 ассемблере. Предотвращать, видимо, тоже надо на ассемблере, через fstcw.
-
- Posts: 6820
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 528 times
Lua51.dll и Windows 2000
По-видимому так. Но поскольку перешли на LuaJIT 2.1, это уже не актуально.
Для полноты картины надо заметить, что LuaFAR "защищает" только "свои" плагины и макросы, а если вызвать log10(0) из другого плагина или из самого Фара, то падение, скорее всего, будет.
P.S. Не удержался, провёл эксперимент.
Far x64, в папке Plugins всего 2 плагина: MoreHistory и простейший тестовый (не луафаровский), который при вызове с комстроки по префиксу исполняет log10(0)
Для полноты картины надо заметить, что LuaFAR "защищает" только "свои" плагины и макросы, а если вызвать log10(0) из другого плагина или из самого Фара, то падение, скорее всего, будет.
P.S. Не удержался, провёл эксперимент.
Far x64, в папке Plugins всего 2 плагина: MoreHistory и простейший тестовый (не луафаровский), который при вызове с комстроки по префиксу исполняет log10(0)
Code: Select all
╔══════════════════════════ Exception occurred ══════════════════════════╗
║ Exception: Floating-point divide by zero ║
║ Address: 0x000007FEFD57A06D RaiseException ║
║ Function: OpenW ║
║ Module: C:\Shmuel_Home\Programs\Far3-64bit\Plugins\1\test1.dll ║
╟────────────────────────────────────────────────────────────────────────╢
║ { Unload plugin } [ Stack ] [ Minidump ] [ Ignore ] ║
╚════════════════════════════════════════════════════════════════════════╝
Last edited by Shmuel on Wed 28 Jun, 2017 22:13, edited 2 times in total.