2009-11-16 2 views
6

Сегодня мой большой друг спросил меня, в чем основные отличия между новейшим языком Go и Cython, который представляет собой набор C-расширений для Python. У меня мало знаний о Python, может ли кто-нибудь сказать мне, почему Go лучше/хуже Cython?Различия между Go и Cython

+6

Какие качества вы особенно хорошо определяете? Это два совершенно разных языка программирования; есть много различий, так что это зависит от того, что вы ищете. –

+0

На самом деле, я только хочу знать, почему кто-то должен использовать Go вместо использования cython, например, что можно сделать в Go, чего вы не можете легко достичь с Cython? Какие языки имеют лучшую производительность? Лучшая безопасность? Лучше удобство для пользователя? Лучшие отладчики? Или это одно и то же, только незначительное отличие от синтаксиса? –

+0

Отсутствие какой-либо разумной поддержки нитей в Cython убило мою любовь к этому языку. 'cython nogil' – unixman83

ответ

9

Cython не является действительно язык в обычном смысле этого слова. Это препроцессор для создания расширений Python, который использует синтаксис типа Python (на самом деле они стремятся к полной совместимости с Python) и создает C-код (используя API Python C). При этом они могут включать некоторые специальные оптимизации случаев, но реальные преимущества приходят, когда вы добавляете Cython конкретную информацию о статическом типе, которая включена в код C, минуя время выполнения Python для этих операций и приводя к высокой скорости.

Go - это скомпилированный язык программирования. Первое, что можно сделать в Go, - это создание исполняемого файла, который не включает в себя среду исполнения Python/запуск интерпретатора Python - это невозможно в Cython. (Возможно, это не технически невозможно, но на самом деле нет смысла использовать Cython, если вы не работаете с Python). Поскольку Cython просто производит C, большинство ваших вопросов в комментарии действительно не применяются - вы можете использовать любой отладчик C (хотя факт, что расширение Python делает вещи немного сложнее).

+3

О Китоне: Я не согласен. Вам нужно сохранить мышление, что вы работаете на C, а не на Python. Написание загрузчика-заглушки не так сложно, поскольку Python является открытым исходным кодом. – unixman83

4

Различия? Почти все!

  • Параллельность и каналы.
  • Интерфейсы.
  • Статические проверки типов.
  • ...
+4

Уг cython имеет все эти плюс плюс 2 значительно более зрелых и мощных языка. –

+1

В прошлый раз, когда я проверил, Cython не поддерживал нити. – unixman83

1

Моя главная причина попробовать идти в воображаемой легкость внедрения параллелизма в программы. Я думаю, что это будет «следующая большая вещь», так как скорость процессора сократится, и все больше и больше ячеек доступны. Если вы хотите использовать многоядерные процессоры, вам необходимо написать свою программу, чтобы она могла запускать все одновременно.

Раньше я смотрел на Эрланг, но, несмотря на то, что меня использовали для Пролога, я нахожу его еще немного странным; он настолько отличается от вашего «среднего» языка программирования (семейства C или Pascal). Но его функции параллелизма просты в использовании, как только вы его повесите. С очень небольшим усилием я смог написать параллельный парсер, который не использует стек, но порождает новый «поток/процесс» каждый раз, когда имеется несколько опций.

До сих пор все выглядит хорошо, несмотря на некоторые незначительные несоответствия. И это также быстро, что является бонусом.

Так что если Cython также не делает параллелизм легко, я бы благоприятствовать идти ...

+0

+1 для * легкий в использовании *. Параллельность в различных формах была «следующей большой вещью» в течение как минимум 30 лет; но для «введения параллелизма» нужно переосмыслить, а не просто. – denis

+1

Cython не поддерживает параллелизм ** вообще ** (GIL проводится большую часть времени). Да, вы могли бы использовать несколько * процессов *, но это параллелизм уровня ОС, который медленный под Windows. – unixman83

5

gevent - это параллельная библиотека, в которой используется Cython. Это выглядит довольно быстро: http://nichol.as/asynchronous-servers-in-python

+0

Я сожалею, что проголосовал за это ... – unixman83

+0

Почему вы сожалеете об этом? –

+0

Люди, похоже, думают, что python (Cython) хорошо масштабируется, я был одним из них, пока не узнал внутренности. посмотрите Global Global Interpreter Lock или GIL и посмотрите, о чем я говорю. Короче говоря, нет истинной поддержки резьбы. – unixman83

2

Что касается поддержки. Вы полагаетесь на один компилятор, предоставляемый Google. Что делать, если Go сходит или идет коммерчески?

С Cython вы всегда можете вернуться на Python (или порт C-кода), если проект Cython сложен.

ОБНОВЛЕНИЕ: Должен сказать, что я сейчас расстроен с Китоном.Недостаток поддержки резьбы - серьезный удар. Cython является потокобезопасным, но по серьезной цене. Глобальная блокировка интерпретатора выполняется все время, когда функция выполняется. Таким образом, выключение одновременного выполнения по всей кодовой базе!

C-подобные функции Cython плохо документированы и запутываются для новичков. Я признаю.

Целью Cython является поддержка программного обеспечения математики Sage; Go - это поддержка амбициозных планов Google по передовым дорогостоящим аппаратным средствам $$.

Короче говоря, мне больше не нравится ни один из этих языков. Возвращение к C++ (снова). Мой любимый Cython.

+0

Ugh, C++. По крайней мере, ваши причины правы. –

+1

Это неправильно. Он не знает, было ли это правильно в 2010 году, но вам не нужно держать gil. Вы можете выпустить gil в любое время, когда вам не нужно делать вызов python с помощью nogil syntex. – Matt

+1

«единственный компилятор, предоставленный Google», ошибочен по обоим пунктам. Существует 'gc' и есть [' gccgo'] (https://golang.org/doc/install/gccgo) (плюс больше, я думаю, но это большие). Go полностью открыт со многими сторонними пользователями Google; Google может сброситься или покинуть Go завтра, и Go будет в порядке. –

 Смежные вопросы

  • Нет связанных вопросов^_^