IPB
ЛогинПароль:

> Внимание!

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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
7 чел. читают эту тему (гостей: 7, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 28.04.2024 2:37
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"