python vs ruby
-
Upload
michael-karpov -
Category
Technology
-
view
2.182 -
download
2
description
Transcript of python vs ruby
Актуальные языки программирования:
Python; Ruby
Карпов М.А, 5241/1
Содержание
• Обзор• Как начать?• Где применяется?• Почему не Java?• Python vs Ruby• Django vs Ruby on Rails• Востребованность, вакансии• Заключение
PythonКласс языка: объектно-ориентированный, императивный, функциональный, аспектно-ориентированный. Появился в: 1990 г.
Тип исполнения: интерпретация байт-кода, компиляция в MSIL, компиляция в байт-код Java
Типизация данных: строгая, динамическая
"строка" + 'строка' """тоже строка""" u"Юникод-строка" True or False # булевы литералы 3.14 # число с плавающей запятой 012 + 0xA # числа в восьмеричной и шестнадцатеричной системах счисления 1 + 2j # целое число и мнимое число [1, 2, "a"] # список (1, 2, "a") # кортеж {'a': 1, 'b': 'B'} # словарь lambda x: x**2 # неименованная функция
Философия Python (1)
• Красивое лучше, чем уродливое.• Явное лучше, чем неявное.• Простое лучше, чем сложное.• Сложное лучше, чем запутанное.• Плоское лучше, чем вложенное.• Разреженное лучше, чем плотное.• Читабельность имеет значение.• Особые случаи не настолько особые, чтобы нарушать
правила.• Хотя практичность побеждает стремление к чистоте.• Ошибки никогда не должны замалчиваться.• Если не замалчиваются явно.
Философия Python (2)
• Встретив двусмысленность, отбрось искушение угадать.• Должен существовать один — и, желательно, только
один — очевидный способ сделать это.• Хотя он поначалу может быть и не очевиден, если вы не
голландец.• Сейчас лучше, чем никогда.• Хотя никогда зачастую лучше, чем прямо сейчас.• Если реализацию сложно объяснить — идея плоха.• Если реализацию легко объяснить — идея, возможно,
хороша.• Пространства имён, черт возьми, — отличная штука!
Будем делать их побольше!
RubyДинамический, рефлективный, интерпретируемый высокоуровневый язык программирования для быстрого и удобного объектно-ориентированного программирования.
Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и многими другими возможностями. Появился в: 1993 г.
Тип исполнения: интерпретатор
Типизация данных: динамическая с явным приведением типов
Философия RubyОсновное назначение Ruby — создание простых и в то же время понятных программ, где важна не скорость работы программы, а малое время разработки, понятность и простота синтаксиса.
Язык следует принципу «наименьшей неожиданности».
Предоставления программисту возможностей достижения одного и того же результата несколькими различными способами.
«Просто, но не слишком просто», вторичность скорости работы программы, динамичность, простые строгие правила, выполнение которых не доходит до педантизма, потребность создавать полезные и красивые программы как причина программирования.
Пример на Ruby
# создаём массив a = [1, 'hi', 3.14, 1, 2, [4, 5] * 3] # => [1, "hi", 3.14, 1, 2, [4, 5, 4, 5, 4, 5]] # обращение по индексу a[2] # => 3.14 # «разворачиваем» все внутренние массивы, удаляем одинаковые элементы a.flatten.uniq # => [1, 'hi', 3.14, 2, 4, 5] # пытаемся найти индекс элемента со значением 4 a.index(4) # => nil # предыдущая попытка найти элемент неудачна - все предыдущие функции # возвращают копии, но Ruby почти для всех функций предоставляется # аналог с тем же названием, но заканчивающийся на «!», # который модифицирует контейнер a.flatten! # => [1, "hi", 3.14, 1, 2, 4, 5, 4, 5, 4, 5] a.index(4) # => 5
Ruby vs Python• Языки высокого уровня• В Ruby всё является объектами, в Python при необходимости
можно программировать без объектов• Для Python существует огромное число библиотек• Существует «переходник» Ruby/Python• в Python отсутствует возможность модифицировать встроенные
классы• Ruby2 быстрее• В Ruby отсутствует компиляции в байткод. (При этом есть
возможность компилировать Ruby в Java и .NET байткод)
• Подробнее: http://c2.com/cgi/wiki?PythonVsRuby
А что про Java?
http://www.slideshare.net/Belighted/ruby-vs-java
Ruby on Rail<h3>categories</h3><p class="taglist"> <%= render :partial => 'tag', :collection => @tags %></p>
Django
<h3>categories</h3><p class="taglist">{% for tag in tags %} <a class="level_{{ tag.pop_level }}" href="{{tag.get_absolute_url }}">{{ tag.name }}</a>{% endfor %}</p>
Django vs Rail• Гигантское количество действительно крутых плагинов для RoR.• Разработка "от ссылки" в Django.• Миграции в RoR против ручного обновления таблиц в Django. • Django за 3 года обновился с версии 0.9.x до 1.0.x. Рельсы же скоро
выйдут третьей версии;• Встроенная возможность тестирования для RoR. • Отдельная конфигурация БД для тестирования.• Коммьюнити у RoR больше;• Для RoR есть Aptana, на основе Eclipse. Для Python на эту тему есть
только PyDev плагин;• Админка в django весьма сомнительный плюс.
Сравнение Rail и DjangoMTV (model-template-view) instead of the traditional MVC (model-view-conroller)
Try Ruby! Try Python!
http://tryruby.org/Python 2.6.5 Windows installer
Спасибо за внимание!
Вопросы?