Go[править | править код]
Go и Python — кардинально различающиеся языки, тем не менее, они часто сравниваются один с другим из-за общей ниши — бэкэнда веб-приложений. По выражению Джейсона Кинкэйда, Go объединяет «производительность и безопасность компилируемых языков, таких как C++, со скоростью разработки на динамических языках, таких как Python»[136]. В какой-то мере это действительно так: Go изначально разработан как строго статически типизированный компилируемый язык, поддерживающий максимум возможностей динамических языков, при котором ещё можно обеспечить эффективную компиляцию и сохранить производительность компилируемых программ. Общими для обоих языков является использование автоматического управления памятью, наличие встроенных динамических коллекций (массивов и словарей), поддержка срезов, развитый механизм модулей, простой и минималистичный синтаксис. Различий гораздо больше, и не всегда можно однозначно указать, в пользу какого из языков они говорят.
Динамические возможности.
Если Python является полностью динамическим языком и практически любые элементы программы могут меняться во время исполнения, включая конструирование «на лету» новых типов и модификацию существующих, то Go — статический язык с достаточно ограниченными возможностями рефлексии, работающей только в отношении созданных при разработке типов данных. В некоторой мере заменой динамических возможностей в Go является кодогенерация, обеспечиваемая простотой синтаксиса и наличием необходимых инструментов и системных библиотек. Также в версии Go 2.0 планируется добавить поддержку средств обобщённого программирования (generics).
Объектно-ориентированное программирование.
Python построен по идеологии «всё-объект» и имеет множество механизмов ООП, в том числе редких и нетипичных. Gо — вполне типичный модульный процедурный язык программирования, возможности ООП в котором ограничиваются поддержкой интерфейсов и возможностью встраивания структур и интерфейсов. По сути, в Go нет даже полноценного наследования. Поэтому если Python поощряет программирование в ООП-стиле, с построением древовидных зависимостей между классами и активным использованием наследования, то Go ориентирован на компонентный подход: поведение компонентов задаётся интерфейсами, которые могут быть даже не связаны между собой, а реализация интерфейсов размещается в типах-структурах. «Утиная типизация», реализованная в Go, приводит к тому, что между интерфейсами и реализующими их структурами нет даже формальных синтаксических связей.
Do'stlaringiz bilan baham: |