Недавно я опубликовал обзор написания программы Hello, world на корпоративном языке R.Script LLP. Данный язык считается у нас в корпорации низкоуровневым, так как является самым быстрым, среди используемых нами. Сейчас же я расскажу о его модификации — R.Script M HPL (Modified HighProgrammingLanguage).
Все языки W.S. класса написаны нами для ускорения производительности в наших задачах и уже с готовым набором функций. Языки написаны на чистом ассемблере благодаря чему имеют большую производительность. Так как на данных языках часто программируются микроконтроллеры и логика процессоров основной уклон в R.Script делался на производительность. Производительность языка HPL приблизительно равна языку C, но для его использования требуются большие процессорные и ресурсы памяти. Нам выгоднее разрабатывать и поддерживать свой язык, чем использовать сторонний, так как в своем мы сделаем все так, как удобно и нужно именно нам.
Данная статья написана исключительно для того, чтобы показать как мы в нашей корпорации реализуем те, или иные задачи, а также показать наши разработки. W.S языки программирования (R.Script, L.Script, W-Script) используются только в нашей корпорации и не подлежат полному раскрытию, исключительно знакомство с синтаксисом и прочими особенностями.
Написание Hello,world намного отличается легкостью по сравнению с LLP. Здесь сначала подгружаются модификации языка:
А потом собственно и используем язык. В данной модификации уже предусмотрено тело main:
А теперь и используем встроенные функции вывода:
И получаем вот такую не очень мудрую программу, и при всем она работает почти на всех платформах, используя Консоль в Windows и терминал в Linux/Mac.
Ну, а теперь я решил написать скрипт переводчика в консоли, используя сервис Google Translate и работу с ее API.
В результате мы получили консольный мультиплатформенный англо-русский переводчик. Вот и практическое применение. В данном коде можно узнать практически все особенности данного языка. Если что-то не понятно — можно задать вопросы.
Данный язык на практике почти не используется. Используется в основной L.Script и W.Script Platform, о которых я напишу в следующей статье и распишу подробно что там и зачем, а также сравню их коды с кодами C++ и их достоинства по сравнению с ним. Также расскажу о построении GUI приложений с использованием встроенных библиотек L.Script
Для чего разработаны данные языки
Все языки W.S. класса написаны нами для ускорения производительности в наших задачах и уже с готовым набором функций. Языки написаны на чистом ассемблере благодаря чему имеют большую производительность. Так как на данных языках часто программируются микроконтроллеры и логика процессоров основной уклон в R.Script делался на производительность. Производительность языка HPL приблизительно равна языку C, но для его использования требуются большие процессорные и ресурсы памяти. Нам выгоднее разрабатывать и поддерживать свой язык, чем использовать сторонний, так как в своем мы сделаем все так, как удобно и нужно именно нам.
Предисловие, или для чего написана эта статья
Данная статья написана исключительно для того, чтобы показать как мы в нашей корпорации реализуем те, или иные задачи, а также показать наши разработки. W.S языки программирования (R.Script, L.Script, W-Script) используются только в нашей корпорации и не подлежат полному раскрытию, исключительно знакомство с синтаксисом и прочими особенностями.
Обзор R.Script Modified
Написание Hello, world
Написание Hello,world намного отличается легкостью по сравнению с LLP. Здесь сначала подгружаются модификации языка:
LOAD(INCLUDE{SCRIPT[~SYSTEM:.add>highlevel#]}); //Loading file C:/R.Script/highlevel.add
А потом собственно и используем язык. В данной модификации уже предусмотрено тело main:
source .main {
//Some code there
}
А теперь и используем встроенные функции вывода:
var(int) conid = Console.OpenWindow(title="Hello,world",desp="Example application");
Console.WriteLine("Hello,world");
Console.CloseWindow(id=conid);
И получаем вот такую не очень мудрую программу, и при всем она работает почти на всех платформах, используя Консоль в Windows и терминал в Linux/Mac.
//R.Script 2012 M HPL Hello world
source .main {
var(int) conid = Console.OpenWindow(title="Hello,world",desp="Example application"); //Открываем окно консоли, где будем писать
Console.WriteLine("Hello,world"); //Пишем в консоли, стандартно в последней открытой
App.Wait(5s); //Ожидаем 5 секунд до следующей команды (аналог App.Sleep)
Console.CloseWindows(id=conid); //Закрываем окно консоли
}
А теперь практика
Ну, а теперь я решил написать скрипт переводчика в консоли, используя сервис Google Translate и работу с ее API.
create function .getTranslatedText (pagecode) {
if (var.isset=pagecode and var.!empty==pagecode and String.Search(result,"translatedText")==TRUE) {
var(str) result = String.Cut(mode="searchline","\"translatedText\" :\"(.*)\"","intext"); //Находим строку с текстом и оставляем только текст
return result;
} else {
if (Console.IsOpened()==FALSE) var(int) conid = Console.OpenWindow(); //Если консоль не открыта - открываем
Console.WriteLine("translated text get error"); //Ошибка
use finish(conid); //Используем функцию завершения приложения. Приставка use используется для того, чтобы отделить пользовательские и функции из дополнений от основных
return 0;
}
}
create function .finish(consoleid) {
if (Console.IsOpened==FALSE) App.Exit(); //Проверяем, есть ли открытая консоль, если нету - выходим
if (var.!isset=consoleid and var.empty=consoleid and Console.WindowExists(consoleid)) App.Exit(); //Проверка на правильность переменной переменной
Console.WriteLine(text="Программа завершена, для выхода нажмите любую клавишу",window=consoleid);
Console.WaitKey();
App.Exit();
}
source .main {
include("SYSTEM:.dir>HTTP:.hpl>prot"); //Загружаем модуль, для работы через протокол HTTP (файл C:\Source\HTTP\prot.hpl)
conid = Console.OpenWindow(title="Англо-русский Переводчик","Powered by Google Translate");
var(arr) messages = Array.Create(0>"Переводчик приветствует вас! Введите текст для перевода",1>"Загрузка ответа от сервера",2>"Перевод Вашего текста:",3>"Работа переводчика завершена, нажмите любую клавишу для выхода, или F2 для перевода другого текста");
var(int) messnum = 0;
Console.WriteLine(messages[messnum]);
var(str) texttotrans = Console.ReadLine();
Console.WriteLine(messages[messnum++]);
result = HTTP.GetHTML(url="https://www.googleapis.com/language/translate/v2?key=MY_KEY&source=en&target=ru&q="..String.Change(" ">"%20",texttotrans),mode="secure");
var(str) return = use getTranslatedText(result);
Console.WriteLine(messages[messnum++].."\n\r"..return.."\n\r"..messages[messnum++]);
var(int) userkey = Console.ReadKey();
if (userkey==K_KEY_F2) {
App.ClearVars();
App.StartMain();
} else App.Exit();
}
В результате мы получили консольный мультиплатформенный англо-русский переводчик. Вот и практическое применение. В данном коде можно узнать практически все особенности данного языка. Если что-то не понятно — можно задать вопросы.
От автора
Данный язык на практике почти не используется. Используется в основной L.Script и W.Script Platform, о которых я напишу в следующей статье и распишу подробно что там и зачем, а также сравню их коды с кодами C++ и их достоинства по сравнению с ним. Также расскажу о построении GUI приложений с использованием встроенных библиотек L.Script