LINUX.ORG.RU

Ruby в качестве замены Perl

 , ,


0

4

Давненько уже подумываю активно писать на чём-либо, помимо Perl'а.

Синтаксис наиболее популярного у хомячков Python'а вызывает у меня откровенное отвращение, язык Julia, который вроде и нравится, в качестве языка общего назначения пока откровенно слаб, да и его нестабильность несколько напрягает. Языки C#, D, Java - многословны и сложны для тех достаточно простых приложений и библиотек, которые я пишу (к тому же наиболее мне симпатичный здесь язык C# - по сути мало популярен на *nix'ах, поскольку ему нужен mono).

Посмотрел на Ruby - вроде неплохо. Есть конечно косяки в виде «@@» (очень странное изобретение - обозначать префиксом область видимости переменной) и прочих чудесных вещей наподобие end'ов и def'ов (что за идиотская обфускация, для чего?), но в целом явно лучше Python'а, вполне удобный синтаксис.

Несколько напрягает тот факт, что популярность Ruby явно обусловлена убывающей, насколько я знаю, популярностью Ruby-On-Rails и в целом, в отличие от того же Perl'а и Python'а, Ruby в качестве языка на все случаи жизни якобы мало используется - сфера применения у него ограничена веб-технологиями (опять же, не моё личное мнение).

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

★★★★★

Ответ на: комментарий от Deleted

На какой конкретно код глядя? И по ссылке что-то про switch написано - это не про тот ли самый бажный, который работает на source filter'ах?

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

Что ты на форуме показываешь. Думаю, это часть чего-то большего, разве не так?

Про switch инфа устарела,как и в целом traditional perl.

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

Если говорить об ООП-фреймворках, то да, я ими не пользуюсь, поскольку меня на 100% устраивает штатное ООП в Perl5. Зачем мне использовать что-то, тяжеловесное и тормозное, ради тупо синтаксического сахара?

А given'ом давно и успешно пользуюсь, и возвращаемым из given значением тоже пользуюсь, очень удобная штука.

Modern Perl ИМХО не может быть где-то сбоку относительно ядра perl5, иначе это просто какая-то химера. В perl5 появляются новые фичи, и по мере их устаканивания - они становятся юзабельным modern'ом, но сказать, что какой-нибудь MooseX - это прямо прорыв в perl'остроении я не могу ни разу.

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

я бы с удовольствием выслушал разумные аргументы того, кто придумал с помощью обратного слеша делать ссылки (это при том, что с помощью того же обратного слеша в perl работает повсеместное экранирование). По мне это полный маразм.

Опять все вокруг маразматики а ты один на белом коне?

Что за «повсеместное экранирование»? Где ты вычитал этот термин?

И с помощью чего ты хочешь делать ссылки? Дай угадаю, & как в C? А ничего что & используется как побитовое и и логическое и?

Или знаешь ASCII символ, ещё не задействованный в перле под какую-нибудь операцию? Или имеешь гениальную идею пользовать богатства юникода?

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

хм, два вопроса:

- почему они хтят свалить с руби?

- какой язык учат, на что будут валить?

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

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

А Rust синтаксическим маразмом в духе ruby'евского «@@» полон сверху до низу.

Ты не знаешь Rust, но рассказываешь про недостатки его синтаксиса. Я навскидку из весомых для меня недостатков могу назвать отсутствие питоньей модели указания аргументов функции. Это и позиционные аргументы, и именованные, и именованные аргументы со значениями по умолчанию, и возможность указать переменное количество аргументов. На данный момент вместо именованных аргументов в Расте используют паттерн(?) Chainable, который нелогично выглядит:

В Python:

Class(arg1=1, arg2=2, arg3=3)
В Rust:
struct Struct {
    field1: i32,
    field2: f32
}

impl Struct {
    fn new() -> Self {
        Self {
            field1: 0, // default value
            field2: 0.0 // default value
        }
    }
    fn field1(&mut self, val: i32) -> &mut Self {
        self.field1 = val;
        self
    }
    fn field2(&mut self, val: f32) -> &mut Self {
        self.field2 = val;
        self
    }
}

fn main() {
    let mut s = Struct::new();
    s.field1(2).field2(3.14); // `Chainable` pattern
    println!("{}, {}", s.field1, s.field2);
}
По сути, старые (не)добрые сеттеры.
Жить можно, но пердолинг вручную, как-то не очень хорошо выглядит.

Virtuos86 ★★★★★
()

Приходится использовать местами ruby, потому что puppet. На вкус как хипстерский перл с ООП.

Без рельс, конечно.

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

Даёшь многословность!

Ты не с того места начал, давай сначала мусор вида <>&' причеши.

<> и & есть и в плюсах. Там люди как-то живут. А ' да, проблемное место в использовании языка. Лайфтаймы как вирус, если появляются в одном месте, то расползаются по всей программе. С другой стороны их нужно расставлять только там, где того требует компилятор, где он не в состоянии вывести их сам.

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

Мне просто стало интересно, для чего вы используете Illumos и как вам в этом помогает Ruby, потому что мне про Illumos известно очень мало. Вот и задал вопрос.

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

- почему они хтят свалить с руби?

Руби - это Rails. 1% вакансий, где пишут на чистом Руби, в расчёт не берём. Rails - это Agile. В РФ Agile мало кто понимает. Обычно это спешка и бардак. Бардак надоедает.

- какой язык учат, на что будут валить?

Python, Go, C.

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

Может, они толком и не знают Ruby? Просто писали себе код на Python, например, а пришлось заняться Rails. Отсюда и ненависть, возможно.

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

Жить можно, но пердолинг вручную, как-то не очень хорошо выглядит.

Детектор бойлерплейта зашкалил. Особенно уныло созерцать с десяток self на 10 строк. Ну тебе как питонисту норм наверно.

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

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

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

Может, они толком и не знают Ruby?

Ох. Веб-прогарммисту сам Руби знать даже немного вредно. Ещё пойдёт поперёк парадигмы Rails, начнёт метапрограмимрованием баловаться... коллеги - проклянут.

Они все нормальные программисты на Rails.

Проблема больше в менеджменте. Хороший ПМ - редкость.

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

Да, для меня self это бальзам на душу), непитонистам не понять. Вас не разберешь, то закорючки не нра, то человеческий и понятный self не по нутру. Например, &mut self говорит о том, что метод получает изменяемую ссылку на инстанс структуры, которому принадлежит, а значит в этом методе объект изменяется. Это полезная информация? Полезная, имхо. А куда ее воткнуть без self?

Virtuos86 ★★★★★
()

если для души, то нормальный язык, фичастый. Если на перспективу, то выбор между мертвецом и франкенштейном. Хайп на руби уже не тот.

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

Если перевести на литературный язык, то Rust это действительно не Haskell, который сам выводит типы, и можно писать компактный код. Я, как фанбой, набежавший из динамики, могу сказать, что несмотря на бэкграунд, целиком основанный на «скриптопараше», я оказался внезапно в состоянии писать работоспособный кот. Компилируется и работает, и сегфолтов нет. Плюс адекватная ругань компилятора, когда кот всё же не компилится, по которой можно либо самому внести нужные правки, либо нагуглить на stackoverflow что-то похожее. Если упороться идиоматичностью кода, то есть такая штука, как Clippy, прошерстит код и укажет на косяки.

Что касается выбора. Хайп, безусловно, сыграл свою роль. Rust, насколько я вижу, пытаются пихать в любую дырку, куда надо и не надо. И пускай пихают. Где приживется, там и пригодится, по-другому свои ниши язык найти не сможет.

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

А просто функцией не судьба что ли? Что, так часто нужно брать ссылки на скаляры? В реальном коде - весьма нечасто. Так почему ref - это ref, а операция взятия ссылки - это какое-то «\»? Зачем засорять язык подобным значковым дерьмом?

Ну и да, вообще-то «&» используется в качестве сигила для функции, побитовым «и» оно может быть только в инфиксной форме.

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

Что, так часто нужно брать ссылки на скаляры?

Зачем вообще в скриптовом языке с GC нужно явно брать ссылки на что-либо?

Anatolik ★★
()

Минус один наркоман пишущий на Perl, платформа постепенно выздоравливает. Даже tiobe это заметили, Perl чуток приподнялся.

ЗЫ Интерес именно к Ruby подтверждает многие мои догадки.

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

А просто функцией не судьба что ли? <...> Зачем засорять язык подобным значковым дерьмом?

Видимо, Ларри операция взятия ссылки понравилась больше чем функция, а в тобой он по этому вопросу почему-то не посоветовался. Это во-первых. А во-вторых, есть в перле вот такая конструкция:

sub name(\@\%\$) {
    ...
};

ref вместо \ в данном контексте смотрелось бы не очень. Возможно, были ещё какие-то соображения.

А про «засорение языка значками» в отношении перла… сам-то понял что сказал?

Я гляжу, ты на лоре уже 12 лет отираешься, а от юношеского максимализма «я тут один Д'Артаньян а все вокруг пидрасы» ещё не избавился.

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

Open Indiana Hipster 2017.04 (комментарий)
Изначально я рассматривал эту ОС как игрушку (и хорошую возможность посмотреть на Solaris вблизи), но оказалось, что она вполне покрывает необходимый минимум потребностей. Никаких преимуществ Illumos не предоставляет, скорее наоборот, но я продолжаю ее использовать. Наверное, это что-то вроде хобби.

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

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

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

Тогда уж * надо было использовать для взятия ссылок. Синтаксис прототипов у perl'а вообще весьма жуткий. Пользуюсь им весьма редко: по сути это просто базис для построения легковесных «синтаксически сахарных» конструкций (без откровенных извращений типа source filter'ов).

У меня нет фундаментальных претензий к перлу кроме скорости работы интерпретатора и отсутствию вменяемых вакансий в дефолт-сити, а уж не в дефолт-сити - и подавно. Первое порождает не самую приятную необходимость дописывать куски кода на Сях, если нет подходящего готового XS-модуля, второе - приводит, например, к тому, что невозможно найти работу не на другом конце нашего скромного «кружочка», да и та, что есть - весьма своеобразна.

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

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

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

Ruby doesn't support «pass by reference» at all. Everything is an object and the references to those objects are always passed by value.

Anatolik ★★
()

Синтаксис дело привычки. Попыришься в питон пару неделек и привыкнешь.

Важнее кто именно стоит за языком. И если за ним стоит какая-то желтая обезьяна, а не европейская школа, то такой язык обречён на провал. Они же ничего не понимают, пока на них не скинешь что-то тяжёлое и желательно два раза.

Подумай об этом. И возьми язык только от европейской академической школы и мысли.

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

А можно, чтобы у меня в каждой директории с проектом на Perl был файлик, где указаны точные версии библиотек, которые я использую в этом проекте? Хотелось бы чего-то похожего на этот воркфлоу.

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

Спасибо. А почему именно он предпочтителен?

В любом случае, здорово, что он основан на спецификации Gemfile. Человеку, который переходит с Perl на Ruby, будет удобнее.

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

А почему именно он предпочтителен?

Любой пацанчег может вот так сделать:

cpanm --installdeps .

Ну а cpanm это наше все. Самый простой, популярный, поддерживаемый, безгеморный способ ставить зависимости, в т.ч. тяжелые, когда штатный cpan-клиент тормозит и глючит.

Человеку, который переходит с Perl на Ruby, будет удобнее.

OMFG Менять шило на мыло. Валю с перла на питон. Проект в котором работал 2 месяца с руби, с пафосными эльфами-рубистами, все еще снится в страшных снах. Такого жидкого обсера элитных американских программистов еще не встречал.

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

Валю с перла на питон.

Даже для Node.js уже сделали более-менее нормальный способ разруливать зависимости, а для Python все еще только делают.

Проект в котором работал 2 месяца с руби

У вас маленькая выборка.

Anatolik ★★
()

Кстати я тоже с перла. Крутой синтаксис, по удобству мало хто может сравниться. Може я тоже раньше хотел перебраться на более «меинстрим» ЯП.

Но у меня после универа травма и я люблю С++. Соотв. сейчас пишу на нем. Тоже есть где «чувства изложить» в плане синтаксиса. Да и STL тоже интересная. Меинстримность на уровне. Короч, советую.

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

Проект в котором работал 2 месяца с руби, с пафосными эльфами-рубистами, все еще снится в страшных снах.

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

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

Со скриптотой всегда так, не обольщайся.

Не всегда. С перлом у меня таких проблем небыло.

куда все недоучки и неосиляторы стекаются...

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

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

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

Ну что за глупости. Разработка того же Bundler ведется коллективно.

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

С таким подходом всегда есть типичная для JavaScript загвоздка: а если всё-таки хочется модифицировать копию объекта, а не сам объект - то что прикажете делать? В JS, например, является объектом то, что в Perl называется хешем и копируется на раз. А в JS нужно буквально в цикле с рекурсией поэлементно копировать «объект в объект». Неудобненько...

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

Мне кажется, с попсовостью как раз использовать JavaScript с его охрененно быстрым движком V8 имеет больше смысла. Но Ruby сам по себе мне как-то симпатичнее JS, и намного.

PHP точно за пределами веба используется крайне редко.

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

а если всё-таки хочется модифицировать копию объекта, а не сам объект - то что прикажете делать?

Явно создать копию(например, через object.clone), и модифицировать ее.

А в JS нужно буквально в цикле с рекурсией поэлементно копировать «объект в объект». Неудобненько...

Можно пример задачи? Не совсем понятно.

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

Есть ассоциативный массив:

var h1={"a": "A", "b": "B"};

Мне нужен h2, содержащий всё то же самое, нужно модифицировать его свойства, но мне не нужно, чтобы изменялся исходный h1.

Безусловно, в том же perl конструкция вида

my $h1={
 'key00'=>{'key10'=>'value'}
};
my $h2;
%{$h2}=%{$h1};
$h2->{'key00'}{'key10'}='new_value';

- приведёт к аффекту на h1 при изменении h2, но здесь логика самоочевидна: значениями ключей являются ссылки, они-то и копируются. Но даже для этого, насколько я понимаю, в JS нет прямого аналога, нужно копировать ключ за ключом в цикле.

DRVTiny ★★★★★
() автор топика
Последнее исправление: DRVTiny (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.