Совместимость Xbase++ и Clipper
Завершение этого подготовительного курса опять фокусируется на теме "Совместимость Xbase++ и Clipper". Для этого мы переведем под Xbase++ известное всем Clipper-разработчикам Clipper-приложение DBU.EXE. Это будет интересно для 90% пользователей, которые планируют использовать Xbase++. Если вы не Clipper-разработчик, то вы можете пропустить эту главу.
Нет продукта, кроме, разумеется, самого Clipper, более совместимого с Clipper, чем Xbase++. Однако, как показывает практика, слово совместимость определяется по-разному. Если спросить трех разных программистов: “Что такое совместимость?”, мы получим три различных определения. Наше понимание совместимости с Clipper – это то, что компилятор Xbase++ понимает язык Clipper на 100%. Разработчики Xbase++ выбрали этот удивительный язык программирования для своего компилятора, так как это наиболее мощный язык в семействе языков xBase.
Некоторые программисты Clipper, однако, наполняют слово совместимость смыслом идентичность. Они ожидают, что Xbase++ идентичен Clipper. Если принять это определение, то Xbase++ не является совместимым с Clipper, так как разработчики не перестраивали компилятор Clipper, а создали компилятор, который понимает язык Clipper. Если Xbase++ был бы идентичен Clipper, то нижеприведенные строчки кода не заработали бы в Xbase++:
PRIVATE aArray[1000000]
MemoEdit( Replicate("A", 1000000) )
MyFunc( @FIELD->NAME )
MyFunc( @aArray[22] )
MyFunc( @oGet:row )
CLASS MyBrowse FROM TBrowse
x := &("aArray[n]")
? oGet:&(x)
По мнению разработчиков, эти строчки кода на 100% совместимы с языком Clipper. Однако, либо компилятор Clipper не сможет перевести эти строки в программу, либо программа вызовет ошибки, когда этот код будет выполнен (эти строки вызовут ошибки во время компиляции Clipper или во время запуска). Xbase++ обрабатывает эти строки без каких-либо проблем. Это поднимает вопрос: “Какой компилятор более совместим с языком программирования, Clipper или Xbase++?” (судите сами).
Xbase++ разработан для того, чтобы дать вам доступ к 32-разрядным операционным системам при помощи знакомого вам языка программирования. Это означает, что Xbase++ использует тот же самый язык, что и Clipper, но в другой концепции. Только подумайте, например, об управлении памятью. Массив с миллионом элементов или больше, или строка размером в 5 MB невозможны в Clipper. Это возможно в Xbase++, так как 32-разрядные системы поддерживают это.
Разработчики Xbase++ согласны с тысячами программистов Clipper, что язык Clipper нуждается в объектной модели, и они применили ее в Xbase++. Также есть общий консенсус, что программист должен иметь возможность хранить комплексные типы данных (массив, блок кода и объект) в файле. Разработчики создали такую возможность в Xbase++. Разработчики также подумали, что важны такие “мелочи”, как передача переменной поля с помощью связи определенной пользователем функции, например, или передача сообщения объекту макросом. Такого рода вещи должны быть доступны в динамическом языке программирования. Компилятор Clipper не может этого делать, но в языке Clipper есть место для этих возможностей. Вот почему вы можете делать эти вещи при помощи компилятора Xbase++: он на самом деле понимает язык Clipper.
Этот разговор должен вас убедить, что Xbase++ не идентичен Clipper. Вместо этого Xbase++ добавляет больше возможностей в уже мощный язык Clipper. Xbase++ понимает ваш код, но использует 32-х, а не 16-разрядный подход. Это заставляет вас немного изменять код, если вы хотите, чтобы ваше приложение запускалось под DOS/Clipper и под Windows/Xbase++. Трудно оценить количество требуемых изменений, мы просто хотим дать вам представление о том, что вы можете испытать при переносе ваших приложений Clipper под Xbase++.
-