• Внимание, Премодерацию новичков пока выключаю.

Вот так как-то (Временная тема медведя)

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

Иллюзия границы между командой и программой
Главное открытие здесь: различие между "командой" и "программой" — это не различие в природе действия, а различие в масштабе организации. Forth это просто делает видимым.

Когда вы пишете dir, вы:

Описываете действие
Которое будет выполнено потом
Используя символы, которые интерпретатор понимает
Когда вы пишете 2 2 +, вы делаете ровно то же самое, просто более прямолинейно. Нет никакого фундаментального различия.

Промежуточное состояние и стек — вот в чём суть
Вы совершенно правильно почувствовали что-то важное: 2 2 + и 2 2 2 2 + + отличаются не природой, а сложностью состояния.

Выражение Стек на ходу Промежуточное состояние Природа
2 2 + [2] → [2, 2] → [4] Есть, но минимально Вычисление
2 2 2 2 + + [2] → [2,2] → [2,2,2] → [2,2,2,2] → [2,2,4] → [6] Явное, многоступенчатое Всё ещё вычисление, но видно структуру
2 2 + . 2 2 + . Печать, стек пустой, печать, стек пустой Полное разделение во времени Последовательная программа
Разницы нет, есть только континуум
Вот истина: нет качественного скачка между 2 2 + и программой. Есть континуум:

Простое вычисление (2 2 +) — минимум состояния, один проход
Составное вычисление (2 2 2 2 + +) — более сложное состояние, но всё ещё линейный поток
Цикл или условие 🙂square dup * ; или if ... then) — управление потоком, которое добавляет ветвление
Программа с многопроходностью — состояние, которое сохраняется между отдельными вызовами
Разница не в сущности, а в сложности промежуточного состояния и видимости этого состояния.

Почему Forth это обнажает
В обычных языках:



calculate(2 + 2); // Состояние скрыто в call stack, аргументах, порядке вычислений
В Forth:



2 2 + ! Состояние ВИДНО: вот оно лежит на стеке. Всё прозрачно.
Forth заставляет вас видеть промежуточное состояние, потому что стек — это публичное, видимое место. В других языках это же состояние есть, но оно спрятано в механике вызовов функций.

И последний поворот: зачем всё это нужно?
Ваше замечание указывает на то, что программирование — это не магическая активность, отличная от "просто отправки команд". Это просто:

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

dir просит показать папки → происходит позже.
2 2 + просит сложить → происходит позже (или в REPL — сразу, но код всё равно был описан перед выполнением).
:myword ... ; описывает новую команду → выполнится когда угодно потом.

Forth просто не делает вид, что есть граница. Он честнее.
Отличный вопрос. Вы натыкаетесь на проблему определения.

Может быть, "программирование" — это просто не очень полезная категория?

Если программирование — это "запись инструкций, которые выполняются позже", то Форт подрывает это определение. Потому что в Форте инструкции выполняются сейчас же, прямо когда вы их вводите.

Но если программирование — это просто "управление поведением машины через последовательность команд", то 2 2 2 2 + + — это программирование. Как и dir. Как и cat.

Может быть, разница не в Форте, а в нашем понимании слова?

Мы привыкли думать, что:

  • Командная строка = не программирование (мы говорим машине, что делать сейчас)
  • Код в файле = программирование (мы пишем для будущего)
Но это просто разные способы общения с машиной. И Форт показывает, что разницы-то нет.

Может быть, правильнее называть это всё просто "инструктирование машины"? А разделение на "программирование" и "не программирование" — это артефакт синтаксиса других языков, которые создают видимость разницы?

Что вы думаете — есть ли между dir и 2 2 + фундаментальная разница, или мы просто назвали их по-разному из-за истории?
  • calculate(2 + 2) — выглядит как отдельная вещь, "функция"
  • [1, 2, 3] — выглядит как отдельная вещь, "массив"
  • {key: value} — выглядит как отдельная вещь, "объект"
Скобки дают нам ощущение границ, целостности, обособленности. Мы можем указать на них пальцем и сказать: "Вот это одна вещь".

В Форте границ нет. Есть только:

  • Слова в словаре
  • Стек с данными
  • Выполнение, которое идёт и идёт
2 2 + — это не "выражение", не "отдельная сущность". Это просто часть потока выполнения. Два числа на стеке, потом слово, которое их использует. Нет границ, нет "это отдельно", нет "то отдельно".

Всё сливается в один процесс.

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

А Форт просто показывает правду: есть только вычисление, выполнение, процесс. Отдельных "вещей" нет.
 
Понял что иррационально боюсь очень абстрактных вещей, например Comun Shell, возможно парсера форта, и я говорю не о типичных нормальных страхах "это сложно", а о вообще непонятно о чём "пугает эта штука почти платонически, неуютно думать об этом".
Знаете на что это похоже? Синестезия или идеастезия. Из-за этого может возникать странно чувственное восприятие компьютеров или какой-нибудь математики, наверное.
Мы знаем, что многие аутогинефилы увлекаются компьютерами. Может это связано.
Аутогинефилия возможно тоже может быть связана с синестезией и нарушением границ восприятия и ассоциаций.
 
...так это можно 🙂
Проблема не в них, а зацикливании.
Помните раннего Данте или Уила?
Которые лёжа на диване рассуждали, рассуждали...и здравые, полезные жемчужины тупо были завалены сорри кучей ненужного..
Имхо
Это весь форрум с провоцированием "трёпа" же
 

LGBT*

В связи с решением Верховного суда Российской Федерации (далее РФ) от 30 ноября 2023 года), движение ЛГБТ* признано экстремистским и запрещена его деятельность на территории РФ. Данное решение суда подлежит немедленному исполнению, исходя из чего на форуме будут приняты следующие меры - аббривеатура ЛГБТ* должна и будет применяться только со звездочкой (она означает иноагента или связанное с экстремизмом движение, которое запрещено в РФ), все ради того чтобы посетители и пользователи этого форума могли ознакомиться с данным запретом. Символика, картинки и атрибутика что связана с ныне запрещенным движением ЛГБТ* запрещены на этом форуме - исходя из решения Верховного суда, о котором было написано ранее - этот пункт внесен как экстренное дополнение к правилам форума части 4 параграфа 12 в настоящее время.

Назад
Сверху