Fuzzy, я бы хотел вспомнить, какую первую книгу по программированию я прочитал. Книга, которая навсегда изменила мою жизнь, эти простые и легкие примеры того, как распечатать вывод на консоль с помощью C.

В настоящее время я работаю с языками гораздо более высокого уровня, где они скрывают так много деталей, которые (возможно) действительно имеют значение. Затем сегодня я достиг нового уровня невежественного кода, который многим стоил жизни.

Оформить заказ. Выполните код ниже и угадайте, что с этим может пойти не так?

Вы поняли, что может пойти не так? Нет? Тогда я расскажу вам результат, это все 10. Не с 0 на 9, а всего 10 десять раз.

Сравните со следующим кодом на Эликсире ниже:

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

Итак, что произойдет, если неопытный программист на Go (я) обнаружит этот код и никогда не получит предупреждения о том, что это будет катастрофой? Разверните его в производственной среде. Но .. почему у тебя нет теста? Пробовали когда-нибудь создать тест из примитивной горутины? Есть история успеха?

Круто, мы можем использовать WaitGroup. Не совсем, этот код предназначен для того, чтобы выстрелить и забыть, давать его как Fork / Join, так и будет неуместно.

Да, а что дальше? Речь об отсутствии прямого доступа к памяти?

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

Я никогда не скажу, что низкоуровневый (системный) язык - это плохо, но он нужен только вам, чтобы создать то, чем он изначально должен был быть. Это из FAQ по Go:

Зачем вы создаете новый язык?

Go родился из-за разочарования существующими языками и средами для системного программирования.

Сравните с Эликсиром:

Эликсир - это динамический функциональный язык, разработанный для создания масштабируемых и поддерживаемых приложений.

Два разных взгляда на то, какова цель языка. Это также отразилось на его инструментах, документации и языковых инструкциях.

Чтобы было больше споров и разглагольствований, я поделюсь фрагментами сопоставимого и минимального исходного кода для запуска Hello Concurrent World.