W.Script языки программирования, или как мы развлекаемся в нашей компании

Наша компания (Австралия, Сидней) существует уже 2 года. Так вот — решили мы год назад сделать для разработки свои языки программирования. Точнее сама основа уже была — закрытые языки программирование нашей компании-предшественницы.

В итоге мы получили три языка программирования — R.Script (микропроцессоры, вычислительные программы), L.Script (GUI, Web приложения) и главный — W.Script (этот язык — основа двух предыдущих и с ним можно делать все, что хочешь).

В этой статье я впервые в интернете расскажу о этих мозгоубивающих увлекательных языках программирования.


R.Script

Существует две редакции этого языка — LLP и HLP. Главная редакция, которую наши программисты используют, — LLP. HLP же является его расширением и превращением в полнофункциональный язык программирования типа L.Script (на данный момент HLP не используется в наших проектах).

Рассмотрим LLP

Для того, чтобы запустить программу, точнее сказать компилятору, что она есть (обычно это тело main) нужно запустить функцию INCLUDE:
LOAD(INCLUDE):

Двоеточие в конце строки нужно для открытия тела данной функции (т.е. мы сделали main { ).
Теперь нужно загрузить API, с которым мы будем работать:
PAR(STRING[~SYSTEM:.api>consoleapi#]);

Теперь я думаю, что стоит пояснить данную строку. На любом другом языке это выглядело бы подобно этому:
include("C:\Source\consoleapi.api");

То есть строка в данном языке начинается с символа "~", а завершается — символом "#". Все строки должны быть обработаны функцией STRING[]; — квадратные скобки используются по причине того, что обычные () уже были использованы в строке.
Теперь нужно завершить тело документа, чтобы далее работать с API:
PAR(-END);

И закрываем тело вообще:
END

В итоге получаем программу:
LOAD(INCLUDE):
  PAR(STRING[~SYSTEM:.api>consoleapi#]);
  PAR(-END);
END

Для чего нужен дефис в функции PAR? А для того, чтобы полностью завершить выполнения тела. Если мы захотим подгрузить Win32API можем продолжить:
 LOAD(INCLUDE):
  PAR(STRING[~SYSTEM:.api>consoleapi#]);
  PAR(END);
  PAR(START); //Говорим, что хотим продолжить
  PAR(STRING[~SYSTEM:.fir>Windows:.api>win32#]); //Загружаем файл C:\Source\Windows\win32.api
  PAR(-END); //Полностью завершаем тело
END

А теперь, чтобы что-то вывести нужно использовать API. Для этого нужно создать тело использования API:
LOAD(INCLUDE):
  PAR(STRING[~SYSTEM:.api>consoleapi#]);
  PAR(-END);
END

LOAD(API::CONSOLE-INCLUDE[PAR(LINE2)]):
  ECHO(): //Говорим программе, что будем выводить (и открываем дело вывода при помощи двоеточия
    PAR(STRING[~Hello, world#]);
    PAR(-END);
  END //Закрываем тело ECHO
  PAR(-END); //Завершаем тело API
END //Закрываем тело API

В итоге мы получили «маленькую» программу Hello, world, которую можно скомпилировать почти во всех операционных системах (использует она консоль, в linux — терминал).

UPD: Данная статья написана для того, чтобы показать какие языки мы используем для программирования ракет, микроконтроллеров и логики процессоров.
Продолжение следует…
Поделиться публикацией

Комментарии 36

    +9
    Зачем это тут, простите?
      0
      Данные языки разработаны для программирования микроконтроллеров и процессорной логики, так как использовать ASM — тяжело, а для C — нужны ресурсы были разработаны эти языки. Сейчас LLP используется для программирования охлаждения.
        +3
        Ну я не знаю. Компиляторы для C — который суть кроссплаформенный высокоуровневый ассемблер — студенты в качестве курсовых пишут. А вот этот LLP — мало того, что синтаксис как у MUMPS (интересна, кстати обоснование для оного), так еще и отсутствуют библиотеки и люди, готовые на нем писать.
          –1
          В наших тестах на используемых нами процессорах LLP дал результат быстрее чем C, и места занимает меньше, что является глобальной экономией в производстве.
            0
            Но почему такой синтаксис? Неужели нельзя использовать что-то менее страшное?
              –1
              Я же написал — это низкоуровневый язык (почти). Есть его модификации и сородичи. Но как-то с такой оценкой статьи про них писать не особо хочется… Вот там синтаксис — красавица. А этот сиснтаксис — для быстродействия, компилятору не нужно самому закрывать тэги и тд.
              0
              Не бывает быстрых и медленных языков, бывают хорошие и плохие реализации. Лучше б вы бекенд для GCC или LLVM написали.
                –1
                Скорее всего никому не понравиться — какая от этого выгода? OpenSource сделать невозможно так как взлом таких проектов почти всегда возможен. А скорее всего и будет — так как данный язык используется для программирования ракет, используемых Минобороны США.
                  0
                  Можете делать закрытый проект с бекендом — никто не заставляет открывать. Хотя этот ваш security by obscurity говорит о недостаточной квалификации программистов для ваших «Серьёзных» задач. Или задачи недостаточно серьёзные, скорее всего.

                  А выгода простая, причём для вас же: в случае LLVM вы получаете рабочий фронтэнд clang, кучу машинно-независимых оптимизаций и готовой инфраструктуры для быстрой реализации не только бекенда, но и ассемблера, дизассемблера и некоторых других частей тулчейна. Не нужно всё велосипедить с нуля, понимаете?
                    0
                    StO наша компания придерживается уже более 40 лет — то есть компания всегда использовала это правило. Мы всегда делали велосипед — почти никогда не занимались развитием сторонних проектов и не привлекали к себе инвестиций. Мы делаем то, что выгодно и то, что удобно. В результате наша компания имеет много контрактов, причем больших.

                    То есть вы хотите сказать, что проекты, разработки которых используются в проектах Минобороны — недостаточно серьезные? Или программисты, которые получают заработную плату минимально AU$ 12 тыс. с учетом того, что мы обеспечиваем проживание и транспорт. Или сетевые администраторы с з.п. >25 тыс.? Наверное руководство компании не просто так выбрало именно «велосипедить с нуля»?

                    PS: Кто-то упорно минусует мои комментарии?
                      +1
                      Во-первых, вы сами сказали что код, который вы пишете можно взломать и закрытый код — чуть ли не единственная линия «защиты» от взлома. Не важно сколько контрактов у вас есть и сколько вы получаете — это не доказывает качетство или некачественность кода, главное как вы сами оценили свою работу.

                      Решение про «велосипедить с нуля» или нет должны принимать инженеры, а не руководство, и это решение должно приниматься на основе технических аргументов. Ведь может быть аргумент был «если мы только немного допилим существующий компилятор существующего языка, то как мы обоснуем милионные контракты?» Я не говорю что это именно так и было, но это тоже подходит под ваше «не с проста» и «руководство».
                        –1
                        Немного поясню — руководство компании — это программисты/инженеры, которые работали успешно в 80-90 гг. И я тоже не говорю, что у нас не было «то как мы обоснуем миллионные контракты?». Цена разработки нового и доработки предыдущего примерно одинакова, мы решили выбрать создание нового, так как это корпоративные традиции. В результате мы получили достаточно эффективный инструмент, про который мы и хотели рассказать в данной серии статей. Это (и другие) статьи написаны не для того, чтобы показать какой классный язык и тд., а для того показать что такое есть и мы этим пользуемся.
                          +1
                          Любопытно, как вы оцениваете эффективность.
                            –1
                            Я, как и в общем все руководство оценивает этот проект на ноль — то есть именно он не принес никаких убытков, но и никакого чистого дохода. Но по оценкам аналитического отдела и нашего совета руководителей модификация C/C++ языков принесла бы не более плодотворный результат. Хотя в каких-нибудь проектах использование С принесло бы более плодотворный результат.
                              0
                              Не нужно модифицировать языки. Нужно просто написать бекэнд.

                              Чем больше вы пишете, тем больше у меня впечатление что вы или вообще не в теме современных подходов к разработке компиляторов или всё намеренно делали в абсолютном информационном вакууме, согласно традиции вашей компании делать велосипеды.
                                –1
                                Под разработкой я имею ввиду не только модифицировать компилятор, а также дописать необходимый код, чтобы была возможность компилировать программу под нашими устройствами (хотя мы это и так сделали).
                                  0
                                  Не «под», а «для». И это и называется — написать бекэнд. Тот факт, что для вас слово бекэнд ничего не значит — ещё одно доказательство того, что вы не в теме.
                                +1
                                Так я еще раз спрошу: как вы оцениваете эффективность? По каким метрикам?
                                  0
                                  habrahabr.ru/post/158099/ См. комментарий
                                    +1
                                    Какой, простите, комментарий из 11?
                              0
                              > Цена разработки нового

                              Ага, даже не смешно. За сколько вы разработаете фронтэнд C++? Да ладно, даже чистого C11? А Clang или GCC достаются даром.
                  0
                  А на счет людей — у нас в компании отдел в 20 человек сидит на W.S языках, на LLP — 2 человека, занимаются именно разработкой языков типа HPL, L.Script Web
              +12
              Честно говоря, выглядит отвратительно.
                +2
                Once seen…
                0
                Теренс Парр сейчас тихо плачет.
                  +5
                  закрытые языки программирование нашей компании-предшественницы

                  неспроста они были закрыты, неспроста…
                    0
                    Закрытые в смысле корпоративные, они свету, как эти, представлены не были.
                    +4
                    А смысл? Картинку про троллейбус из хлеба постить не буду.
                      –1
                      Программирования МК и процессорной логики очень классно на этом языке. Все что хочешь можно сделать, и выполняться оно будет быстро
                      +6
                      Какой ужасный синтаксис
                        +3
                        Вы упустили очень важный момент в статье. А именно мотивационную часть статьи, или по-простому «нахрена».
                        А по теме, я не понимаю как это может быть кроссплатформенным:
                        PAR(STRING[~SYSTEM:.fir>Windows:.api>win32#]); //Загружаем файл C:\Source\Windows\win32.api
                          0
                          Эта строка для примера (т.е. подгрузка библиотек WinAPI). Для линуха можно было и другим написать. А вообще этот язык не используется для программирования Win/Linux.
                          +6
                          АААААААААААААААААА!!!
                            +3
                            > make me unsee it
                            denied

                            > sudo make me unsee it
                            duh!
                              +4
                              чтобы показать какие языки мы используем для программирования ракет
                              Что-то мне страшновато как-то стало
                                0
                                А как мне написать? так, как у нас в документации, наверное (?):
                                Для программирования пусковых устройств для боеголовок классов 0Z, А1,B2,C3,D4

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                              Самое читаемое