На wordsandbuttons.online есть обновленная версия этого сообщения: https://wordsandbuttons.online/why_erlang_is_among_the_few_true_computer_languages.html

Представьте, что в вашем доме что-то не так с напором воды. Вам необходимо вызвать сантехника. Говорят, что есть парень, честный, способный, доктор наук по сантехнике, но ... Он плохо говорит по-английски. Он приехал из Таджикистана и свободно говорит только на таджикском. Но так уж получилось, что вы учили таджикский язык в колледже, поэтому говорите, что парня сразу отправляют.

Когда он приезжает, вы описываете проблему (на таджикском языке), и он приступает к работе. Вскоре он находит проблему и пытается сообщить вам, очевидно, ожидая реакции. Но по какой-то причине он не использует таджикский язык, чтобы сообщить об этом, он использует английский язык. Что… Он действительно не знает. Если вы ответите (на таджикском), что не понимаете, он не перейдет на таджикский; он будет только громче повторять ту же фразу.

Что совершенно не помогает наладить диалог.

Никто не знает, почему он постоянно предпочитает отвечать на языке, на котором он плохо говорит, а не на своем собственном. Что вы делаете. Это абсурдно раздражает, но все обстоит именно так. Так было всегда. В основном он говорит на плохом английском, смешанном с профессиональным жаргонизмом и таджикской непристойностью. Выглядит это примерно так:

В функции 'int main ()': 19:16: ошибка: невозможно связать 'std :: ostream {aka std :: basic_ostream ‹char›}' lvalue с 'std :: basic_ostream ‹char› &&' В файле, включенном из / usr / include / c ++ / 4.9 / iostream: 39: 0, из 2: /usr/include/c++/4.9/ostream:602:5: note: инициализация аргумента 1 из 'std :: basic_ostream ‹_CharT, _Traits› & std :: operator ‹

Хорошо, это уже не о сантехнике. На самом деле, дело никогда не было в сантехнике. Речь идет о том, как мы общаемся с машиной. Язык программирования - это то, что мы используем, чтобы сказать ему, что делать, но машина пытается ответить на английском, когда что-то идет не так. Компьютеры плохо говорят по-английски, хотя хорошо умеют работать с формальными языками. И, по-видимому, тот, кто пишет на формальном языке, должен без проблем прочитать его. Не было бы лучше, если бы компилятор или интерпретатор отвечал на том же языке, на котором он получает свои команды?

Почему-то без таджикского сантехника идея кажется не такой уж и приятной.

Пока что единственный язык, который я знаю, который сообщает об ошибках на том же языке, на котором вы пишете код, - это Erlang. Если вы знаете больше, дайте мне знать в разделе комментариев ниже.

Вот простой пример из Программирования на Erlang:

1> Point = {point, 10, 45}.
2> {point, C, C} = Point.
=ERROR REPORT==== 28-Oct-2006::17:17:00 ===
Error in process <0.32.0> with exit value:
{{badmatch,{point,10,45}},[{erl_eval,expr,3}]}

Строка, выделенная жирным шрифтом, - это сообщение об ошибке, остальное - это просто преамбула интерпретатора. Действительно, для обычного читателя это не совсем удобно. Вы должны знать Erlang, чтобы читать его ошибки. Но поскольку вам все еще нужно знать Erlang, чтобы написать код, который их вызывает, это нормально.

Альтернативы намного хуже. При неформальном и нестандартном обмене сообщениями об ошибках вам необходимо знать не только сам язык программирования, но и его Pidgin для сообщений об ошибках. Каждый практикующий C ++ может подтвердить, что чтение сообщений STL - это само по себе искусство. Требуются знания, терпение, решимость и, иногда, хрустальный шар, чтобы сформировать твердое понимание проблемы, о которой сообщают.

Например, приведенное выше сообщение об ошибке гласит: «Извините, я не могу распечатать element для вас, потому что в его типе нет оператора <<».

Обычно язык - это то, на чем вы можете построить диалог. Языки программирования - несчастливое исключение. Исторически было важнее сказать компьютеру, что ему делать, а не наоборот. Когда вы пишете небольшую однопоточную программу, вы можете надеяться, что вообще не будет ошибок, поэтому вам вообще не нужна отчетность. Отчеты об ошибках всегда рассматривались как вспомогательная функция.

Однако Erlang нацелен на построение очень сложных распределенных систем. Ошибки не только вероятнее всего произойдут, но и заложены в самой природе домена. Все, что могло пойти не так, рано или поздно пойдет. И для этого вам лучше иметь приличный язык отчетности.

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

Если вам понравилась эта статья, возможно, вам понравится и моя электронная книга. Он называется "Так вы думаете, что знаете C?" И еще десять коротких эссе по языкам программирования. Это весело, коротко и бесплатно: https://wordsandbuttons.online/SYTYKC.pdf