Почему Клиппер ?!
Почему Клиппер ? Почему многие тысячи программистов до сих пор используют этот язык для создания приложений, почему группы разработчиков во всем мире развивают Клиппер, работают над созданием новых Клиппер - совместимых компиляторов ? В самом ли деле он безнадежно устарел и на нем работают только те, кто не может или не хочет переучиваться, как считают сейчас многие ?
Итак, почему Клиппер ?
Кратко говоря, потому что это язык высокого
уровня ( выше, чем С и Паскаль ), который позволяет создавать серьезные
приложения, не отвлекаясь на проблемы реализации множества технических деталей,
фокусируя внимание только на логике решаемой задачи.
Потому что он сочетает в
себе мощь языков интрепретируемого типа и скорость языков компилируемых.
Потому что он позволяет создавать приложения, управляемые данными.
Принято считать, что такие современные средства разработки, как Delphi, Visual C и др. позволяют создавать приложения очень быстро и просто. Действительно, даже новичок сможет, несколько раз кликнув мышкой, создать этими инструментами симпатичную GUI программу типа Hello, world ! Но чтобы разработать большое приложение, придется писать много строк кода. Visual средства здесь не помогут. И я берусь утверждать, что на Клиппере это можно сделать быстрее, чем на C и Паскале.
Клиппер сам решает вопросы выделения/высвобождения памяти, вам не надо заботиться о предварительном выделении памяти под данные, о возможном переполнении буфера, о последующем высвобождении памяти. Он включает в себя сборщик мусора, который ведет учет использования памяти и освобождает ее, когда она больше не используется ни одной переменной - аналогичные технологии применяются в современных широко рекламируемых языках, таких, как Java и Python.
Клиппер позволяет создавать переменные и массивы динамически, по ходу
исполнения программы:
         varname := "NewVar"
         Private &varname
         &varname := ...
Массивы в Клиппере - это отдельный разговор. Они, как и простые переменные,
не имеют предопределенного типа, их размер и размерность могут определяться
и изменяться динамически. Массивы могут включать в себя переменные разных типов
и другие массивы, что позволяет создавать по ходу исполнения программы новые
структуры данных.
Например, создаем массив структур, определяющий меню. Первый элемент
структуры - название, второй - соответствующий этому пункту меню блок кода или
ссылка на субменю:
         Local aMenu := {}
         Aadd( aMenu, { "New", {|| Newfile() }} )
         Aadd( aMenu, { "Open", {|| Openfile() }} )
         Aadd( aMenu, { "Options", {} )
         Aadd( aMenu[ 3,2 ], { "Screen Options", {|| ScreenOptions() }} )
         ...
Одна из важнейших особенностей Клиппера - макросы и блоки кода.
Вы можете присваивать переменной строку с Клипперным кодом и затем выполнять ее:
         cCode := "SomeFunction( x,y )"
         result := &cCode
Если вам надо исполнять эту строку несколько раз, то чтобы каждый раз не
тратить время на ее интрепретацию, вы можете ее откомпилировать в блок кода, а
затем исполнять, передавая нужные параметры:
         cCode := "SomeFunction( x,y )"
         block := &( "{||" + cCode + "}" )
         Eval( block,x,y )
Строки с кодом могут храниться вне программы, например, в базе данных -
это и есть приложение, управляемое данными !
Вы можете писать скрипты на Клиппере и хранить их в текстовых файлах, с
тем, чтобы ваша программа исполняла их в run-time. Вы можете использовать скрипты
в файлах - описаниях отчетов, входных форм, ini-файлах ...
Таким образом вы можете дополнять и модифицировать возможности вашего
приложения, не меняя его.
Клиппер имеет очень мощную и удобную систему экранного ввода/вывода:
         @ y,x GET somevar PICTURE <шаблон> WHEN <условие> VALID <условие>
Вы задаете здесь и шаблон вводимой переменной, и предварительное
условие для ее ввода, и проверку правильности ввода. На самом деле возможности
этой системы гораздо шире, но здесь не место обсуждать все ее детали.
Клиппер имеет очень удобные средства для работы с базами данных. Он включает в себя встроенную систему RDD - Replaceble Data Driver, которая позволяет работать с разными типами файлов данных и индексов, используя одинаковый набор команд и функций.
Мощный препроцессор позволяет создавать новые команды и использовать их
в своих программах. Вот пример использования команды для открытия главного окна
из FiveWin - библиотеки для создания Windows GUI приложений:
         DEFINE WINDOW oWndMain FROM 1, 1 TO 22, 75 ;
           TITLE "MyApplication" ;
           MENU MMenu( msmenu ) ICON oIcon MDI
Я рассказал здесь о главных особенностях Клиппера, которые я ценю больше
всего и которых мне недостает в других языках. Надо только еще упомянуть систему
расширения Клиппера ( C API и Assembler API ), благодаря которой для Клиппера
написано на С и Ассемблере множество дополнительных модулей, расширяющих его
возможсти - GUI библиотеки, RDD, библиотеки сетевых функций, компрессии/декомпрессии
данных, чтение/печать бар-кодов, ...
Все это позволяет писать на Клиппере большие серьезные приложения - и
множество таких приложений написано и успешно функционирует по всему миру.
Хочу особо подчеркнуть, что я говорю здесь о Клиппере вообще, о Клиппере,
как о языке, а не только о CA-Clipper от
компании Computer Associates, последняя версия которого ( 5.3b ) вышла в 1995 году.
Язык Клиппер существует в различных реализациях и может быть использован
для работы с разными типами баз данных, а не только с xBase, как многие считают.
Теперь хотелось бы поговорить о мифах, созданных вокруг Клиппера в последние годы.
- Миф первый:
Клиппер - это язык для DOS и потому умирает вместе с ним. - На самом деле, Клиппер существует в разных реализациях на разных платформах:
Harbour - кросс-платформенный Клиппер-совместимый компилятор ( Win32/64, Unix, Linux, OSX, OS/2 ), Open Source проект;
Clip - Клиппер-совместимый компилятор для Linux/Unix ;
Xbase++ - совместимая с Клиппером система программирования для Win32, как провозглашают его авторы, real Clipper for Windows;
Flagship - Клиппер для Unix платформы;
- Миф второй:
На Клиппере нельзя писать GUI приложения. - Даже для DOS CA-Clipper существуют 16-разрядные библиотеки для создания
GUI-приложений - FiveWin и Clip4Win.
CAVO, xBase позволяют писать GUI WIn32 приложения, Harbour пока использует для этого специальные библиотеки от авторов FiveWin и Clip4Win, Clip включает в себя поддержку GUI для Unix. Что касается Flagship и Max - не знаю.
- Миф третий:
Для Клиппера закрыты двери в мир современных технологий. - Тоже неправда ! 32-разрядные реализации Клиппера позволяют их использовать.
- Миф четвертый:
Клиппер позволяет работать только с устаревшими xBase файлами данных. - Готов поспорить насчет того, что xBase базы устарели, но это - тема для
другого разговора.
Даже DOS'овский Клиппер позволяет работать с разными типами данных, используя RDD - существуют RDD для разных SQL DBMS.
32-разрядные реализации Клиппера работают с разными DBMS как через RDD, так и через ODBC и родные API.
Еще раз хочу подчеркнуть, это очень важный, но часто упускаемый момент, Клиппер - это прежде всего язык программирования, и хотя изначально он был ориентирован на использование xBase файлов данных и имеет мощные средства для работы с ними, ничто не мешает писать нем приложения, использующие другие типы баз данных.
Пока все. Это то, что пришло в голову с ходу, на первом дыхании :).
Пишите ! Надеюсь, ваши мнения, вопросы позволят дополнить эту небольшую
статью.