Почему Клиппер ?!

Почему Клиппер ? Почему многие тысячи программистов до сих пор используют этот язык для создания приложений, почему группы разработчиков во всем мире развивают Клиппер, работают над созданием новых Клиппер - совместимых компиляторов ? В самом ли деле он безнадежно устарел и на нем работают только те, кто не может или не хочет переучиваться, как считают сейчас многие ?

Итак, почему Клиппер ?
Кратко говоря, потому что это язык высокого уровня ( выше, чем С и Паскаль ), который позволяет создавать серьезные приложения, не отвлекаясь на проблемы реализации множества технических деталей, фокусируя внимание только на логике решаемой задачи.
Потому что он сочетает в себе мощь языков интрепретируемого типа и скорость языков компилируемых.
Потому что он позволяет создавать приложения, управляемые данными.

Принято считать, что такие современные средства разработки, как 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 файлов данных и имеет мощные средства для работы с ними, ничто не мешает писать нем приложения, использующие другие типы баз данных.

Пока все. Это то, что пришло в голову с ходу, на первом дыхании :).
Пишите ! Надеюсь, ваши мнения, вопросы позволят дополнить эту небольшую статью.