В уроке по Python можно прочитать, что оригинальная реализация Python находится на C;
С другой стороны, реализация Python, написанная на C, (...)
Мне очень любопытно, почему Python был написан на C, а не на C ++?
Я хотел бы знать причину этого решения, и ответ должен быть подкреплен историческими ссылками (а не основанными на мнении).
python
c++
history
implementations
Петр Доброгост
источник
источник
Ответы:
Из всего, что я видел, это сочетание практических и исторических причин. (В основном) историческая причина заключается в том, что CPython 1.0 был выпущен в 1989 году. В то время C был недавно стандартизирован. C ++ был почти неизвестен и явно непереносим, потому что почти никто не имел компилятора C ++.
Хотя C ++ сегодня гораздо более широко распространен и легко доступен, для переписывания CPython в подмножество C, совместимого с C ++, потребуется немало усилий. Сама по себе эта работа принесет мало или вообще никакой реальной выгоды.
Это немного похоже на сообщение в блоге Джоэла о том, что начинать заново и делать полное переписывание - это худшая ошибка, которую может совершить софтверная компания. Я бы возразил, указав на переход Microsoft с ядра Windows 3.0 на ядро Windows NT и переход Apple с MacOS 9 на Mac OS / X. Ни один из них не убил компанию, но оба были определенно крупными, дорогостоящими и долгосрочными проектами. Оба также указывают на то, что имеет решающее значение для успеха: достаточно долго поддерживать обе базы кода, чтобы (большинство) пользователи могли переключаться на новую базу кода на досуге, основываясь на (по крайней мере, предполагаемых) преимуществах.
Однако для команды разработчиков размером с Python такие изменения гораздо сложнее. Даже переход с Python 2 на 3 занял совсем немного времени и потребовал аналогичного совпадения. Тем не менее, по крайней мере, в этом случае есть прямые преимущества для изменений, которые не могли бы обеспечить (по крайней мере, сразу) переписывание на C ++ (само по себе).
Разговор Линуса Торвальдса против C ++ был поднят, так что я также упомяну это. Ничто из того, что я видел от Гвидо, не указывает на то, что у него такие сильные негативные чувства по отношению к С ++. О худшем, что я видел, он сказал, что преподавание C ++ часто является катастрофой - но он сразу же сказал, что это в основном потому, что учителя не знают / не знают C ++.
Я также думаю, что хотя можно относительно легко преобразовать большую часть кода C в C ++, для того, чтобы получить значительное реальное преимущество от C ++, требуется не только немного больше переписывания, чем это, но также требуется существенное переобучение большинства вовлеченных разработчиков. Большинство хорошо написанного C ++ существенно отличается от хорошо написанного C тем же. Это не только вопрос об изменении
malloc
вnew
иprintf
кcout
, любой натяжке.источник
Я думаю, что причина, по которой он изначально был написан в ANSI C89, заключается в том, что в то время C ++ был просто неосуществимым выбором, так как имел несовместимость между различными компиляторами и тому подобное. Я имею в виду, что до 2005 года потребовалось разработать спецификацию ABI, которая позволяла бы коду, скомпилированному с одним компилятором, вызывать код, скомпилированный с другим компилятором?
Более интересный вопрос: почему он до сих пор написан на C89?
И есть удивительный ответ: потому что люди на самом деле используют Python на платформах, для которых не существует ни C ++, ни компилятора C99! Когда были объединены оптимизация интерпретатора многопоточного кода Forth, об этом было огромное обсуждение, потому что использовался код (обязательно) вычисляемый,
goto
который не является частью C89. Очевидно, были реальные опасения, что эта функция может быть недоступна на некоторых платформах, на которых сейчас используется Python.То же самое произошло с Unladen Swallow, который использует LLVM, который написан на C ++. Стало совершенно ясно, что требованием для объединения Unladen Swallow в CPython является то, что вы можете скомпилировать его без JIT-компилятора, поскольку существуют платформы, на которых работает Python, для которых не существует компилятора C ++.
Конечно, в настоящее время CPython больше не является единственной реализацией Python. Есть PyPy, который написан на RPython (статически типизированное подмножество Python), Jython на Java, IronPython на C #, Pynie в NQP и PIR и так далее.
источник
Лучший вопрос может быть: «Почему Python не написан на Python?»
Более того, когда в C написано достаточное количество примитивов для классов и объектов Python, они могут быть использованы для написания остальной части интерпретатора, поэтому вы ничего не получите, используя вместо этого C ++.
источник