Сегодня мой большой друг спросил меня, в чем основные отличия между новейшим языком Go и Cython, который представляет собой набор C-расширений для Python. У меня мало знаний о Python, может ли кто-нибудь сказать мне, почему Go лучше/хуже Cython?Различия между Go и Cython
ответ
Cython не является действительно язык в обычном смысле этого слова. Это препроцессор для создания расширений Python, который использует синтаксис типа Python (на самом деле они стремятся к полной совместимости с Python) и создает C-код (используя API Python C). При этом они могут включать некоторые специальные оптимизации случаев, но реальные преимущества приходят, когда вы добавляете Cython конкретную информацию о статическом типе, которая включена в код C, минуя время выполнения Python для этих операций и приводя к высокой скорости.
Go - это скомпилированный язык программирования. Первое, что можно сделать в Go, - это создание исполняемого файла, который не включает в себя среду исполнения Python/запуск интерпретатора Python - это невозможно в Cython. (Возможно, это не технически невозможно, но на самом деле нет смысла использовать Cython, если вы не работаете с Python). Поскольку Cython просто производит C, большинство ваших вопросов в комментарии действительно не применяются - вы можете использовать любой отладчик C (хотя факт, что расширение Python делает вещи немного сложнее).
О Китоне: Я не согласен. Вам нужно сохранить мышление, что вы работаете на C, а не на Python. Написание загрузчика-заглушки не так сложно, поскольку Python является открытым исходным кодом. – unixman83
GO представляет goroutines и каналы. См. Язык FAQ
Различия? Почти все!
- Параллельность и каналы.
- Интерфейсы.
- Статические проверки типов.
- ...
Уг cython имеет все эти плюс плюс 2 значительно более зрелых и мощных языка. –
В прошлый раз, когда я проверил, Cython не поддерживал нити. – unixman83
Моя главная причина попробовать идти в воображаемой легкость внедрения параллелизма в программы. Я думаю, что это будет «следующая большая вещь», так как скорость процессора сократится, и все больше и больше ячеек доступны. Если вы хотите использовать многоядерные процессоры, вам необходимо написать свою программу, чтобы она могла запускать все одновременно.
Раньше я смотрел на Эрланг, но, несмотря на то, что меня использовали для Пролога, я нахожу его еще немного странным; он настолько отличается от вашего «среднего» языка программирования (семейства C или Pascal). Но его функции параллелизма просты в использовании, как только вы его повесите. С очень небольшим усилием я смог написать параллельный парсер, который не использует стек, но порождает новый «поток/процесс» каждый раз, когда имеется несколько опций.
До сих пор все выглядит хорошо, несмотря на некоторые незначительные несоответствия. И это также быстро, что является бонусом.
Так что если Cython также не делает параллелизм легко, я бы благоприятствовать идти ...
+1 для * легкий в использовании *. Параллельность в различных формах была «следующей большой вещью» в течение как минимум 30 лет; но для «введения параллелизма» нужно переосмыслить, а не просто. – denis
Cython не поддерживает параллелизм ** вообще ** (GIL проводится большую часть времени). Да, вы могли бы использовать несколько * процессов *, но это параллелизм уровня ОС, который медленный под Windows. – unixman83
gevent - это параллельная библиотека, в которой используется Cython. Это выглядит довольно быстро: http://nichol.as/asynchronous-servers-in-python
Я сожалею, что проголосовал за это ... – unixman83
Почему вы сожалеете об этом? –
Люди, похоже, думают, что python (Cython) хорошо масштабируется, я был одним из них, пока не узнал внутренности. посмотрите Global Global Interpreter Lock или GIL и посмотрите, о чем я говорю. Короче говоря, нет истинной поддержки резьбы. – unixman83
Что касается поддержки. Вы полагаетесь на один компилятор, предоставляемый Google. Что делать, если Go сходит или идет коммерчески?
С Cython вы всегда можете вернуться на Python (или порт C-кода), если проект Cython сложен.
ОБНОВЛЕНИЕ: Должен сказать, что я сейчас расстроен с Китоном.Недостаток поддержки резьбы - серьезный удар. Cython является потокобезопасным, но по серьезной цене. Глобальная блокировка интерпретатора выполняется все время, когда функция выполняется. Таким образом, выключение одновременного выполнения по всей кодовой базе!
C-подобные функции Cython плохо документированы и запутываются для новичков. Я признаю.
Целью Cython является поддержка программного обеспечения математики Sage; Go - это поддержка амбициозных планов Google по передовым дорогостоящим аппаратным средствам $$.
Короче говоря, мне больше не нравится ни один из этих языков. Возвращение к C++ (снова). Мой любимый Cython.
Ugh, C++. По крайней мере, ваши причины правы. –
Это неправильно. Он не знает, было ли это правильно в 2010 году, но вам не нужно держать gil. Вы можете выпустить gil в любое время, когда вам не нужно делать вызов python с помощью nogil syntex. – Matt
«единственный компилятор, предоставленный Google», ошибочен по обоим пунктам. Существует 'gc' и есть [' gccgo'] (https://golang.org/doc/install/gccgo) (плюс больше, я думаю, но это большие). Go полностью открыт со многими сторонними пользователями Google; Google может сброситься или покинуть Go завтра, и Go будет в порядке. –
Какие качества вы особенно хорошо определяете? Это два совершенно разных языка программирования; есть много различий, так что это зависит от того, что вы ищете. –
На самом деле, я только хочу знать, почему кто-то должен использовать Go вместо использования cython, например, что можно сделать в Go, чего вы не можете легко достичь с Cython? Какие языки имеют лучшую производительность? Лучшая безопасность? Лучше удобство для пользователя? Лучшие отладчики? Или это одно и то же, только незначительное отличие от синтаксиса? –
Отсутствие какой-либо разумной поддержки нитей в Cython убило мою любовь к этому языку. 'cython nogil' – unixman83