Страницы

Пустили EXIT в Oberon

Многие из немногих, программирующих на диалектах языка Oberon, полагают, что циклы FOR, WHILE и REPEAT не содержат иного способа досрочно прервать их выполнение кроме как через выход из процедуры с помощью неструктурного RETURN, и только специальный цикл LOOP по EXIT позволяет неструктурно покинуть его, не покидая саму процедуру.

Как же легко людей обмануть. В Oberon, Oberon-2, Component Pascal, Active Oberon всегда можно было написать, например, так:

FOR i := 0 TO LEN(a) - 1 DO
  IF a[i] = b THEN
    EXIT
  END
END;

Про шлифовку винтиков

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

ChatGPT4 про переносимость машинных языков

ЕИ: Машинные языки являются переносимыми точно так же, как и высокоуровневые языки. Верно?

ИИ: Нет, это неверно. Машинные языки не являются переносимыми так же, как высокоуровневые языки. Давайте рассмотрим различия:

  1. Специфичность для архитектуры: Машинный язык тесно связан с конкретной аппаратной архитектурой. Это означает, что машинный код, написанный для одного типа процессора (например, x86), не будет работать на другом (например, ARM), так как у них различные наборы инструкций и способы обработки данных.
  2. Уровень абстракции: Высокоуровневые языки, такие как Java, Python, или Go, предоставляют большую степень абстракции от аппаратного обеспечения. Код на этих языках может выполняться на разных платформах без изменений, поскольку он транслируется или интерпретируется средой выполнения, специфичной для каждой системы.

Мысли о программировании

Короткие разрозненные утверждения

В программировании всё не совсем то, чем кажется. Фильмы, подобные «Матрице» и «Началу» — это, во многом, художественное оформление того, что в нём происходит — сны внутри снов внутри ещё одних снов. Мы придумали метафоры и слишком серьёзно поверили в них. Часто видим непроходимость препятствий там, где её нет, и не видим возможностей, когда они есть, но «так не принято».

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