В каких случаях трудно различить код и данные?

Говорят, что код - это данные (и наоборот, то есть гомоичные) в Rebol и Red. Кроме того, сказано, что невозможно различить два. Насколько я понимаю, здесь есть 2 случая:

  1. Определить с уверенностью код из смеси кода и данных
  2. Определить с уверенностью данные из смеси кода и данных

смесь кода и данных - мое имя для того, что посторонние обычно называют кодом Rebol, и опытные программисты Rebol говорят, что это данные (кода нет, только данные)

мотивация

Различие кода и данных облегчает некоторые функции в языках программирования. Например, разборка была упомянута (sbcl имеет disassemble функция).

Вопрос

Каковы примеры этих проблемных случаев?

контекст:

из чата 15 марта 2017 года 15:32: (выделение мое)

Дидек: Вы забываете, что в Redbol нет кода, только данные.

Maximvl: ну, для CL это одно и то же, и SBCL выполняет все, вплоть до собственного кода, и поскольку code = data, можно сказать, что данных нет, только код

Это не то же самое в языках Lisp, есть различие между "кодом" и "данными" [в Lisp], так как код должен начинаться с вызова. Redbol не имеет такого ограничения на код, что делает его совсем другим.

также:

Более того, контексты и динамическое связывание делают его более гибким, но в то же время прямой перевод на ассемблерный код низкого уровня, как в вашем примере CL, невозможен.

В сторону: Значит ли это, что Rebol более гомоичен, чем Lisp?

1 ответ

Вот один из них:

[q]

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

Другие вопросы по тегам