Fuzzy, я бы хотел вспомнить, какую первую книгу по программированию я прочитал. Книга, которая навсегда изменила мою жизнь, эти простые и легкие примеры того, как распечатать вывод на консоль с помощью C.
В настоящее время я работаю с языками гораздо более высокого уровня, где они скрывают так много деталей, которые (возможно) действительно имеют значение. Затем сегодня я достиг нового уровня невежественного кода, который многим стоил жизни.
Оформить заказ. Выполните код ниже и угадайте, что с этим может пойти не так?
Вы поняли, что может пойти не так? Нет? Тогда я расскажу вам результат, это все 10
. Не с 0
на 9
, а всего 10
десять раз.
Сравните со следующим кодом на Эликсире ниже:
Приведенный выше код будет печатать от 0
до 10
неупорядоченным образом, как и ожидалось.
Итак, что произойдет, если неопытный программист на Go (я) обнаружит этот код и никогда не получит предупреждения о том, что это будет катастрофой? Разверните его в производственной среде. Но .. почему у тебя нет теста? Пробовали когда-нибудь создать тест из примитивной горутины? Есть история успеха?
Круто, мы можем использовать WaitGroup. Не совсем, этот код предназначен для того, чтобы выстрелить и забыть, давать его как Fork / Join, так и будет неуместно.
Да, а что дальше? Речь об отсутствии прямого доступа к памяти?
Я пришел к выводу, что теперь я предпочитаю работать с языком более высокого уровня, где все эти низкоуровневые и небезопасные детали были скрыты для меня. Следовательно, я могу сосредоточиться на написании продуктивного и неидиоматичного, но безопасного кода.
Я никогда не скажу, что низкоуровневый (системный) язык - это плохо, но он нужен только вам, чтобы создать то, чем он изначально должен был быть. Это из FAQ по Go:
Go родился из-за разочарования существующими языками и средами для системного программирования.
Сравните с Эликсиром:
Эликсир - это динамический функциональный язык, разработанный для создания масштабируемых и поддерживаемых приложений.
Два разных взгляда на то, какова цель языка. Это также отразилось на его инструментах, документации и языковых инструкциях.
Чтобы было больше споров и разглагольствований, я поделюсь фрагментами сопоставимого и минимального исходного кода для запуска Hello Concurrent World.