Как стать автором
Обновить

Что за X++? Что за ABAP? Древние языки, про которые интересно слушать, но не дай бог на них писать

Время на прочтение6 мин
Количество просмотров27K
Всего голосов 51: ↑42 и ↓9+33
Комментарии92

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

за всё не скажу, но про Prolog и FORTH мнения звучат странновато и лично для меня (как писавшего и на Prolog и пару коммерческих проектов на FORTH) выглядит, что интервьюируемые столкнулись с этими технологиями по касательной на излете вскользь
Против Форт «травм» полезна к прочтению и вторая книга по Форт от Л. Броуди. :)
ЛЕО БРОУДИ «СПОСОБ МЫШЛЕНИЯ — ФОРТ ЯЗЫК И ФИЛОСОФИЯ ДЛЯ РЕШЕНИЯ ЗАДАЧ»

P.S. Картинка СЛОВА — SWAP из первой книги Л.Броуди (авторское видение оформления иллюстраций в книге — там ещё много их интересно представленo)

: BOUNDS ( adr n — adr+n adr ) OVER + SWAP ;
у меня тот советский перевод откуда картинка досих пор в бумажном виде лежит и даж недавно один немецкий коллекционер книг по FORTH был удивлен что в СССР оказывается перевели, он решил что «пиратский», но там предисловие Чарльза Мура к советскому изданию, так что врядли пиратское, получить от него травму можно наверное только если уже на нервах и ищешь чем бы травмироваться

Форт, это, фактически, ассемблер для форт-мащины. На дохлых бытовых компах типа Микрошы он позволял писать код более-менее по-человечески делать для себя DSL и так далее.


Но, он заставлял думать о стеке. Мне вообще непонятно зачем он сейчас нужен.


: Stars CREATE , DOES> @ 0 DO ." *" LOOP ;
5 Stars Cognac
Cognac

Ееее я почти с первого раза это написал!

FORTH это полноценный язык программирования, он заставляет думать о стеке, так же как Java заставляет думать об объектах или Erlang/Go о процессах, нужен он для все тогоже — для написания программ теми кто умеет на нем писать, а то что позволяет делать DSL дак получается время обогнал и сейчас это тренд

DSL, в котором нужно постоянно, мать его, думать о стеке. Постоянно. Во всех известных мне языках программирования — к которым применимо понятие локальных переменных — можно заводить локальные переменные функции и не думать о том, в каком именно порядке они лягут в итоге на стек. Но только не в Forth.


А ещё в нём есть тяжкое наследие самой первой платформы, для которой он был сделан: есть только 16-битные числа, а числа с большей битностью как бы и есть, но занимают по две ячейки стека. И у набора слов вроде DUP, DROP, SWAP и ROT есть братья-близнецы DUP2, DROP2, SWAP2 и ROT2. Очень удобно, да. /s

как ни странно во всех языках надо о чем то думать постоянно и в каждом свое, если надо думать о стеке, то это не самое ужасное и как и везде это дело практики и опыта… JVM это чисто стековая машина например и через кучу вещей программиста разгружают от мыслей о стеке нагружая компилятор, но за счет этого появляются другие проблемы и в то время как в FORTH не проблема создать самому себе синтаксический сахар под себя, в Java надо ждать пока сахар будет реализован производителем компилятора
Локальные переменные появились ещё в стандарте 94-года.
Наличие стеков (в классике их два) в Форт позволяет позволяет бесшовно пропускать данные через цепочку слов, не плодить локальные переменные с коротким сроком жизни (для передачи между словами), и, кроме того, немного их кэшировать в рамках стек(а)|(ов)… При этом, уменьшается и листинг программы.

P.S. Хочется добавить каких то механизмов по «автоматическому» управлению и стеками и его синтаксическому оформлению — ничем не возброняется. Кто хотел, тот и ООП в Форт сделал и много чего ещё.
И, да Форт несколько иной язык программирования и кем то «патологически» не понимаемый по возможностям его применения в практике решения разных задач.

Forth хорошо применим для исследовательских задач, и например в робототехнике…
Как пример: Forth for Artificial Intelligence in Robots
или например, как гибкий уровень хранения каких то моделей т.к. оперирует только базовым понятием СЛОВА, а всё остальное наполнение и построение модели на откупе создателя.

Кстати, на привычке понимания привычного синтаксиса классики программирования на классических языках
«многие» «ломаются», при попытке использования Форт, как инструментария. :) Форт просто ни в каких аспектах не ограничивает мышление при программировании какой то задачи. (но кому то это то и сложно осознать)

И, да стек не единственный элемент Forth языка, чтобы его можно было отнести к понятию — Форт-системы.
Банальность, но забивать микроскопом гвозди — ещё та затея не понимая возможностей микроскопа.

Следующий комментарий смогу написать через сутки от публикации этого. :)
VARIABLE входит и в стандарт 83го года
Наличие стеков (в классике их два) в Форт позволяет позволяет бесшовно пропускать данные через цепочку слов, не плодить локальные переменные с коротким сроком жизни (для передачи между словами)

Это да. Вот только чтобы в ней разобраться надо понять что делают слова.


word1 word2 word3

Сравните по семантике с


function1 |> finction2 |> function3

или


method1().method2().method3()

или


function3(function2(function1))

P.S. Хочется добавить каких то механизмов по «автоматическому» управлению и стеками и его синтаксическому оформлению — ничем не возбраняется. Кто хотел, тот и ООП в Форт сделал и много чего ещё.

Мне хочется свои задачи решать, а не писать себе язык, потом для него инструменты.

Объекты мапятся на предметную область более прямо чем стек. Стек это отдельная хрень со своим состоянием, которую очень легко испортить.


Сравните


мама.мыла(раму) мама.мыла(стол) и мама ДУП раму мыла стол мыла


Во втором случае надо думать больше, и помнить что именно сейчас лежит в стеке

Во втором случае надо думать больше, и помнить что именно сейчас лежит в стеке

Это не сложнее, чем помнить приоритет операций.

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


А еще в случае ошибки не сразу ясно где она.


Принято писать комментарии про порядок параметров слова, но инструменты соответствие количества параметров и типов не проверяют.


В-общем, мне не очень понятно зачем на этом делать что-то, кроме зобби программирования.


Хотя идея красивая

для тех кто не может в голове держать несколько элементов на стеке и их порядок, есть специальное слово VARIABLE для определения глобальной переменной и можно тогда уж работать с переменными
для определения глобальной переменной

глобальной

Мда, просто невиданный прогресс.

ну дак сейчас на фоне лямбд и реактивщины и в повседневных языках нешибко переменные определяют, так что те кто мог держать в уме состояние стека — будут более востребованы, чем те кто без переменных не может писать
НЛО прилетело и опубликовало эту надпись здесь

В лямбдах либо явные параметры которые то же самое что и переменные с точки зрения явности зависимости либо картинг, причем с поддержкой типов. Причем ide и типы подсказывают и проверяют.


Не надо следить за состоянием чего-то. Ну может в джаваскрипте каком-то но там ошибка будет раньше и чмтаемее

Ну да, как тут не вспомнить классику из книг про ООП о том что лучше всего предметную область описывать объектами. Правда потом оказывается что объекты из языков ООП ложаться на реальный мир хорошо только в сферическом ООП в вакууме.

На самом деле основная претензия к ABAP — дедовский синтаксис из кобола (который потехоньку уходит в прошлое с новыми релизами), хотя большинство тех же ФП языков страдают тем же.


Что касается IDE — сейчас все стало значительно лучше, чем было лет 5 назад, т.к. у языка появилась поддержка в эклипсе, который хоть и морально устарел, но на порядок лучше того редактора, который есть в самом SAP.


А так, если не обращать внимание на синтаксис (а со временем такие вещи перестаешь замечать, просто думаешь о функционале), то ABAP — лучший язык для работы с табличными данными как таковыми, что я видел. Действительно очень хорош для своей области, но не без недостатков, конечно.

Можете привести пример удобства работы с табличными данными в ABAP? Что в нем есть, чего нет в языках общего назначения?

Да много чего, на самом деле. Если помнить, что таблица в ABAP — это массив структур, в них есть:


  • удобный механизм сортировок (практически как в SQL, даже более функциональный);
  • создание индексов для таблиц в приложении, и работа по ключам этих индексов (похоже на SQL, только в рантайме и с указанием конкретного индекса);
  • достаточно удобные циклы по таблицам, со встроенными группировками (то есть можно делать цикл в цикле по сложному условию, это встроено в синтаксис);
  • специальный тип (mesh) для древовидных структур данных, где каждая нода — таблица, и различные переходы между нодами по условиям и по путям (в цикле или без);
  • несколько типов таблиц (простая (индексный доступ), сортированная (доступ по первичному ключу), хешированная (доступ по ключу), + для первых двух можно строить индекс по вторичному ключу);
  • механизмы агрегации, упрощающие подсчет агрегатов по всей структуре строки, не по одному полю;
  • в целом таблица и структура (строка) — базовые типы в абапе, и на них много чего построено.
  • бонус: недавно завезли возможность выполнения SQL над локальными данными силами сервера приложений.

Может звучать не так уж впечатляюще, но для приложений, очень активно использующих данные из БД, это очень и очень полезный функционал. В других языках мне этого часто очень не хватает.

Но что поначалу удивляет, так это то, что таблица может не содержать строки заголовков. Да и вообще порой некоторые приемы наработанные в SQL вдруг оказываются неприменимы. Увы, сходу примеры привести не смогу.

А я вот сильно удивился, когда увидел интерфейс rfc-функции для передачи бинарных данных: таблица с длиной строки 1022 байта. Почему нельзя передать файл целиком, не дробя, я так и не понял.) В самом abap работа с бинариками также происходит? Или есть байтовые массивы или потоки (которые стримы)?

Можно и blob в базе хранить и работать с ним. Другое дело, что с бинарями в абапе крайне редко приходится работать, но инструментарий есть всякий.

Фотографии, документы — информация, которую часто надо хранить в ERP. Да их не надо обрабатывать, но удобный экспорт-импорт необходим. Какие есть альтернативы таблице в sap? Хотелось бы конкретики.)

Есть для и этого решения, но лично я с этим не работал, поэтому не могу сказать, насколько это хуже/лучше какого-нибудь S3 :)

Это отдельный продукт. Мне же надо всего лишь фоточки для hr передавать.)

Спасибо за ликбез. Выглядит интересно, но действительно ничего экстраординарного. На других платформах данную функцональность можно получить с помощью библиотек. Например, для C# — Linq to Objects, для Python — pandas. Так что не могу согласиться с тем, что ABAP лучший язык для работы с данными.)

Вопрос не в функционале, а то, что это уже встроено в синтаксис. Можно и на си такое же реализовать, но чисто работать с этим будет очень многословно и неудобно. А тут под это уже все заточено из коробки, вот и все.

многословно и неудобно

var users = new List<User>()
{
    new User { Name = "Tom", Age = 33 },
    new User { Name = "Bob", Age = 30 },
    new User { Name = "Tom", Age = 21 },
    new User { Name = "Sam", Age = 43 }
};
var sortedUsers = users.OrderBy(u => u.Name);

Можно пример сортировки на abap?

SORT users BY name.

В целом базовый функционал примерно такой же, как в SQL:


SORT itab BY col1 ASCENDING col2 DESCENDING.

Хотите полный функионал — смотрите доки.


Ради примера, вот кусочек более сложной динамической сортировки оттуда же:


  SORT itab BY VALUE abap_sortorder_tab(
       ( name       = 'TABLE_LINE'
         descending = SWITCH #( direction
           WHEN 'UP'   THEN ' '
           WHEN 'DOWN' THEN 'X'
           ELSE THROW cx_illegal_direction( ) )
         astext     = 'X ' ) ).

Спасибо за доки. Но в любом современном языке будет все также кратко.

Ну вот сейчас пишу на Go, и там такого даже рядом нет :)

Это язык системного уровня, а никак не язык для написания бизнес логики. На нем хорошо сетевые сервисы и ситемные утилиты писать. При всем этом "golang linq" гуглится на раз.

И тем не менее бизнес-логику на нем тоже пишут.


По поводу go-linq — нужно смотреть бенчмарки, есть предположение, что из-за рефлексии он будет очень медленный. Но спасибо, интересное решение.

будет очень медленный

Надо тестировать. И решить что выбрать: либо удобство, либо скорость.)

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

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

Rust

У каждого свои критерии нормальности.)

смешно.
НЛО прилетело и опубликовало эту надпись здесь

По вложенному полю не умеет, насколько помню. Но через вариант в конце комментария с примерами можно что-то придумать.


Статически гарантировать нельзя. Можно заведомо построить таблицу с заданным условием (чтобы были только такие или такие поля), но это уже чисто на плечах разработчика (что довольно плохое решение, протому что код в абапе имеет свойство стихийно меняться разными людьми и разными компаниями на протяжении жизни проекта).

Можно не соглашаться, если есть выбор ;-)
А когда выбора нет, то можно либо соглашаться работать либо искать другую работу. Я краем уха слышал, что кто-то где-то пишет на java для sap, но не в моем случае точно. Я в полном смысле к abap'ерам не отношусь. Так, иногда возникает необходимость что-то подправить.

Так я и пытаюсь понять, ради чего люди страдают? Или может наоборот получают удовольствие? Для меня лично программа на abap выглядит как текст на литературном английском: буквы все знакомые, но глазу зацепится не за что.) Хотелось хотя бы сигнатуры методов научиться быстро читать.)

Откройте какой-нибудь опенсорс проект на абапе и почитайте.


Синтаксис мб непривычный для тех, кто на сиподобных сидит, но сам язык по сути от джавы не сильно отличается.


Из-за самого языка никто не страдает, страдают только из-за закрытости инфраструктуры SAP.

опенсорс проект на абапе

У меня шаблоны рвутся.) Где такие найти? И как их запустить?


Дело не в сиподобном синтаксисе. С тем же питоном таких проблем не возникает.

Да чему тут рваться? Такое ощущение что вы на разных языках говорите. ABAP — внутренний язык SAP, отдельно от SAP нигде не используется и все опенсорс программы используются там же. Соответственно, если ваша компания использует например SAP ERP, то никуда вы от abap не денетесь. Исключением может быть разве что фронтенд для всяких порталов, форумов и прочего UI, но точно сказать не могу.

В том и дело, что от abap есть куда дется. Но приходится принимать оттуда задачи с формулировкой "не реализуемо" или "слишком дорого".)


Так где найти открытый проект на abap? Мне чисто порж… посмотреть.)

Да все на абапе реализуемо, как и на любом другом языке. Мы делали тул для автоматизации регрессионного тестирования, который запускал скрипты на питоне с тестами на селениуме, и потом все это забирал обратно в сап и обрабатывал (например).


Дорого — да, потому что абап разработка — это обычно не работа с нуля, а доработка того, что поставляется самим сапом, и какие-то большие велосипеды проще и быстрее выйдет писать тупо вне экосистемы сап и общаться с сапом по сети. Такова специфика.


Опенсорс — это какие-то либы и подобные инструменты. Проекта с "боевым" кодом вы не найдете, потому что это энтерпрайзный код, который ни одна контора не разрешит опенсорсить.

Понятно, что все реализуемо, вопрос каких сил и средств это потребовало? Какая задача решалась непосредственно на abap? Запуск внешнего скрипта и закачка файлов?


Дорого не потому, что доработка, а потому что просто дорого, за любой чих надо платить, либо чихать в другую сторону.)


Думаю, что даже при наличии разрешения за пределами конкретной конторы энтерпрайзный код никому не будет нужен, так как реализует специфику конкретного предприятия.

Все, кроме непосредственно скриптов тестов и обвязки было на абапе. Портал, выборка тестовых данных, формирование кейсов, управление запуском, отчетность.


Любой энтерпрайзный код никому не нужен за пределами предприятия, это не новость.

Извините за нескромный вопрос, вы делали какой-то коробочный продукт для сапа или реализовывали пожелания заказчика при внедрении?

Второе. Первым непосредственно занимается сам SAP (+партнерские решение), основная масса же — внедрения этих продуктов и их поддержка.

Запустить просто так не получится. Либо иметь под рукой SAP, либо зарегистрировать себе демо акк SAP Cloud Platform.


Опенсорс проекты — посмотрите тут, только те, что посвежее.

Спасибо, положил в закладки. Но надеюсь, что не пригодится.)

Какие ФП языки страдают коболовским синтаксисом? Как раз там синтаксис обычно очень лаконичен, так как набор конструкций сокращен, по сравнению с императивными языками.

Не коболовским, а дедовским

НЛО прилетело и опубликовало эту надпись здесь
По прологу у нас был курс в университете, потом часть даже курсовые писала несложные. Необычный язык, тоже понравился тем, что вроде как само работает при описание предметной области, можно из условий решение получить и из решения условия. Но мозг поломал сначала, чтобы перестроиться от привычных языков, конечно.
язык простейший, весь синтаксис в целом ":-,;[]|()", но народ привыкший к императивному, ломает себе мозг когда надо описать компьютеру мир в котором он будет принимать решения
Я писал на Форте с WinAPI. Ничего такого уж страшного.
А статью про то как такое делать не напишете?
(всегда мечтал изучить Forth)
тогда проще всего взять ту самую книгу Лео Броуди, которая травмировала одного из интервьюируемых, её русский перевод вполне нормально сделан, называется «Начальный курс программирования на языке ФОРТ», а если хочется более адвансед то книга академика Баранова «ФОРТ и его реализации»
Спасибо!
На самом деле там не было ничего хитрого. Вызовы WinAPI из dll и удобные обертки поверх них. Я еще приделал туда упаковщик виджетов, который располагал их в окне по декларативному описанию.

Но я бы не сказал, что у Форта были на такой задаче какие-то особые преимущества. Писать было так же неудобно, как и на С. Особенно на Windows 95, когда любая серьезная ошибка портила систему и нужно было перезагружаться.

Писать под браузеры при всей из запутанности куда приятнее.
моим первым языком, за программирование на котором мне платили деньги, был LISP, дело было в среде AutoCAD. По смутным воспоминаниям, язык мне нравился, и на тех кого пугали скобки, я смотрел с удивлением (равно как позже мне очень зашёл Objective-C. хз, наверное тянет меня в эту сторону :)
Единственно что не очень было, то что интерфейс нужно было писать вручную на отдельном языке DCL и подключать своеобразно… там три языка нужно было одновременно вроде… После на C# переехал как в новую реальность — всё же не ценим мы удобство и комфорт Visual Studio, как должное воспринимаем…
То самое, что мы заслужили на Хабре, а также рубрика «Высокопрофессиональное ИТ»: когда заметка о кодинге под SAP идет с тэгами «Ненормальное программирование» и «Старое железо».

#даннинг-крюгер

Если уж затронули ABAP и X++, то почему обошли стороной 1С? Как человек, который сталкивался и с абапом и с иксами, могу сказать, что 1с просто самый неудобный из них.

Из-за того, что часто раскладку переключать приходится?

А что не так с 1С? Это же VBA перевели, разве что точку с запятой добавили. Ну и порог вхождения был бы не такой низкий, будь вы правы.

Операции, мать их, сравнения! А ключевые слова языка и имена переменных — кириллические. Раскладка.

Отмечусь как писатель на Х++.
Язык не мертв, используется в текущих вершиях MS Dynamics 365 for Finance and Operations.
Раньше всё было действительно плохо, подсветку синтаксиса нам выдали в 2010-м, а в 2015-м стало можно фигачить прямо в Visual Studio. Правда в 2020-м так и сидим в VS2015 :) но последние релизы уже поддерживают VS2017

Что-то программисты совсем изнежились. И код нечитаем, и язык плохой, и поддержки нет… Проблема не в языке и коде, а проблема в нас, в человеках. Получили как-то С код от заказчика, функция main с кейсом на 5000строк, 19 вложенных свичей и более ста глобальных переменных с именами ал-я a1, a2, tmp1, tmp2, tmp3 и тп. Чтобы что-то сделать надо проинициализировать магическими числами кучу переменных, тогда пара десятков тредов работающих в бекграунде сделают что-нибудь. И ничего травм не было, посмеялись, даже частично заставили работать… и выкинули. :)

Забавная статья. Пишу на X++ и немного на С#, и когда приходится переходить на С#, ощущения прямо зеркальные Филу, то что на X++ делается «мышкой» прямо из коробки(организация пользовательского интерфейса, проектирование и работа с БД), на С# совершенно не продумано, требует кучи бойлерплейт кода и проработки каждого момента с изобретением велосипедов.
Или теже records которые появились только в C#9, в X++ были изначально. Хотя конечно по кол-ву возможных вариантов использования и сложности C# впереди
Наверное все же дело понимании каждого языка:)
Пишу на Clarion. Для бизнес-приложений синтаксис очень удобен. Все то, что выше про ABAP написано, можно также легко сделать и в нём. Жаль, десктоп сейчас мало кому нужен
Вопрос про ABAP: а на какую ЗП сейчас миддл может рассчитывать?

Когда работал в одном холдинге — в 2008 году до кризиса программистов под SAP (ABAP, модули не знаю) нанимали, за 250-300к в среднем. В 2008 году!
А сейчас гуглёж выдал вилку 130-200к.
Действительно всё настолько хуже стало или просто узкая тема, с ходу адекватную ЗП не нагуглишь?
НЛО прилетело и опубликовало эту надпись здесь
Активно использую FORTH в ряде коммерческих проектов. Forth-машина своей разработки. Не во всем придерживался стандартов. Например у меня нативная поддержка чисел с плавающей точкой, другой принцип файловых операций. Forth используется не как самостоятельный язык программирования (сам проект на С++), а скорее как скриптовой язык. Структура Forth машины позволяет динамически создавать и подгружать модули. Они компилируются в шитый код и в дальнейшем работают быстро. Forth — это средство для создания проблемно ориентированных языков программирования. Очень удобно для написания систем автоматизации. Только синтаксис языка непривычен для программиста, привыкшего к С++ или Java.

В форте стековой машиной создается дополнительная ненужная ментальная нагрузка на программиста. Вы рассматривали использование других скриптовых языков типа lua?

дополнительная ненужная ментальная нагрузка на программист

Несущественная.

у тех кто на стековых языках не писал ничего существенного, часто увренность что работа со стеком это сложно и запутаешься
Ментальная нагрузка только с непривычки. Проекты о которых говорю уходят корнями в начало 2000. Тогда использование Forth было оправдано. В новых проектах используется lua.
здесь не хватает языка программирования 1С: Бухгалтерия…
… Язык X++. Это внутренний ЯП Microsoft, который они сделали..

Этот язык сделали датские братья Дамгаард из Damgaard Company в 1998.
Очень странно что ABAP попал в ненормальное программирование.
На мой взгляд — это лучший язык для решения бизнес-задач.
Дело не только в языке, но и в самой платформе. То что на C# или Java придется делать неделями — на ABAP сделаешь за день.

А про «убогость» инструментов разработчика — ну для меня InteliJ IDEA убогий или Eclipse. Тут чистая вкусовщина.

Ну например, как Вам — не нужно писать юнит-тесты на компоненты разработки — платформа проверяет исходный код, интерфейсы, SQL, API для сервисов на соответствие между определением и обработчиком. И не даст такой код запустить автоматически и перенести его на другой сервер.

Или встроенный инструмент CI/CD из коробки — когда можно связать ландшафт разработки в течении 10 минут и начинать проект сразу после startup-meeting.

В общем, я реализую проекты на C# (.net и core 2.x), Java EE (FP) (от 1.8 до 15), C/C++, PHP, ABAP/4 (от 4.7 до S/4), JS/TS (от создания UI-Frameworks до полноценных решений на AngularJS/React) и мне есть с чем сравнивать. Могу сказать следующее — если нужно быстро реализовать бизнес-процесс, группу бизнес-процессов — то при наличии SAP Netweaver AS — я выберу именно эту платформу. Остальные решения — или вынесение UI в DMZ (например на Node.JS+nginx) или библиотеки расширения и интеграции для SAP AS.

Как не странно это и дешевле и быстрее и поддержка лучше и стабильность выше.

А для «модных» разрабов добавлю — наконец связка Kuber+Docker начала приближаться по функциональности к возможностям SAP Application Server.

А для J2EE выберу лучше или Websphere или WildFly )))
О чем спор, «братья по разуму»? Вот тут нашел пример, вроде на форте. На чем быстрее доехать, на том и едут. Если задача в скорости, а не в количестве багажа. Или безопасности в дороге.
Заменить… доехать едут… на программировать программируют в предыдущем абзаце.
Пример 5 выполнение музыкального нажатия клавиш.

\ начало текста

\ Выполнение музыкального нажатия клавиш

\ подключение функций системы для формирования звуковых колебаний, т.е. генерации сигналов.

WINAPI: MessageBeep USER32.DLL ( пищание системного динамика )

WINAPI: Beep KERNEL32.DLL ( ФУНКЦИЯ т-МС F-ГЦ — )

: ZWUK ( Т-мс F-гц — ) Beep DROP;

DECIMAL

: MAIN ( основное слово выполняется постоянно в цикле, а для выхода останов до нажатия клавиши на клавиатуре )

CR S" Для выхода из программы нажать клавишу ПРОБЕЛЛ, для продолжения любую другую " ANSI>OEM TYPE

1 ( K — )

BEGIN

0x10 * 100 SWAP

2DUP.. ZWUK

KEY DUP 0x20 = UNTIL ( ПРОВЕРКА НАЖАТИЯ КЛАВИШИ, ЕСЛИ НАЖАЛИ 1 ТО КОД СОВПАЛ И ВЫХОДИМ )

;

\ подготавливаем переменные и текст программы записываем в исполняемый файл.

0 TO SPF-INIT? ( в переменную записываем код 0 – означает что инициализация выполняется )

' NOOP MAINX! ( в переменную записываем адрес выхода )

' MAIN TO ( в переменную записываем старт программы со слова MAIN )

S" test2.exe" SAVE ( сохраняем файл исполнения с именем test2.exe )

BYE ( выходим из режима редактирования и компиляция, т.е. все бай-бай )

\ текст программы окончен.

Пример 6 при нажатии клавиш перейти и открыть заданные web страницы.

\ начало текста

\ При нажатии клавиш перейти — открыть заданные web страницы

5 CONSTANT SW_SHOW

WINAPI: ShellExecuteA shell32.dll

: START_link_clik_V2 ( An n — PZout — выход да или нет )

\ на входе адр выполнения сайта

DROP

SW_SHOW ( =5 )

0 0 ( An K1 K2 K3 — ) 3 ROLL

( K1 K2 K3 An — )

S" open" DROP 0 ShellExecuteA ( pz- — )

;

: START_S ( An n — )

START_link_clik_V2 ( An n — PZout — выход да или нет ) DROP

;

: ST1 S" www.yandex.ru" START_S ( An n — );

: ST2 S" www.rambler.ru" START_S ( An n — );

: ST3 S" te.sibsutis.ru" START_S ( An n — );

: MAIN ( основное слово выполняется постоянно в цикле, а для выхода останов до нажатия клавиши на клавиатуре )

CR S" Для выхода из программы нажать клавишу ESC, для продолжения любую другую " ANSI>OEM TYPE

CR S" клавиша 1 — перейти на yandex " ANSI>OEM TYPE

CR S" клавиша 2 — перейти на rambler " ANSI>OEM TYPE

CR S" клавиша 3 — перейти сайт кафедры ТЭ СибГУТИ " ANSI>OEM TYPE

CR

0

BEGIN

DUP [CHAR] 1 = IF ST1 THEN

DUP [CHAR] 2 = IF ST2 THEN

DUP [CHAR] 3 = IF ST3 THEN

DROP

KEY DUP 0x1B = UNTIL ( ПРОВЕРКА НАЖАТИЯ КЛАВИШИ, ЕСЛИ НАЖАЛИ 1 ТО КОД СОВПАЛ И ВЫХОДИМ )

;

\ подготавливаем переменные и текст программы записываем в исполняемый файл.

0 TO SPF-INIT? ( в переменную записываем код 0 – означает что инициализация выполняется )

' NOOP MAINX! ( в переменную записываем адрес выхода )

' MAIN TO ( в переменную записываем старт программы со слова MAIN )

S" test2.exe" SAVE ( сохраняем файл исполнения с именем test2.exe )

BYE ( выходим из режима редактирования и компиляция, т.е. все бай-бай )

\ текст программы окончен.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации