LINUX.ORG.RU

ruby vs python vs perl

 , ,


0

5

по работе мне приходится достаточно много времени программировать на Ruby, редко пишу скрипты на Python и вот недавно открыл для себя Perl. До этого писал только небольшие однострочники на этом прекрасном языке, а сейчас посмотрел его более подробно и честно пока не увидел каких-то принципиальных отличий от Ruby, но если мне не изменяет память, perl существовал еще до динозавров, что наводит на вполне резонный вопрос: а зачем придумали все эти модные ruby и python-ы, раз уже есть прекрасный perl? Ну да, у него немного другой синтаксис, ну некоторые вещи делаются чуточку иначе, но принципиально-то он ничем не отличается на мой взгляд. Очень хотелось бы услышать мнение более опытных коллег по данному вопросу.

P.s. понятно что тема несколько флеймовая, но мне на самом деле просто хочется разобраться и более осознанно сформулировать точку зрения по данному вопросу.

Перемещено maxcom из linux-org-ru

писал только небольшие однострочники

Что же это за однострочники такие, а работа быть живым и мягким шредером?)

pylin ★★★★★ ()
Ответ на: комментарий от gatsu

Ну шредеры они холодные, из металла там и т.д. и уничтожают жестко без возможности восстановления(в теории)

pylin ★★★★★ ()

> а зачем придумали все эти модные ruby и python-ы, раз уже есть прекрасный perl?

вот для этого и придумали. как бы ты ещё смог понять, насколько прекрасен перл, если бы не было питона/рубина? ;)

arsi ★★★★★ ()

зачем придумали все эти модные ruby и python-ы

Всё, как обычно — NIH и производные. ☺

beastie ★★★★★ ()

> Форум - Linux-org-ru

> ruby vs python vs perl

это следует читать как «tazhate vs JB vs maxcom»? ;)

arsi ★★★★★ ()

не увидел каких-то принципиальных отличий от Ruby

А они есть.

Lorchanin ()

Перл это язык юниксоидов, а руби - маководов. Вот тебе основное принципиальное отличие.

thesis ★★★★★ ()

зачем придумали все эти модные ruby и python-ы, раз уже есть прекрасный lisp

Вы опечатались, не благодарите.

perl существовал еще до динозавров

Вообще-то он появился всего на три года раньше питона.

В чем разница? Разница в «философии». Если вам нравится, что «есть только один способ сделать это» и вообще zen of python — добро пожаловать в питон. Если вам хочется больше свободы и писать хоть свои программы хоть на латыни — перл вам в руки. Вы лютый фанат Ъ-ООП, но по какой-то причине не хотите использовать лисп или smalltalk — привет, руби!

buddhist ★★★★★ ()

что это делает в разделе Linux-org-ru, уважаемый работник однострочников?

по теме: питон придуман за тем, что перл и руби не удовлетворяют требованиям эстетики, удобства и логичности.

AGUtilities ★★★ ()
Ответ на: комментарий от AGUtilities

питон придуман за тем, что перл и руби не удовлетворяют требованиям эстетики, удобства и логичности

Ахах) сколько противоречий в одной-то строчке) Во-первых, руби появился потому, что питон не устраивал (а не наоборот):

Ruby родился 23 февраля 1993 года. В тот день я беседовал со своим коллегой о возможности существования объектно-ориентированного сценарного языка. Я знал Perl (Perl4, а не Perl5), но он мне не нравился — был в нём некий привкус игрушечного языка (да и поныне есть). А объектно-ориентированный интерпретируемый язык казался многообещающим. В то время я знал Python. Но он мне не нравился потому, что я не считал его настоящим объектно-ориентированным языком. Его OO свойства казались надстройкой над языком. Мне, как языковому маньяку и фанату объектно-ориентированного программирования с пятнадцатилетним стажем, очень, очень хотелось, чтобы был истинно объектно-ориентированный, простой в использовании язык. Я пытался найти такой язык, но его не было.

руби не удовлетворяют требованиям эстетики

Это в сравнении с питоном-то?))

class Student(object):
    # Initializer
    def __init__(self, name):
        # An instance variable to hold the student's name
        self._name = name
 
    # Getter method
    @property
    def name(self):
        return self._name
 
    # Setter method
    @name.setter
    def name(self, new_name):
        self._name = new_name
в сравнении с
class Student
  def name
    @name
  end
 
  def name=(value)
    @name=value
  end
end
не говоря уже про
class Student
  attr_reader :name
end
Где обещанная эстетика? Питонщеки обычно и строчки кода привести не могут в подтверждение своих слов -_-.

По теме, даже если между этим

#!/usr/bin/perl

package MyClass; {
  use strict;
  use Moose;
  use MooseX::Privacy;

  # объявляем новое свойство
  # строка, только для чтения, по умолчанию - "Anonymous"
  has 'name' => (
    is => 'ro',
    isa => 'Str',
    default => 'Anonymous',
  );

  # аналогично, но это свойство - protected
  has 'version' => (
    is => 'ro',
    isa => 'Str',
    default => '1.0',
    traits => [qw/Protected/], # или Private
  );

  # или protected_method
  private_method print_info => sub {
    my($self, $format, $params) = @_;

    printf $format."\n", $self->{name};

    if(scalar keys %{$params}) {
      print "Params:\n";
      for my $k(keys %{$params}) {
        print "  $k => $params->{$k}\n";
      }
    }
  }; # нужна точка с запятой!

  sub BUILD {
    my($self, $params) = @_;
    $self->print_info(
      'MyClass with name %s created!',
      $params
    );
  }; # тут точка с запятой вообще-то не нужна,
     # но чтобы гарантированно не накосячить,
     # лучше ставить ее везде
}

1; # ok!
и руби предположить какое-то подобие, то все равно никуда не выкинешь, например, gem. Да и вообще, объектная модель не выдерживает никакого сравнения. Короче, сложно найти в мысли автора что-то полезное.

special-k ★★★ ()
Ответ на: комментарий от special-k

вашу выпендрёжь мы знаем, вот она Обнаружена критическая уязвимость в Ruby on Rails (комментарий), Обнаружена критическая уязвимость в Ruby on Rails (комментарий) .

руби только и годится, что для написания несложного софта, а в чём-то сложном, расхлябанность и не солидность кода руби, плодит говнопроекты, типа рельсов. Давно ли гитхабы и твиттеры ломали?

AGUtilities ★★★ ()
Последнее исправление: AGUtilities (всего исправлений: 1)
Ответ на: комментарий от AGUtilities

вашу выпендрёжь мы знаем

угу, да только

Питонщеки обычно и строчки кода привести не могут в подтверждение своих слов -_-.

для написания несложного софта

А это бред, тут и доводов ждать бессмысленно. Даже я не буду говорить чего-то такого в адрес др ЯП, ибо пишут, жрут кактус, но пишут.

special-k ★★★ ()
Последнее исправление: special-k (всего исправлений: 2)
Ответ на: комментарий от AGUtilities

говнопроекты, типа рельсов

ну-ну, рельсы - это проект афигенно толкнувший веб вперед и сильно повлиявший на современное программирование, ни один питоновый фрэймворк и близко не подошел. Не было бы рельсов, были бы сейчас только java, c# да php.

special-k ★★★ ()
Ответ на: комментарий от special-k

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

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

А у руби, нет ни нормальной документации, ни нормальной организации уже существующих проектов и их файлов.

На пример, если взять питон, то там достаточно зайти в site-packages чтобы увидеть всё что в него добавлено.

А в руби, там не каталог, а каша с файлами.

Или, вот, не очевидно, какого лешего, любой веб-рубийский проект, таскает за собой эти рельсы? ты мне так и не ответил на этот вопрос с прошлого раза.

AGUtilities ★★★ ()
Последнее исправление: AGUtilities (всего исправлений: 1)
Ответ на: комментарий от AGUtilities

не хватает потенции приводить код
питоновский бойлерплейт самодостаточен
питоновские программы впредь возможно будут более очевидными чем portage

ахах) Ну ок.

ни нормальной документации

42. Есть и core документация, и документация библиотек (прямая ссылка с rubygems, в отличии от pip), и проекты с комментариями к документации, и несколько генераторов документации, и + все это не выглядит как студенческая поделка из ХХ века.

Давай все перечислим:)

Вот такая должна быть документация)

ни нормальной организации уже существующих проектов и их файлов

Да ты ж невменяем)) Учитесь у rubygems) Всем надо учиться у rubygems.

зайти в site-packages

gem list

лол

вкб-рубийский

Это как расшифровывается?

эти рельсы

Рельсы это хорошо, рельсы это не только лучший веб-фреймворк но и 100500 плагинов к нему.

special-k ★★★ ()
Последнее исправление: special-k (всего исправлений: 2)
Ответ на: комментарий от AGUtilities

лодит говнопроекты, типа рельсов.

Ну хоть один вменяемый человек. Правильно руби говно. И большие проекты на руби говно. И не нужно юзать руби. Вот СИ сколько больших проектов и они не говно. Надо веб приложения писать на СИ и плюсах, тогда и проекты будет хорошие и писать легче.И багов не будет. Хотя если вообще не писать, то вообще багов не будет. Ну это программирование, пойдем менеджерами в офис.

st4l1k ★★ ()

ну некоторые вещи делаются чуточку иначе, но принципиально-то он ничем не отличается на мой взгляд.

Так и есть: языки то одной и той же сферы применения.

perl существовал еще до динозавров

5-ый perl появился только в 1994.

а зачем придумали все эти модные ruby и python-ы, раз уже есть прекрасный perl?

Мир прекрасен в своём разнообразии!

helios ★★★★★ ()
Ответ на: комментарий от special-k
class Student(object):
    # Initializer
    def __init__(self, name):
        # An instance variable to hold the student's name
        self._name = name
 
    # Getter method
    @property
    def name(self):
        return self._name
 
    # Setter method
    @name.setter
    def name(self, new_name):
        self._name = new_name

в сравнении с

class Student
  def name
    @name
  end
 
  def name=(value)
    @name=value
  end
end

Неправильно. Аналог на питоне:

class Student(object):
    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, new_name):
        self._name = new_name
Даже на одну строчку меньше, заметь.

anonymous ()
Ответ на: комментарий от anonymous

нет не меньше, а на две больше:

@property
@name.setter

кроме того

name(self)

_name - видна снаружи

Его OO свойства казались надстройкой над языком.

Куча бойлерплейта, осложняющего чтение и понимание, и все равно не то же, что в руби. Надстройка и есть, в сравнении с руби - корявая.

special-k ★★★ ()
Ответ на: комментарий от anonymous

Даже на одну строчку меньше, заметь.

Зато в ширину неоправданно длиннее.

korvin_ ★★★★★ ()
Ответ на: комментарий от special-k

даже если между этим ... и руби предположить какое-то подобие,

Вообще-то это делает больше чем код на руби, а вот аналог:

use MooseX::Declare;
class Student {
   has 'name' => (is => 'rw');
}

то все равно никуда не выкинешь, например, gem

Хорошая попытка, но CPAN все равно в разы толще.

no-such-file ★★★★★ ()

уже есть прекрасный perl
однострочники

Писатели write-only кода в треде, все в машину фон неймана!

anonymous ()
Ответ на: комментарий от special-k

нет не меньше, а на две больше:

а корявые `end`-ы, конечно, не в счёт, да. а уж эстетика-то у них какая!

_name - видна снаружи

в этом примере _name не должна быть видна снаружи, это детали реализации. фактически - да, видна, так что анонимус схитрил. с другой стороны вместо _name обычно __name делают, пряча поглубже. но и с __init__ выходит сравнимо с рубиновым аналогом. а то, что сахару в руби больше, никто не спорит.

Virtuos86 ★★★★★ ()

vividsnow no-such-file Сорри, я совсем плохо знаю перл, давайте вот так Но вот тут прочел..

Built-in types are not objects and (unlike Perl) can in no way be made to look like objects.

1.day.ago
1.hour.ago

Так можно?

А еще интересно узнать, как изнутри выглядит эта магия:

  has 'name' => (
    is => 'ro',
    isa => 'Str',
    default => 'Anonymous',
  );
И на сколько легко/тяжело использовать метапрограммирование. В руби есть class Module, расширяя который я добавляю методы типа attr_accessor ко всем классам; и class Object, расширяя который я добавляю методы ко всем объектам; а что есть в перл?

special-k ★★★ ()
Ответ на: комментарий от Virtuos86

а корявые `end`-ы

давай не будем, я же не говорю «корявые отступы», хотя есть те, которым они не нравятся. И есть неудобные моменты с этим связанные.

детали реализации

буду теперь знать, что __name глубже _name))

сахару в руби больше, никто не спорит

Это не сахар, это отсутствие лишних слов, строк и знаков. Тебе объяснить чем синтаксический сахар от основных конструкций отличается?

special-k ★★★ ()
Ответ на: комментарий от special-k

нет не меньше, а на две больше:

@property
@name.setter

Опять фиксирую попытку смошенничать. Сплошные мошенники эти рубисты.

anonymous ()
Ответ на: комментарий от special-k

Так можно?

https://metacpan.org/module/autobox в т.ч. https://metacpan.org/module/autobox::DateTime::Duration

...интересно узнать, как изнутри выглядит...

если хотите знать как именно работает тот или иной модуль изучите perl и читайте исходники модуля

на сколько легко/тяжело использовать метапрограммирование

если требуется метапрограммирование, то думаю Moose (точее https://metacpan.org/module/Class::MOP::Class)

В руби есть class Module

в perl есть класс UNIVERSAL + варианты расширения: https://metacpan.org/search?q=universal

vividsnow ()
Ответ на: комментарий от special-k

_name - видна снаружи

Кому видна? Обезьяне, которая не читает предупреждений в своей IDE? Мартышке, которая прошлась по dir() и не удосужилась отфильтровать?

GateKeeper ★★ ()

а зачем придумали все эти модные ruby и python-ы, раз уже есть прекрасный perl?

phat

Создатели первых двух подумали о тех, кто исповедует более другие религии, вследствие чего «благословление» переменных на локальные престолы им непонятно, а иной раз даже претит.

/phat

GateKeeper ★★ ()
Ответ на: комментарий от special-k

а что есть в перл?

В принципе вам уже ответили, что в перле все есть. Добавлю только, что в перле есть еще Devel::Declare который позволяет вносить изменения в парсер перла и т.о. модифицировать язык под свои нужды. В частности ЕМНИП эта фича используется в MooseX::Declare.

А что есть в руби?

no-such-file ★★★★★ ()
Ответ на: комментарий от fat_angel

Самая близкая аналогия к тому что ты написал это из js

Student = {}

special-k ★★★ ()

vividsnow no-such-file Я удивлен, но мне интересно как это работает, боюсь что заглянув в исходники, я вряд ли сходу их пойму (я уже попробовал).

Например в ruby элементарная концепция, там все объект, и конечно я могу добавить метод в объект расширив его класс. Это очень естественно.

class Numeric
  def a
    p 'a'
  end
end
1.a
2.a
А как это сделано в перле? В перле ведь числа - не объекты, как выглядит минимальный код для реализации этого, где спрятана магия и в чем она заключается?
1->a
2->a

special-k ★★★ ()
Последнее исправление: special-k (всего исправлений: 1)
Ответ на: комментарий от special-k

Возьми и посмотри, не понимаешь - почитай книгу, так же стоит заметить, твой рубиновый фанатизм подзаебал в каждом треде же.

anonymous ()
Ответ на: комментарий от special-k
class Numeric
  def a
    p 'a'
  end
end

Ох уж этот monkey patching в руби. Даже не знаю, хорошо это или плохо.

iVS ★★★★★ ()
Последнее исправление: iVS (всего исправлений: 1)
Ответ на: комментарий от anonymous

Почему я могу объяснить в 5 строчках кода, а для перла надо читать какую-то книгу.

special-k ★★★ ()

В перле небыло оопных 'классов'.
Вот зачем нужно руби после питона — несовсем понятно.

Поэтому заголовок должен был бы быть таким:
Зачем perl/python/ruby, когда уже был LISP ? (хотя перл внёс хорошие регулярки, да).

Bad_ptr ★★★★ ()
Ответ на: комментарий от Bad_ptr

Зачем perl/python/ruby, когда уже был LISP ?

В какой-то мере python, ruby (про perl не знаю) - тот же Lisp. но без столь ненавистных скобочек. У питона за счет отступов, а в руби так вообще поощряется написание вовсе без скобок. Впрочем, сам создатель руби называл свое детище «Matz' lisp».

iVS ★★★★★ ()
Ответ на: комментарий от anonymous

рубиновый фанатизм

А с чего фанатизм, я говорю в тредах про руби про руби.
vividsnow, no-such-file говорят в тредах про перл про перл.
Virtuos86 говорит в тредах про питон про питон.
В чем проблема?

special-k ★★★ ()
Ответ на: комментарий от special-k

Я смотрю на твой ruby-код и не понимаю, что он делает, хотя спокойно могу объяснить, как работают модули со cpan. Если я начну спрашивать, ты тоже отправишь меня читать книгу/документацию.

shell-script ★★★★★ ()
Ответ на: комментарий от special-k
use autobox;
sub SCALAR::a { 'a' };
1->a;

где спрятана магия и в чем она заключается?

сначала расскажи «где спрятана магия и в чём она заключается» в ruby?

vividsnow ()
Ответ на: комментарий от special-k

Чувак

в описанном тобой случае в питоне геттеры и сеттеры не нужны. Не нужны. Совсем. Усек?

shimon ★★★★★ ()
Ответ на: комментарий от special-k

Например в ruby элементарная концепция, там все объект, и конечно я могу добавить метод в объект расширив его класс

Почему я могу объяснить в 5 строчках кода, а для перла надо читать какую-то книгу.

Так и я могу объяснить. Просто модуль autobox так работает и все. Понятно? Вообще вы задаете странный вопрос, как будто какие-то возможности можно сделать сильно альтернативно... Да, в перле автобоксинг не в ядре языка, ну и славно - значит по умолчанию нет соответствующего оверхэда.

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

no-such-file ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.