tightback_aa_rig32
Well-Known Member
Я предлагал ему конфетку....и оно просит понять его, наконец - чтобы мы перестали его бояться и научились дружить.
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Я предлагал ему конфетку....и оно просит понять его, наконец - чтобы мы перестали его бояться и научились дружить.
А кстати там в оригинале не было переменных. Может снится безжалостный конечный автомат.В какой форме?
Если снятся команды или переменные, коды или ещё что - это несложно проверить, показывая ребенку это и наблюдая за реакциями.
Вы подняли потрясающе глубокий вопрос о границах программирования, и 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, возможно парсера форта, и я говорю не о типичных нормальных страхах "это сложно", а о вообще непонятно о чём "пугает эта штука почти платонически, неуютно думать об этом".
Знаете на что это похоже? Синестезия или идеастезия. Из-за этого может возникать странно чувственное восприятие компьютеров или какой-нибудь математики, наверное.
Мы знаем, что многие аутогинефилы увлекаются компьютерами. Может это связано.
Аутогинефилия возможно тоже может быть связана с синестезией и нарушением границ восприятия и ассоциаций.
Да.Посмотреть вложение 12139
В магазине сегодня увидел. Явно не только тебе мысли про взрослость приходят.
Не всегда.Получается ты в буквальном смысле и мухи не обидишь? У меня есть такие знакомые.
Бывает, что наоборот!?Не всегда.
В связи с решением Верховного суда Российской Федерации (далее РФ) от 30 ноября 2023 года), движение ЛГБТ* признано экстремистским и запрещена его деятельность на территории РФ. Данное решение суда подлежит немедленному исполнению, исходя из чего на форуме будут приняты следующие меры - аббривеатура ЛГБТ* должна и будет применяться только со звездочкой (она означает иноагента или связанное с экстремизмом движение, которое запрещено в РФ), все ради того чтобы посетители и пользователи этого форума могли ознакомиться с данным запретом. Символика, картинки и атрибутика что связана с ныне запрещенным движением ЛГБТ* запрещены на этом форуме - исходя из решения Верховного суда, о котором было написано ранее - этот пункт внесен как экстренное дополнение к правилам форума части 4 параграфа 12 в настоящее время.
We use essential cookies to make this site work, and optional cookies to enhance your experience.