Новые Xbase продукты.

Введение.

Ситуация, в которой оказались разработчики, использующие Клиппер, после отказа Computer Associates поддерживать этот продукт, широко известна. Клиппер оказался в стороне от современных технологий и его ниша на рынке стремительно сокращается.

Некоторые наиболее удачные "3-rd party" библиотеки расширяют границы возможностей Клиппера. Это, в первую очередь, Advantage Xbase Server фирмы Extended Systems - замечательный продукт, позволяющий строить на Клиппере клиент-серверные системы, кардина льно повышающий производительность Клипперных программ, надежность хранения и модификации данных. Это FiveWin и Clip4Win – библиотеки, позволяющие создавать полноценные Windows приложения, использовать в программах Windows API. Это Btrieve RDD, драйверы от OpenPath, TopConnect и др. Это всем известный Six RDD, Funcky, Telepathy, Faxual и много других Clipper add on средств, делающих его действительно лучшим инструментом для работы с базами данных.

Но все эти продукты лишь продляют угасание Клиппера ( не хочется говорить – агонию ), не решая главную проблему – 16-разрядный барьер. Поэтому даже производители упомянутых выше программ постепенно переориентируются на другие средства. Так, Extended Syst ems большее внимание уделяют своим новым драйверам – 32-bit Client Engine для Delphi, Visual Basic, Microsoft Visual C. Fivetech развивает FiveWin++ для Xbase++.

Все это вынуждает нас искать пути миграции на другие средства разработки, многие из которых представлены на этой конференции.

Кто-то переходит на Delphi, Visual C, Visual Basic. Это требует коренной переделки всех программ и даже парадигмы программирования, хотя применение таких средств доступа к данным, как Apollo/Artemis, уже упоминавшийся Advantage Client Engine позволяют сохранить существующие базы данных и даже индексы.

Кто-то использует Visual Objects, Visual Foxpro, Visual Dbase. В этих продуктах сохранен Xbase синтаксис, но переделки требуются значительные.

Xbase++ позволяет полностью сохранить клипперовский текст, но у них свои проблемы – медлительность, огромные размеры exe’шников, необходимость использования кучи DLL, пока еще немало ошибок. И цена – для сыроватого продукта, каким пока является Xbase, он а велика.

Проект Harbour.

Но есть и другой путь. Если Computer Associates не хочет развивать Клиппер, переносить его на другие платформы, на 32-разрядные коды, мы можем сделать это сами. Группа постоянных участников ньюсконференции comp.lang.clipper выбрала этот путь. Так в к онце марта этого года родился проект Harbour по созданию Клиппер - совместимого, кросс-платформенного компилятора с открытыми исходными текстами.

Инициатором проекта является Антонио Линарес – автор FiveWin, владелец компании FiveTech. Он выложил наметки своего Клиппер-совместимого компилятора Five для всеобщего обозрения и выступил с идеей создания нового Клиппер-компилятора на базе стандартны х средств Lex / Yacc. Разговор первоначально шел именно о новом Клиппере, в качестве названия для проекта предлагались OpenClipper, Clipper32 и даже Clipper 6.0 . Но поскольку “Clipper” – зарегистрированная торговая марка – собственность Computer Associates, от использования этого слова пришлось отказаться. Название Harbour ( гавань ), по словам Линареса, предложила его жена. Оно было принято как сим вол той новой гавани, куда стремится Clipper ( быстроходный корабль ).

Основные цели проекта:

Предполагаемые дополнения к базовым возможностям Клиппера:

Harbour - бесплатен, он будет распространяться по GNU лицензии с некоторыми исключениями, что не исключает, что какая-либо фирма может продавать его, написав, к примеру, программу установки, IDE и записав на CD.

Технология разработки.

Harbour – международный проект, среди его участников граждане Австралии, Бразилии, Великобритании, Венгрии, Германии, Испании, Индонезии, Италии, Канады, Нидерландов, Польши, России, США, Чили и других стран мира. Средой для совместной работы столь далеко живущих друг от друга людей является, конечно, Интернет. Основные коммуникационные средства, использующиеся для совместного проектирования, это:

CVS – это программный комплекс, состоящий из серверной и клиентской частей. Он позволяет синхронизировать копии проекта, находящиеся у каждого разработчика с копией на сервере, одновременно работать над одними и теми же файлами нескольким разработчика м, разрешая конфликты, возникающие при модификации одних и тех же строк кода. CVS хранит ВСЕ версии каждого файла, позволяет восстановить любую из них в случае необходимости, выдает журнал изменения любого файла по запросу клиента и т.д.

Листы рассылки используются как основное средство общения разработчиков и всех интересующихся ходом проекта.

Основной лист для разработчиков - harbour@onelist.com. Чтобы подписаться на него, просто отправьте пустое сообщение на адрес harbour-subscribe@onelist.com . Еще один лист рассылки - harbourtalk@onelist.com - служит для дискуссий, не связанных напрямую с оперативной работой над проектом. Подписаться на негл можно, отправив пустое сообщение по адресу harbourtalk-subscribe@onelist.com. Чтобы отменить подриску на листы, надо отправить сообщения, соответственно, по адресам Harbour-unsubscribe@ONElist. com и harbourtalk-unsubscribe@ONElist.com. Архивы этих листов рассылки можно найти по следующим ссылкам:


http://www.onelist.com/viewarchive.cgi?listname=Harbour
http://www.onelist.com/viewarchive.cgi?listname=Harbourtalk

Средства разработки

Lex и Yacc ( yet another compilers compiler – еще один компилятор компиляторов ) – это стандартные инструменты, производящие лексический и синтаксический анализ входного кода по заданным правилам. В качестве Lex программы в настоящее время мы используем Flex, а Yacc – Bison.

В числе используемых С компиляторов –

Для платформы Microsoft Windows:

Для DOS 32bit

Для DOS 16bit

Для Linux

Для OS/2

Для Macintosh

Особенно хочу подчеркнуть, что используется именно С, а не С++, причем ANSI C. Это делается для обеспечения переносимости исходных текстов на различные платформы.

Основные компоненты.

Это, естественно, тот же набор, что и у Клиппера:

Получить все файлы проекта вы можете с сайта http://www.harbour-project.org – там лежат “официальные” релизы – как исходные тексты, так и комплекты с уже изготовленными бинарными файлами – компилятором и б иблиотеками для разных платформ.

Если вы хотите узнать самую последнюю информацию о проекте, вам нужно подключиться к CVS. Для этого надо сначала скачать клиентскую часть CVS ( можно прямо с сайта проекта ), установить ее, установить переменные окружения:


SET CVSROOT=:pserver:cvsanon@harbour.joca.es:/home/devel/cvsroot
SET HOMEDRIVE=C:
SET HOMEPATH=\CVS

После этого можно входить:


cvs login

указав пароль cvsanon, и скачать файлы проекта:


cvs extract -P harbour

Если вы взяли файлы с CVS, или комплект с исходниками с сайта, вам надо построить компилятор и библиотеки самостоятельно. Для этого вам нужно иметь программы Flex и Bison ( их можно взять с сайта ) и какой-либо из упомянутых выше С компиляторов. Все н еобходимые для построения bat-файлы находятся в корневом каталоге проекта. Если что-то не получится – пишите в лист рассылки или мне – по адресу alex@belacy.belgorod.su .

Текущее состояние проекта.

Оно непрерывно изменяется, в том числе и сейчас, когда я пишу эти строки.

На момент написания этих тезисов препроцессор практически готов компилятор почти закончен, виртуальная машина работает, значительная часть RTL написана, ядро RDD готово, GT API - только для Win32 console.

Значительная степень готовности у ООП системы. Уже достигнута большая функциональность, чем у Клиппера. На ее основе написана Get-система, классы Error, Tbrowse, Todbc.

В качестве примера в приложении приведен текст простенькой программы, демонстрирующей работу класса TOdbc.

Существующая версия ( build 30 ) позволяет получить Harbour программы, как 16-разрядные, так и 32-разрядные, работающие в DOS, Windows 95/98/2000, NT, OS/2, Linux.

Библиотеки сторонних производителей для Harbour.

К настоящему времени разрабатывается ( появились первые демо ) Fivewin для Harbour. Антонио Линарес написал мне, что собирается выпустить альфа – версию на днях ( возможно, к началу конференции она уже готова ). Harbour + FiveWin – это полноценное 32- разрядное Windows – приложение.

Extended Systems объявили о своем намерении начать разработку RDD клиента к своему Advantage Xbase Server для Harbour.

Фирма TopConnect объявила о своем желании подготовить свои библиотеки для работы с Harbour.

Что осталось сделать ?

Run-time компилятор макросов, RDD, GT API для разных платформ. Необходима оптимизация виртуальной машины, файловых драйверов и GT API для повышения производительности. Закончить RTL, выловить и исправить ошибки. Работы много - и от всех нас зависит, к ак скоро она будет сделана.

Присоединиться к проекту может любой. Не обязательно быть знатоком С. Вы можете помочь, тестируя Harbour на разных платформах. Кроме того, часть исходных текстов пишется на Клиппере – Harbour’е, так что есть работа и для клипперистов.


Max.

Тем временем выходит в свет еще один ( но коммерческий ) продукт, авторы которого провозглашают частичную Клиппер-совместимость и кросс-платформенность ( Win32, Linux ). Это - MAX.

К настоящему времени вышла версия MAX под Linux.

Разработчики заявили о своей принципиальной позиции поддерживать только текстовый режим работы ( отказ от GUI, X-Windows, и т.п. ). Этим достигается полная переносимость приложений с платформы на платформу и высокая производительность.

Max является наследником Clipper’87, хотя туда добавлено немало новшеств, присущих Clipper 5.xx, как, например, поддержка многомерных массивов, кодоблоков, составных операторов ( +=, -=, и др. ), унарных операторов ( ++, -- ), реализация препроцессора , LOCAL и STATIC переменные, множество дополнительных команд и функций. От полной совместимости с Clipper’ом разработчики отказались. Ниже приведен список элементов Clipper 5.xx, не поддерживаемых Max’ом:

Max реализует свой собственный формат индексных файлов, они имеют расширение MTX.

Формат MEM файлов тоже имеет отличия, но Max может читать MEM файлы, созданные Клиппером и другими Xbase продуктами.

Компилятор Max не создает exe – файлы, он производит файлы с расширением .max, которые затем исполняются программой Maxrun.

Ниже приведен частичный перечень новых функций Max.

Поддержка Unix:

Поддержка IBM Mainfraim:

Функции для работы с числами:

Строковые функции:

Сетевые функции:

Логика переходов:

Обработка ошибок:

Файловые функции:

Клавиатурные функции:

Функции работы с массивами:

Этот список можно продолжить, но у меня сейчас нет времени. Читайте документацию !



Приложение.

Пример программы, читающей из файла Microsoft Access с помощью класса Todbc.

    FUNCTION Main()
    LOCAL aOrders
    LOCAL nOp
    LOCAL dsFunctions
    LOCAL cExePath := substr( cargv(), 1, rat( "\", cargv() ) - 1 )
    LOCAL cConStr  := "DBQ=" + "harbour.mdb;" + "Driver={Microsoft Access Driver (*.mdb)}"
    dsFunctions := TODBC():New( cConStr )
    set COLOR TO "W+/B"
    CLS
    WHILE .T.
       @ 00, 00 SAY padc( "¦ TODBC Demonstration ¦", 80 ) COLOR "B/W"
       dsFunctions:SetSQL( "SELECT * FROM Functions" )
       dsFunctions:Open()
       @ 03, 24 TO len( dsFunctions:Fields ) + 4, 55
       aOrders := {}
       FOR i := 1 TO len( dsFunctions:Fields )
          aadd( aOrders, dsFunctions:Fields[ i ] :FieldName )
          @ i + 3, 25 PROMPT padc( "ORDER BY " + aOrders[ i ], 30 )
       NEXT
       MENU TO nOp
       IF nOp == 0
          EXIT
       ENDIF
       dsFunctions:Close()
       dsFunctions:SetSQL( "SELECT * FROM Functions ORDER BY " + aOrders[nOp])
       dsFunctions:Open()
       FOR i := 11 TO 24
          @ i, 00 SAY REPL( " ", 80 )
       NEXT
       @ 10, 00 TO 10, 79
       @ 24, 00 TO 24, 79
       @ 12, 00 TO 12, 79
       @ 11, 00 SAY ""
       @ 11, 02        SAY "Statement:"     COLOR "GR+/B"
       @ 11, col() + 1 SAY dsFunctions:cSQL
       @ 14,05 SAY " " + padr( dsFunctions:FieldByName("Code") :FieldName, 3 )+"   " + ;
         padr( dsFunctions:FieldByName( "Function" ) :FieldName, 15 ) + "   " + ;
         padr( dsFunctions:FieldByName( "State" ) :FieldName, 2 ) + "   " + ;
         padr( dsFunctions:FieldByName( "Comments" ) :FieldName, 40 ) ;
         COLOR "B/W"
       WHILE !dsFunctions:Eof()
          ? "      " + padr( dsFunctions:FieldByName( "Code" ) :Value, 3 ), "¦", ;
             padr( dsFunctions:FieldByName( "Function" ) :Value, 15 ), "¦", ;
             padr( dsFunctions:FieldByName( "State" ) :Value, 2 ), "¦", ;
             padr( dsFunctions:FieldByName( "Comments" ) :Value, 40 )
             dsFunctions:Skip()
       ENDDO
       dsFunctions:Close()
    ENDDO
    dsFunctions:Destroy()
    RETURN ( NIL )