Язык Суржи и среда разработки Суржи |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Язык Суржи и среда разработки Суржи |
Rik |
8.02.2011 11:18
Сообщение
#1
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Юрий Репутация: 0 |
Чтобы сразу было понятно зачем это всё создавалась:
Проект рассчитан на программистов Delphi, желающих сделать свои программы максимально гибкими. Фактически эту систему я использую уже лет 8(раньше ядром системы был сторонний покупной интерпретатор), делаю на ней, для клиентов, "морды" к базам данных. Если клиент хочет что-либо изменить, ему не нужно заморачиваться по поводу лицензирования средств разработки, затрат на установку и т.д. Тут всё в одном флаконе и исходный код приложения и среда для его "конфигурирования". Многие мои пректы у заказчиков "живут" уже по нескольку лет без моего участия, все поддерживают своими силами. Сейчас в системе используется собственный интерпретатор языка Суржи (Delphi - pascal тоже поддерживается) Суржи - объектно ориентированный язык программирования, поддерживает русскую транскрипцию. Название языка происходит от слова суржик. В целом синтаксис языка базируется на синтаксисе Delphi, но есть элементы заимствованные из С подобных языков а так-же из Оберон и Модула. В частности, из Си подобных языков заимствованы оператор присвоения = вместо :=, оператор сравнения == (или = тоже понимает), инкремент и декремент в виде ++, --, +=, -=, а так же операторы побитового сдвига << и >>. Синтаксис операторов if, for, while заимствован из оберон и модула. Разница с синтаксисом Delphi в том что эти операторы сами открывают блок, begin для открытия блока писать не нужно, но они всегда должны заканчиваться завершающей инструкцией end, даже в том случае, если в их теле всего один оператор. Кроме этого все процедуры и функции объявляются с ключевым словом method. Если ком интересно, подробнее об особенностях смотрите в справке. "visualtech.shadr.ru/files/Surgy7Setup.exe" - Инсталлятор среды, включающий дизайнер и интерпретатор - машину Суржи. Приложения сохраняются в формате xml. В комплекте примеры с использованием русской транскрипции и без, один с базой данных. Для запуска примеров используйте менеджер приложений Пуск-Программы-VisualTech-Суржи7-Менеджер. Из менеджера можно запустить пример или загрузить в дизайнер. Если у кого при инсталляции примеры в менеджер приложений не прописались, идем в Пуск-Программы-VisualTech-Суржи7-Пример-[Привет мир] или [пример с базой] - Запускаем левой кнопкой мыши, правой - вызываем контекстное меню - Изменить и приложение загрузится в дизайнер. Собственно предлагаю этот сабж и обсудить.... Сообщение отредактировано: Rik - 8.02.2011 14:46 -------------------- |
Rik |
8.02.2011 14:05
Сообщение
#2
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Юрий Репутация: 0 |
Ну что-же. Система поддерживает 2 языка: Delphi-pascal и Суржи. С паскалем и так всё ясно, хотя для него тоже поддерживается русская транскрипция. Как я говорил, это пока эксперементально, когда то меня спросили о поддержке русского языка, я подумал, почему бы и нет. Лично для себя плюс из этого извлек, показал систему дочке второкласснице, ей понравилось, теперь она "балуется" решает школьные примерчики. Классический англоязычный вариант ребенку объяснять бесполезно...
Сам я в рабочих проектах русскую транскрипцию не использую, да и печатать привык в слепую латинскими.. Вот пример кода на суржи. Код модуль Главная_форма; тип ТГлавнаяФорма = класс(TForm) КнПриветМир: TButton; Редактор1: TEdit; Циклы_и_массивы: TButton; ЛистБокс: TListBox; ТестМножества: TButton; УсловныеОператоры: TButton; метод Циклы_и_массивыПриНажатии(Отправитель: TObject); метод КнПриветМирПриНажатии(Отправитель: TObject); метод ТестМножестваПриНажатии(Отправитель: TObject); метод УсловныеОператорыПриНажатии(Отправитель: TObject); закрытые защищенные открытые конец; ТПеречисление = (П1, П2, П3, П4, П5, П6); ТМножИзПеречисл = множество из ТПеречисление; пер ГлавнаяФорма: ТГлавнаяФорма; реализация метод ТГлавнаяФорма.КнПриветМирПриНажатии(Отправитель: TObject); начало Редактор1.Текст = 'Привет мир!'; конец; метод ТГлавнаяФорма.ТестМножестваПриНажатии(Отправитель: TObject); пер Множ: ТМножИзПеречисл; начало ЛистБокс.Элементы.Очистить; ЛистБокс.Элементы.Добавить('Тест множества'); Множ = [П1..П3, П6]; если П1 естьв Множ тогда ЛистБокс.Элементы.Добавить('Множество содержит П1') конец; если П2 естьв Множ тогда ЛистБокс.Элементы.Добавить('Множество содержит П2') конец; если П3 естьв Множ тогда ЛистБокс.Элементы.Добавить('Множество содержит П3') конец; если П4 естьв Множ тогда ЛистБокс.Элементы.Добавить('Множество содержит П4') конец; если П5 естьв Множ тогда ЛистБокс.Элементы.Добавить('Множество содержит П5') конец; если П6 естьв Множ тогда ЛистБокс.Элементы.Добавить('Множество содержит П6') конец; ЛистБокс.Элементы.Добавить('Завершено'); конец; метод ТГлавнаяФорма.УсловныеОператорыПриНажатии(Отправитель: TObject); пер П: ТПеречисление; начало ЛистБокс.Элементы.Очистить; ЛистБокс.Элементы.Добавить('Тест если (if)'); П = П3; если П == П1 тогда ЛистБокс.Элементы.Добавить('П = П1') иначеесли П == П2 тогда ЛистБокс.Элементы.Добавить('П = П2') иначеесли П == П3 тогда ЛистБокс.Элементы.Добавить('П = П3') иначеесли П == П4 тогда ЛистБокс.Элементы.Добавить('П = П4') иначеесли П == П5 тогда ЛистБокс.Элементы.Добавить('П = П5') иначеесли П == П6 тогда ЛистБокс.Элементы.Добавить('П = П6') конец; П = П4; ЛистБокс.Элементы.Добавить('Тест выбор(case)'); выбор П из П1: ЛистБокс.Элементы.Добавить('П = П1'); П2: ЛистБокс.Элементы.Добавить('П = П2'); П3: ЛистБокс.Элементы.Добавить('П = П3'); П4: ЛистБокс.Элементы.Добавить('П = П4'); П5: ЛистБокс.Элементы.Добавить('П = П5'); П6: ЛистБокс.Элементы.Добавить('П = П6'); конец; ЛистБокс.Элементы.Добавить('Завершено'); конец; метод ТГлавнаяФорма.Циклы_и_массивыПриНажатии(Отправитель: TObject); пер Мас: массив [1..10] из Целое; Стр: Строка = 'Заполнение массива'; Число: Целое = 0; начало ЛистБокс.Элементы.Очистить; ЛистБокс.Элементы.Добавить(Стр); для Число = 1 до 10 выполнять Мас[Число] = Число * 10 конец; ЛистБокс.Элементы.Добавить('Массив заполнен'); ЛистБокс.Элементы.Добавить('Вывод значений элементов массива'); Число = 10; пока Число > 0 выполнять стр = ЦелоеВСтроку(Мас[Число]); ЛистБокс.Элементы.Добавить(Стр); Число-- конец; ЛистБокс.Элементы.Добавить('Завершено'); конец; конец. Удобочитаемость вроде как есть, но, набирать код тяжело, т.к. я говорил что полная русификация не возможна, постоянное переключение раскладок не есть хорошо... А те нововведения, которые я сделал, как видите они не такие и глобальные. Проект я создавал в первую очередь как инструмент для себя и исходил из своих соображений по удобству. Оператор присвоения := больше подходит для понимания присвоения, но для промышленного применения роли не играет, а использовать = вместо := лично для меня (да и я поди не один такой) более удобно, как и другие опрераторы, которые я добавил. Если в операторах if, while, for можно обойтись без begin для открытия блока - почему бы не использовать эту возможность, я попробовал, мне понравилось. Тот же Вирт, считает оператор begin для открытия блока избытосностью, т.к. можно обойтись без него. Думаю всё равно кто-либо из вас, уважаемые обсуждающие, сталкивался с проблемой - Есть приложение, код закрыт, нужно что-либо поменять, звонишь разработчикам и объясняешь - вот, надо. Ответ - если это надо ещё кому-нибудь мы сделаем, а так идите нафиг. Я считаю это не правильно, программа должна позволять себя модифицировать, как например сделано в 1С. 1С мне не нравится, но подход у них верный.. Ну что ещё сказать. Код обработчиков событий дизайнер делает автоматом как и в дельфи, так-же автоматом в класс прописываются компоненты добавленные на форму... В целом меня интересует, может ли быть полезными национальная транскрипция и те нововведения которые я сделал, хотя про них я уже всё услышал... Сообщение отредактировано: Rik - 8.02.2011 14:20 -------------------- |
Текстовая версия | 26.09.2024 9:39 |