Предпосылки к разработке LNFC
Недостатки существующих средств программирования для Notes/Domino:
- LotusScript:
- неполный интерфейс к существующим возможностям
(в особенности к низкоуровневым);
- невозможность прямого вызова из-за пределов Notes/Domino в Юниксе.
- NotesAPI/C:
- необходимость явного программирования низкоуровневых операций:
- резервирование, освобождение и копирование памяти;
- преобразование между ASCII и LMBCS.
- трудночитабельные вызовы функций
для работы с дескрипторами в структурном стиле.
- LNCPP/C++:
- невозможность полностью подавить генерацию исключений
(продолжают генерироваться функциями, возвращающими BOOL);
- неудачный состав и наименование методов,
делающие исходный текст громоздким и трудночитабельным;
- необходимость распространять вместе с приложением
дополнительную закрытую динамическую библиотеку большого размера.
- Java:
- отсутствие механизма немедленной очистки объектов;
- громоздкая среда выполнения;
- трудность инсталляции native-компилятора для Win32 (требуется CygWin);
- отсутствие нормальных отладчиков.
- Delphi:
- громоздкая среда разработки;
- громоздкая библиотека времени выполнения;
- (поддержка только двух платформ: Linux/x86 и Win32);
- оторванность от mainstream ;-) .
Решение:
- разработка своей собственной библиотеки для Си++.
Основные принципы:
- автоматический подсчёт ссылок;
- автоматическое преобразование строк;
- читабельность.
Особенности реализации:
- раздельные объекты-контейнеры
(virtual-наследники класса Self_destroyed)
и объекты-ссылки (наследники Smart_pointer<контейнер>
и Smart_pointer2<ссылка, контейнер>):
- разработчик каждого класса должен создавать
ассоциированный класс-ссылку с таким же набором констракторов;
- пользователь класса должен производить обращения к методам
объектов не в форме "объект.метод()", а "объект->метод()".
- для многошагового преобразования строк введены макросы
nSTR, dbNAME, ...
Состояние:
- написана на ~80-90% для запуска Migrate.cpp;
- компилируется под MS Visual C++ 6.0, Borland C++ 5.5,
CygWin 1.0, GCC/Linux 2.x;
- не опубликована, в систему контроля версий не помещена;
- работает под Win32, "сыпется" на базовых тестах под Линуксом.
Перспективы завершения разработки