Потому, что он двухрежимный. Можно срелять слабым пучком электронов прямо по человеку. А можно стрелять сильным пучком по железке, чтобы вышибить из неё рентгеновское излучение (в этом режиме электроны не долетают до человека). А вот если пучок настроить, как для рентгена, а железку не подсунуть, то будет того-сь.
Тот, в свою очередь, по данным ряда источников, был написан программистом-самоучкой, который не имел профильного образования.
Можно подумать, если бы у него был сертификат соответствия чему-нибудь полезному, это предотвратило бы подобные ошибки.
Все программисты ошибаются. Этот, судя по тому, что в принципе потянул проект, не самый худший. Проблема в самонадеянности. Даже в стиральной машине есть механический предохранитель, не дающий открыть дверцу во время стирки. А здесь не было.
Состояние гонки, это не обязательно, когда два потока дерутся за одну переменную, которую забыли защитить мьютексом.
В чуть более общем смысле, состояние гонки - это когда результат зависит от порядка вычислений, а порядок ничем не гарантирован.
Этого можно даже и в одном потоке добиться, если он обрабатывает поток событий, которые могут приходить в разном порядке, по независящим от программы причинам, приводя в итоге к разному результату.
В тривиальном случает, типа забытого мьютекса, Rust, неверное, поможет. В менее тривиальном случае тут логическая ошибка, и нет, увы, Rust не поможет.
Мне не нравится подход C++, в котором std::string это такая сишная структура, обмазанная в три слоя темплейтами, которые делают вид, что это такой строковый тип.
Компилятор реально видит сишную структуру. Отладчик видит сишную структуру. А человек видит строку, и это обман, потому что реально там никакой строки нет, а есть сложная сишная структура.
Иметь в языке хотя бы небольшой, но встроенный, набор высокоуровневых абстракций (в Go это строки, map-ы, слайсы, каналы и гороутины) оказывается весьма удобно.
Поэтому я не соглашусь с вами, что это провал разработчиков языка.
Ну, если плохо писать, плохо и получится. Не надо игнорировать ошибки, отправлять гороутинки в свободное плавание и забывать закрывать файлы. Последнюю претензию особенно странно слышать от сишника. В C все то же самое, только без defer.
Я сишник, мне комфортно с Go. Во-первых, как сишнику, мне очень понятны все эти фокусы с append-ом, который может реаллоцировать память, а может и не. Во-вторых, язык простой, в духе Си. С понятной и прозрачной семантикой. С исправленными проблемами Си (например, отсутствие неявных преобразований между многочисленными сишными int-ами). Контроля Go даёт достаточно и позволяет делать интересные вещи. Например, использовать библиотечный http или архиватор с самодельной сущностью, которая не является сокетом или файлом, но реализует соответствующие интерфейсы.
Почему? А вдруг, одни пары простых будут давать меньшую сумму, чем наше число, а другие - большую, а точно никакая пара не попадёт?
Жесть, как она есть.
Интересно, это троллинг или вы правда не понимаете?
Каждое чётное число можно представить в виде суммы пары нечетных чисел. Например:
Но не во всех таких парах оба слагаемых простые.
Гипотеза Гольдбаха заключается в том, что для любого чётного числа хотя бы одна такая пара, в которой оба слагаемых простые, обязательно найдётся.
В программе для PDP-11, которая использовалась в данном случае? Там 64К (килобайта) памяти на всю машину, куда там засовывать движки и библиотеки?
Потому, что он двухрежимный. Можно срелять слабым пучком электронов прямо по человеку. А можно стрелять сильным пучком по железке, чтобы вышибить из неё рентгеновское излучение (в этом режиме электроны не долетают до человека). А вот если пучок настроить, как для рентгена, а железку не подсунуть, то будет того-сь.
Можно подумать, если бы у него был сертификат соответствия чему-нибудь полезному, это предотвратило бы подобные ошибки.
Все программисты ошибаются. Этот, судя по тому, что в принципе потянул проект, не самый худший. Проблема в самонадеянности. Даже в стиральной машине есть механический предохранитель, не дающий открыть дверцу во время стирки. А здесь не было.
Состояние гонки, это не обязательно, когда два потока дерутся за одну переменную, которую забыли защитить мьютексом.
В чуть более общем смысле, состояние гонки - это когда результат зависит от порядка вычислений, а порядок ничем не гарантирован.
Этого можно даже и в одном потоке добиться, если он обрабатывает поток событий, которые могут приходить в разном порядке, по независящим от программы причинам, приводя в итоге к разному результату.
В тривиальном случает, типа забытого мьютекса, Rust, неверное, поможет. В менее тривиальном случае тут логическая ошибка, и нет, увы, Rust не поможет.
Они там находятся комплементарными парами. A всегда связана с G, T - с C. Так что делим количество значений пополам.
Вы так вкусно рассказываете про open source.
Извините за прямой вопрос и не сочтите за грубость, а сами-то вы в нём кто?
Мне не нравится подход C++, в котором
std::stringэто такая сишная структура, обмазанная в три слоя темплейтами, которые делают вид, что это такой строковый тип.Компилятор реально видит сишную структуру. Отладчик видит сишную структуру. А человек видит строку, и это обман, потому что реально там никакой строки нет, а есть сложная сишная структура.
Иметь в языке хотя бы небольшой, но встроенный, набор высокоуровневых абстракций (в Go это строки, map-ы, слайсы, каналы и гороутины) оказывается весьма удобно.
Поэтому я не соглашусь с вами, что это провал разработчиков языка.
Там написано, что в PHP нет GC, и однажды выделенная память никогда не освобождается.
А в спецификации PHP написано, что там есть GC.
Кому верить?
Говорят, когда в автомобилях массово появились ремни безопасности, люди не стали меньше гибнуть на дорогах, они стали быстрее ездить.
То, что некая платформа позволяет замаскировать ошибки, не повод их делать с утроенной энергией.
k8s сам написан на Go, и его самого никто не страхует.
Ну, если плохо писать, плохо и получится. Не надо игнорировать ошибки, отправлять гороутинки в свободное плавание и забывать закрывать файлы. Последнюю претензию особенно странно слышать от сишника. В C все то же самое, только без defer.
И это имеет то достоинство, что компилятор и инструменты понимают, что это такое, а не имеют дело с непонятными им структурами, как в случае C++.
Всегда можете явно позвать
utf8.ValidИли надо, чтобы оно автоматически звалось и паниковало при несоответствии? Лично я бы предпочёл, что оно не.
И меня устраивает, что строка - это immutable массив байтов, и засовывание туда некорректной последовательности, это не UB в стиле C/C++.
Ну вообще-то, умирать не должно ни в PHP ни в Go. Наверное все же проблема не в языке.
Я сишник, мне комфортно с Go. Во-первых, как сишнику, мне очень понятны все эти фокусы с append-ом, который может реаллоцировать память, а может и не. Во-вторых, язык простой, в духе Си. С понятной и прозрачной семантикой. С исправленными проблемами Си (например, отсутствие неявных преобразований между многочисленными сишными int-ами). Контроля Go даёт достаточно и позволяет делать интересные вещи. Например, использовать библиотечный http или архиватор с самодельной сущностью, которая не является сокетом или файлом, но реализует соответствующие интерфейсы.
GC меня не парит.
Боюсь, что если из n вычитать 1, n будет скорее уменьшаться, чем возрастать...
К надёжности - да. Насчет производительности, я в этом совсем не уверен. Зависит от задачи.
Пример с systemd уже привели. Таких сервисов полно. Даже условный d-bus, он особо-то и не нагружен.Ну или CUPS, какая там у него нагрузка?...