Зачем нам Ruby, если есть Python ?

автор superman 5 апреля 2015 г. 11:00:09

Теги: PythonRuby



Все вокруг нас стремительно изменяется каждую секунду. Чтобы хоть как-то успевать за всем этим, мы должны бежать сломя голову.

К чему это все я ? А к тому, что если раньше около 20 лет назад весь софт писали на C/C++, Pascal, то сейчас ситуация поменялась. Да и сам софт, поменялся. Мы уходим в Веб, в паутину. Сайты теперь, не просто сайты, а веб-приложения. У них есть сложная логика внутри, теперь уже прямо в браузере. Сервера уже становятся не так и нужны. Появляются решения вида hoodie и noBackend, которые напрямую говорят нам значимость трэнда "бэкэнд не нужен". Стоит хотя бы взглянуть на бешеную популярность Javascript для всего что можно. Node.JS, IO.JS и прочие.

Но, пока хипстеры воюют с Javascript, нормальные пацаны пишут надежный код на Python, PHP, Ruby. Если PHP программистов принято относить к "особой" касте неприкасаемых, то Python и Ruby программисты находятся примерно на одной волне.

Говорить мы в этой статье будем про веб, поэтому в расчет берем Django и Rails разработчиков. Сами фреймворки сравнивать не будем, будем сравнивать языки,к отношению их применимости для веб.

Рассмотрим первый вариант сравнения. Ruby разработчики часто упоминают о более продуманной системе мета-программирования в Ruby. Рассмотрим реализацию идеи method missing в Ruby и Python.

Вот пример на Ruby:

class Hello
  def method_missing(m, *args, &block)
    puts "Method called #{m}"
  end
end

Проверяем:

[2] pry(main)> hello = Hello.new
=> #<Hello:0x8ab9160>
[3] pry(main)> hello.privet
Method called privet
=> nil

Можно и короче конечно:

[4] pry(main)> Hello.new.kak_dela?
Method called kak_dela?
=> nil

Теперь на Python 2.7:

class Hello(object):
  def __getattr__(self, name):
    def _missing(*args, **kwargs):
      print "Method called %r" % (name)
    return _missing

Проверяем:

In [2]: hello = Hello()
In [4]: hello.privet()
Method missing 'privet'

Или короче:

In [5]: Hello().privet()
Method missing 'privet'

Как видим количество кода на Python практически равносильно количеству кода на Ruby. Да, в случае с Python писать приходится больше. Но, при желании, для такого функционала можно написать декоратор на Python. Стоит так же отметить, что Python "кушает" гораздо меньше оперативной памяти, в отличие от Ruby.

В следующих статьях я опишу другие варианты сравнения. Так же хочу заметить, что недавно вышла версия 1.8 веб-фреймворка Django. Очень много интересных вещей реализовано в этой версии для работы с Django ORM. Веб-разработчикам однозначно стоит обратить внимание на этот фреймворк.


comments powered by Disqus

2014-2018 © thenextcode.ru