Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python vs Ruby

Python vs Ruby

Григорий Петров (Фаматек)

В докладе автор сравнит сильные стороны синтаксиса языков на основании многолетнего опыта практического использования. Прагматичный взгляд на то, чем каждый из языков может «зацепить» опытного разработчика — и ничего лишнего.

Moscow Python Meetup
PRO

March 03, 2013
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Калибровочная страница.

    View Slide

  2. Еще одна калибровочная страница.
    Хватит листать мою презентацию.

    View Slide

  3. Python vs Ruby

    View Slide

  4. Картинка с эльфийками

    View Slide

  5. Зачем сравниваем?
    Нельзя хорошо решать все задачи, поэтому
    языки программирования постепенно
    специализируются на определенном круге
    задач. Знание того, на чем специализирован
    язык, позволяет лучше выбрать какой код
    писать и какие библиотеки использовать в
    спорных ситуациях.

    View Slide

  6. Что сравниваем?
    ● Сильные и слабые стороны - то, что
    заметно при каждодневном
    использовании.
    ● Блоки и list comprehension сами по себе
    не сильные и не слабые стороны.

    View Slide

  7. Что не сравниваем?
    Библиотеки
    ● Их очень много.
    ● Такие сравнения уже есть.

    View Slide

  8. Начнем с Python
    Потому что мы питонисты, или кто?

    View Slide

  9. Документация лучше
    С вступительной частью, литературными
    отступлениями и многочисленными
    примерами. Для Ruby многие модули,
    например DL или Win32API не
    документированы вообще, документация в
    целом значительно слабее.

    View Slide

  10. Потоки
    ● В python есть давно, в Ruby 1.9+
    ● Python активно поднимает GIL, Ruby - нет.

    View Slide

  11. Unicode
    В Python есть давно, в Ruby 1.9+

    View Slide

  12. Именованные аргументы
    Появились в Ruby только в версии 2.0,
    вышедшей несколько дней назад. До этого -
    эмуляция через словари.

    View Slide

  13. Легкость взаимодействия с OS
    Благодаря встроенной библиотеке ctypes.
    Встроенная в Ruby библиотека dl намного
    хуже документирована и сложнее в
    использовании, авторы рекомендуют
    сторонние библиотеки ffi.

    View Slide

  14. Функция является объектом
    Позволяет естественно использовать
    делегирование и делегаты.

    View Slide

  15. Декораторы
    Позволяют использовать аспектно-
    ориентированные подходы к решению
    задач.

    View Slide

  16. Батарейки в комплекте
    ● json
    ● SQLite
    ● Tk
    ● архивы

    View Slide

  17. Распространенность
    Если у какой-нибудь программы или
    библиотеки есть binding (VirtualBox, Qt,
    GTK...) - то в большинстве случаев это
    будет Python

    View Slide

  18. Переход между версиями
    Мейнстрим для Python - версии 2.6 и 2.7,
    которые практически не отличаются друг от
    друга. Переход на 3.0 - неторопливый и
    никого ни к чему не обязывающий процесс.
    Разница между Ruby 1.8 и 1.9 огромна,
    переход в самом разгаре, есть жертвы :)

    View Slide

  19. Все настолько просто?
    Давайте посмотрим с другой стороны.

    View Slide

  20. Заточенность под embedded DSL
    ● Блоки
    ● instance_eval
    ● Вызов функций без скобок

    View Slide

  21. Интерполяция строк
    Позволяет крайне лаконично формировать
    сложные текстовые объекты
    непосредственно в исходном коде.

    View Slide

  22. Встроенный установщик пакетов
    Команда gem позволяет скачать и
    установить нужную версию пакета и его
    зависимостей. Для Python существует как
    минимум три конкурирующие системы
    установки пакетов, которые нужно
    устанавливать отдельно. В понедельник на
    PyCon Russia анонсировали четвертую.

    View Slide

  23. Удобный вызов shell команд
    С помощью заключения их в апострофы. В
    Python для корректной работы с путями
    необходимо передавать аргументы списком
    в subprocess.check_output

    View Slide

  24. Подавление ожидаемых ошибок

    View Slide

  25. Интерполяция из Regexp

    View Slide

  26. Синтаксические мелочи
    ● Для классвое не нужно везде писать self
    ● Индексирование за пределами
    контейнера
    ● switch

    View Slide

  27. Другие батарейки
    ● Встроенная поддержка OpenSSL
    ● Встроенная поддержка OLE в Windows
    ● Встроенный шаблонизатор erb
    ● Временные папки с автоудалением
    ● Время и дата с поддержкой UTC
    ● Чтение файлов всегда в binary mode
    ● Потоку можно сделать exit

    View Slide

  28. Выводы
    Ruby
    ● Обработка текста
    ● DSL
    ● shell скрипты
    ● Надо использовать 1.9

    View Slide

  29. Python
    ● Enterprise
    ● GUI
    ● Многопоточность
    ● Биндинги
    ● Техподдержка

    View Slide

  30. Вопросы?
    Можно задать сейчас или позже на
    e-mail: [email protected]
    skype: eyeofhell
    Рассказывал и показывал Петров Григорий,
    руководитель R&D отдела Фаматек

    View Slide