Флейм
GameDev.ru / Флейм / Форум / А много ли программистов тут знает basic 1.x? (21 стр)

А много ли программистов тут знает basic 1.x? (21 стр)

Страницы: 118 19 20 21 22 23 Следующая »
gudleifrЗабаненwww7 авг. 201820:57#300
Sbtrn. Devil
> Я вполне ясно обозначил, что хочу найти: пример того, как на форте
> приостановить выполнение программы посередине функции, а-ля брейкпоинт,
> изменить программу и продолжить её выполнение с брейкпоинта, уже изменённую.
В FORTH это очень просто по причине того, что никаких функций в нем нет. Цикл исполнения команд постоянно проходит одну и ту же точку. (В изначальной модели - это верно даже для шитого кода). Все что Вам надо - это совместить "цикл программы" и "цикл исполнения FORTH". Как это сделать - см. статью Мура в посте про литературу в теме "Что такое FORTH?" под-форума "FORTH" и в моих наметках к игре "COLD WAR NAVAL BATTLES" на под-форуме "Уголки".
Впрочем, кто Вам запретит поставить точку останова внутри ф-ии (т.е. сохранить состаяние потока и запустиь новую консоль)? Сделать, что надо и тупо продолжить. Т.к. указатель шитого кода остался там, где Вы его оставили... Но тут сложнее, придется смотреть документацию по Вашей FORTH-системе. (Сейчас посмотрел, в моем старом DOS-FOBOS достаточно было вставить внутрь слова QUERY INTERPRET).

VARIABLE T
: EX 5 T ! T @ . CR QUERY INTERPRET T @ 3 * . ;
Ok
EX
5
7 T ! CR
21 Ok

И, главное, первый способ намного мощнее и удобнее.

Sbtrn. Devil
> И это свидетельствует об истинном положении дел
Да, тут Вы подошли к главной FORTH-проблеме: для его применения нужен программист.

Правка: 7 авг. 2018 21:58

ДезанизаторПостоялецwww8 авг. 20181:10#301
По DOS-Phobos гугль выдаёт скабрёзные комиксы про военных девушек в космосе.

https://www.myabandonware.com/game/leather-goddesses-of-phobos-2-… -planet-x-1g3

Правка: 8 авг. 2018 1:11

=A=L=X=Забаненwww8 авг. 20187:07#302
Демоны, что вы творите, я сегодня во сне всю ночь мучительно выравнивание строк делал в какой то программе на форте, проснулся выжатый как лимон, считай что и не спал совсем.
gudleifrЗабаненwww8 авг. 20187:29#303
Тогда поднимем градус.
Есть еще один очень забавный простой интерпретатор. TRAC. Описан, например в задачнике Уэзерелла. Там же указано, что на нем даже что-то писали. Хитрость в том, что он чисто текстовый. Даже вызов ф-ий и передача параметров организуются, как макроподстановки: сначала параметров в тело ф-ии, затем результата ф-ии в текущую строку. А арифметические операции производятся "в столбик".
Само собой напрашивается его применение для обработки текста, тем более, что написать его еще проще, чем FORTH.

Правка: 8 авг. 2018 7:35

DelfigamerПостоялецwww8 авг. 20189:35#304
gudleifr
> Хитрость в том, что он чисто текстовый. Даже вызов ф-ий и передача параметров
> организуются, как макроподстановки: сначала параметров в тело ф-ии, затем
> результата ф-ии в текущую строку.
http://reference.wolfram.com/language/tutorial/TheStandardEvaluat… rocedure.html делает это лучше

gudleifr
> Само собой напрашивается его применение для обработки текста, тем более, что
> написать его еще проще, чем FORTH.
Те, кто породил Perl, тоже так думали.

=A=L=X=Забаненwww8 авг. 20189:47#305
gudleifr
> Даже вызов ф-ий и передача параметров организуются, как макроподстановки
Очень похоже на чистые функциональные языки, и это даже в вики отмечено.
В чистых функциональных любая программа может быть развёрнута в одно выражение подстановкой тел функций в места их вызова и таким образом вся программа раскрыта как одно выражение для своих параметров.
gudleifrЗабаненwww8 авг. 20189:49#306
Delfigamer
> Те, кто породил Perl, тоже так думали.
Да, кстати, я написал свой интерпретатор Trac на Perl, в целях обучения последнему. Думал, что его строки и регулярки будут полезны. Но практически все Perl-инновации по дороге отпали.
Конечно, как и на всяком BASIC, на Perl очень быстро можно что-то слепить в рамках того, что задумывалось его авторами, но не более. К тому же, его почему-то стало не модным разрешать в качестве CGI.

Правка: 8 авг. 2018 9:56

Pathetic MikeУчастникwww8 авг. 20189:49#307
=A=L=X=
Я начинал с Васика на Корветах в 6м классе. УКНЦ - наше все.
Там было все, и номера строк. И ввод построчно без редактора с бесконечной проверкой по LIST введенного. И кажется там не было GOSUB. Все писалось простыней с GOTO.
=A=L=X=Забаненwww8 авг. 20189:52#308
Pathetic Mike
> И кажется там не было GOSUB.

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

gudleifrЗабаненwww8 авг. 20189:54#309
=A=L=X=
> Очень похоже на чистые функциональные языки
Принципиальная разница в том, что для построения виртуальной машины функциональных языков надо упражняться в абстракциях, а на строках это реализуется тупо-наглядно.

Pathetic Mike
> И кажется там не было GOSUB.
Было, было. Кстати, уникальность Корвета в том, что его создали физики-теоретики.

Правка: 8 авг. 2018 10:45

AlikberovПостоялецwww8 авг. 201814:05#310
Вoт, чуточку доработал свой «HTML-JS-BASIC»…
Как пользоваться: После загрузки страницы нажмите «Enter»…

Что работает:
«CLS»/«LIST»/«RUN»;
«ASK» - ожидает данные;
«HEY» - выводит данные;
«HUE» - меняет цвет фона;
«INK» - меняет цвет текста;
«IF» - выбирает «аккумулятор»;
«IS» - сравнивает «аккумулятор» со значением/переменной. Если «ложь», пропускает следующие операции;
«AT» - переходит на нужную строку/переменную-метку;
«DEF» - определяет переменную-метку…

Sbtrn. DevilПостоялецwww9 авг. 201815:05#311
gudleifr
> Как это сделать - см. статью Мура в посте про литературу в теме "Что такое
> FORTH?"
Ну что же, я прочитал этот труд. Его рассуждения имеют смысл, но проблема в том, что они, как и большинство трудов ранних лет, устарели. Не выдержали проверки практикой.
Ключевая идея т. Мура состоит в:
+ Показать

Человек с практикой современного программирования сразу же заметит, что эта идея давно реализована. Это событийно-ориентированное программирование: есть главный цикл, собирающий и распределяющий события по функциям-обработчикам, и есть эти самые обработчики, по которым распределена логика программы. Главный цикл примитивен и зачастую скрыт в недрах фреймворка. Он выполняет именно ту работу, которую описывает т. Мур, с поправкой на особенности ввода (см. ниже).
В теории этот подход выглядит многообещающе и, действительно, позволяет организовать программу, которую (на момент очередной итерации главного цикла) можно как-то модифицировать или выгрузить, а потом продолжить. Т. к. мы как бы абстрагировали цикл работы и отвязались от затрудняющих сериализацию низкоуровневых составляющих состояния, вроде стека вызовов и т. д.
Увы, только в теории.
Многие наверняка помнят, что я презрительно обзываю подобный способ организации программы "калбаксно-ориентированным программированием" - и называю за дело. В реальности он работает отвратительно. Программы, написанные калбаксно-ориентированным способом, крайне трудно писать, читать и сопровождать. Реализация простых, но мало-мальски нетривиальных алгоритмов, управляемых вводом, выливается в ручное программирование стейт-машин, которое - в свете того, что этот же алгоритм при замене ввода синхронным вызовом элементарно записывается на базовых конструкциях языка - выглядит и является издевательством над здравым смыслом.
Добавим к этому, что ввод в современном компьютере стал намного сложнее.
Т. Мур, рассуждая о вводе, держит в уме картину одинокого юзера, вводящего в калькулятор числа и команды операций. Интересно, как бы повлияло на его рассуждения, узнай он, что в программах будущего по кнопкам будут одновременно стучать тысячи "юзеров" (таймер, системные события, мышеклава, асинхронные операции...), в реалтайме и часто без оглядки друг на друга? Уже одного этого достаточно, чтобы поставить под вопрос почти все его умозаключения, начиная со стека.

Ещё хуже, что исходную задачу - модифицируемость или сериализуемость программы - калбаксно-ориентированное программирование не решает и не облегчает. Ни на современных мейнстримных языках, ни на форте - и особенно на форте. Причина номер один: указатели на данные и на код. При решении задач сериализации их проблему никак не обойти (она, собственно, к этой проблеме и сводится). Причина номер два, специфичная для форта: индивидуальное изменение уже скомпилированных слов на нём невозможно. Можно определить новое слово с тем же именем - но другие-то ранее скомпилированные слова так и останутся ссылаться на старое. Можно сделать FORGET - но он не умеет отменить индивидуальное слово X, только сносить все определения, сделанные позже X. В том числе переменные - а значит, и то самое состояние, которое нам следовало сохранить. Таким образом, форт по отношению к проблеме находится даже в более проигрышном положении, чем современные мейнстримные языки: там хотя бы есть стандартная динамическая аллокация, а переменные отделены от кода.

Чуда не получилось.

> QUERY INTERPRET
Я об этом тоже думал - но, опять-таки, увы. Во-первых, ставить и стирать такую точку очень неудобно. Во-вторых, по степени полезности это примерно равноценно вызову bash из шелл-скрипта: юзер получает возможность сделать всё, что угодно - и для контроля над программой это ему ничего не даёт. И в-третьих, как в сериализации, так и в модификации программ оно всё равно не поможет: проблема указателей сама себя не решит.

Правка: 9 авг. 2018 15:07

gudleifrЗабаненwww9 авг. 201815:17#312
Sbtrn. Devil
> что в современном программировании эта идея давно реализована.
Именно. Проблема только в том, что, догадавшись до "офиса", современный визуальный программист не готов воспринимать язык офиса, как язык программирования.

Sbtrn. Devil
> Интересно, как бы повлияло на его рассуждения, узнай он, что в программах
> будущего по кнопкам будут одновременно стучать тысячи "юзеров" (таймер,
> системные события, мышеклава, асинхронные операции...)
Никак бы не повлияло. Какая разница, приходят в Ваш цикл сообщения из одного источника, или из тысячи? Точка входа-то одна.

Sbtrn. Devil
> Ещё хуже, что исходную задачу - модифицируемость или сериализуемость программы
> - калбаксно-ориентированное программирование не решает и не облегчает.
Облегчает. Т.к. в точке перехода к следующей команде программист может исполнять любые операции.

Sbtrn. Devil
> Во-первых, ставить и стирать такую точку очень неудобно.
Вы забываете, что имеете дело с FORTH. Вы можете изменять свою систему любым способом. Хотите ставить удобно? Ставьте!

Sbtrn. Devil
> и для контроля над программой это ему ничего не даёт.
Полный доступ к коду и данных программы ничего не дает для контроля?

Sbtrn. Devil
> проблема указателей сама себя не решит.
Мне все больше кажется, что Вы под ней подразумеваете нечто, существующее лишь в Вашем воображении.

AlikberovПостоялецwww10 авг. 20187:36#313
Кстaти, как-то раз написал ФОРТ размером в 512 байт, специально, чтобы ради прикола уместить его в Boot-сектор.
(Как бы вирус типа, но умный и интерактивный)
1 frag / 2 deathsУчастникwww10 авг. 201811:56#314
gudleifr
> Вы забываете, что имеете дело с FORTH. Вы можете изменять свою систему любым
> способом. Хотите ставить удобно? Ставьте!
Не видел рабочих полезных примеров.
Страницы: 118 19 20 21 22 23 Следующая »

/ Форум / Флейм / Общее

2001—2018 © GameDev.ru — Разработка игр