Почему биткойн написан на C ++?

Что заставило основных разработчиков выбрать C ++ в качестве основного языка программирования для реализации биткойна? Это было из-за их личных предпочтений? Или еще одна причина?

22 голоса | спросил Vincent 5 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 05 Sep 2016 12:50:46 +0300 2016, 12:50:46

2 ответа


26

Самая важная причина в том, что исходная кодовая база Satoshi была написана на C ++. Такая система, как Bitcoin, имеет чрезвычайно высокие требования к согласованности в поведении: все узлы в сети должны принимать и отклонять те же самые блоки, или мы рискуем вилкой. Первый выбор, чтобы избежать ошибок, которые рискуют ввести несогласованность, - это не переписывать код с нуля.

Хотя на всех языках программирования есть недостатки, а C ++ не является исключением, есть разные причины, которые делают его подходящим выбором. Легко упускается из виду, что он обеспечивает очень жесткий контроль над использованием памяти. Многие современные языки (особенно те, которые полагаются на сборку мусора) затрудняют, если не невозможно, рассуждать о жестких ограничениях использования памяти. Поскольку Bitcoin Core является критическим для безопасности приложением, которое напрямую связано с Интернетом, нетривиально гарантировать, что нет возможности инициировать его, чтобы выделять большие объемы памяти, избивать пространство подкачки машины или, что еще хуже, убивать процесс.

Это в дополнение к хорошему балансу между высоким уровнем, где это необходимо, но также и множеством возможностей для оптимизации производительности. Производительность может быть более важной, чем сразу же очевидно, поскольку конвергенция сети основана на быстрой проверке и распространении блоков. Если блоки занимают слишком много времени для проверки по сравнению с частотой их создания, экономические факторы начинают несправедливо выигрывать у более крупных /более быстрых шахтеров (например, атака «Эгоистичный майнинг»). В экстремальных условиях, если блоки будут занимать ~ минуты для проверки, сеть может вообще не сходиться, поскольку узлы просто больше не слышат о блоках.

ответил Pieter Wuille 5 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 05 Sep 2016 14:11:30 +0300 2016, 14:11:30
20

Я дал основной доклад на cppcon 2016 о почти этой точной проблеме. Существует множество причин, по которым C ++ - отличный выбор языка для таких приложений, как биткойн.

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

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

C ++ не имеет времени выполнения, которое останавливает мир или управляет памятью, что позволяет вашему приложению последовательно контролировать это поведение. Перемещение семантики позволяет вам получать объекты, которые ведут себя как значения (a=b; a+=1; не изменяет b), но выполните подобные ссылки (избегаются глубокие копии, за исключением случаев, когда это необходимо).

Умные указатели позволяют избежать затрат на GC без утомительного ручного управления памятью. Шаблоны проектирования, такие как RAII, упрощают обслуживание кода. Метапрограммирование шаблонов облегчает независимость между API и реализациями.

Схема наследования C ++ упрощает проектирование иерархии сложных типов.

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

ответил David Schwartz 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 06 Sep 2016 02:44:20 +0300 2016, 02:44:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132