Comments 65
«Ruby uses a slightly different approach than many other languages to match the end and the beginning of a string.»
Стандарт для современных регулярных выражений — это Perl-совместимые. Почему они не поддерживались при проектировании языка — непонятно, но те самые 90% программистов об этом наверно и не подозревали.
Из-за в частности таких придумок Ruby я избегаю насколько возможно. К сожалению, хорошие программы на нём есть, и не использовать их не удаётся.
Стандарт для современных регулярных выражений — это Perl-совместимые. Почему они не поддерживались при проектировании языка — непонятно, но те самые 90% программистов об этом наверно и не подозревали.
Из-за в частности таких придумок Ruby я избегаю насколько возможно. К сожалению, хорошие программы на нём есть, и не использовать их не удаётся.
+11
> К сожалению, хорошие программы на нём есть, и не использовать их не удаётся.
А вот это уже интересное заявление. Можно примеры таких программ на Ruby от которых Вам не хотелось бы отказываться или заменять на аналоги? Если не ошибаюсь, то лично я не пользуюсь ни одной Ruby программой.
А вот это уже интересное заявление. Можно примеры таких программ на Ruby от которых Вам не хотелось бы отказываться или заменять на аналоги? Если не ошибаюсь, то лично я не пользуюсь ни одной Ruby программой.
0
homebrew?
0
Это как я понял некое подобие checkinstall с закосом под порты? Извините, но с OS'X не довелось пообщаться.
0
Просто source-based менеджер. Как порты только нет категорий и часть ставиться из пакетов, а часть из сорцев (можно все из сорцев)
0
GitLab
0
Причем тут GitLab? GitLab это сервис хостинга git репозиторией.
0
Зачем заменять на аналоги то, что работает? Зачем отказываться от того, что изящно? Зачем переходить на заведомо более слабые языки с более сильных? Разумеется, речь не идёт о Си. Пожалуй, это единственный язык, от которого нельзя отказаться.
+4
Даже если уйти от споров на тему «что лучше», т.к. это бесконечный разговор, то почему Вы решили что нету такого понятия как «приязнь»? Для программиста ЯП это инструмент, для пользователя это материал, а эти вещи весьма субъективны. Почему я не могу сказать, что я не люблю Java как пользователь т.к. на машине надо держать какую-то ВМ, что бы она что-то запускала?.. (это просто пример)
+1
А для руби или пхп этого уже не надо? Они уже в ядре? ;)
+2
почему Вы решили что нету такого понятия как «приязнь»?
Почему Вы решили, что я так решил?
Комментарий был к фразе
Можно примеры таких программ на Ruby от которых Вам не хотелось бы отказываться или заменять на аналоги?
которая звучит так, будто руби — чудовищный язык, от которого любой нормальный человек должен хотеть отказаться и как можно скорее заменить на аналоги.
0
Redmine
+16
Redmine
0
Redmine? ))))
+3
Redmine!
+1
Chef, Vagrant
+1
Capistrano
+1
Redmine, Chef, Puppet
0
> Стандарт для современных регулярных выражений — это Perl-совместимые. Почему они не поддерживались при проектировании языка — непонятно, но те самые 90% программистов об этом наверно и не подозревали.
Согласен, что всегда надо разрабатывать по принципу «наименьшего удивления». Т.е. делать именно ожидаемое поведение системы/модулей/классов/функций и т.д.
Согласен, что всегда надо разрабатывать по принципу «наименьшего удивления». Т.е. делать именно ожидаемое поведение системы/модулей/классов/функций и т.д.
+8
Складывается впечатление, что в Ruby многострочный режим в регулярках включен по-умолчанию, отсюда и такое поведение. Хотя это по-моему неправильно, иначе зачем тогда модификатор 'm'? Поведение '^' описанное в проблеме как раз подходит под описание работы в многострочном режиме.
+2
Моя бабушка так-же отказывается использовать новый утюг когда мы ей его подарили, говорит слишком сложно и непредсказуемо выпускает пар при нажатии на кнопку
0
Как прославиться:
1. Читаем guides.rubyonrails.org
2.…
3. PROFIT!
1. Читаем guides.rubyonrails.org
2.…
3. PROFIT!
+18
ну вообще в posix-regex ^ — это поиск по линиям(по каждой строке в отдельности), \A — поиск по всей строке целиком.
+4
да и в perl-regex собственно тоже
+1
Нет, в perl это поведение включает специальный ключ, который надо писать у каждого выражения.
Единственная особенно по-умолчанию в Perl — что $ допускает перевод строки после него (и только перевод строки, после него ничего уже не должно быть).
Единственная особенно по-умолчанию в Perl — что $ допускает перевод строки после него (и только перевод строки, после него ничего уже не должно быть).
0
UFO just landed and posted this here
ммм цель немножко другая, исправить неочевидное поведение языка. Y U NO тут причем )
-2
UFO just landed and posted this here
пожалуйста. правда не совсем понятен смысл мемо пикч — сарказм или что это? в любом случае я поржал, за что вам спасибо.
-2
есть некая грань между ленивыми растяпами и github/tumblr/scribd, этому и посвещен пост. если все ошибаются может стоит «изменить систему» лол
0
большинство кодеров невнимательны, не читают документацию и не знакомы с best practicles и ключевыми рекомендациями по своему языку.
Обычно это приводится в качестве недостатка PHP :)
Обычно это приводится в качестве недостатка PHP :)
+2
Непонятно только, кто писал ГитХаб — лентяи или самоучки? А может лентяи самоучки?
+1
Пойду на всякий случай проверю…
0
UFO just landed and posted this here
Попробуйте brakemanscanner.org — он отлично находит подобные ошибки в rails-приложения.
+10
Складывается впечатление, что в Ruby многострочный режим в регулярках включен по-умолчанию, отсюда и такое поведение. Хотя это по-моему неправильно, иначе зачем тогда модификатор 'm'? Поведение '^' описанное в проблеме как раз подходит под описание работы в многострочном режиме.
0
Написал о проблеме разработчикам Ruby, и вот ответ:
«In Ruby there is no multiline flag, regexps in Ruby are always in multiline mode. See advogato.org/person/fxn/diary/498.html for some gotchas regarding regexp flags in Perl vs Ruby.
In Ruby, you need to use \A and \z (or \Z) to match start and end of string.
…
Ruby won't prevent you shooting your foot.»
Как я и предполагал, в Ruby просто всегда по-умолчанию многострочный режим, поэтому надо пользоваться \A \z.
«In Ruby there is no multiline flag, regexps in Ruby are always in multiline mode. See advogato.org/person/fxn/diary/498.html for some gotchas regarding regexp flags in Perl vs Ruby.
In Ruby, you need to use \A and \z (or \Z) to match start and end of string.
…
Ruby won't prevent you shooting your foot.»
Как я и предполагал, в Ruby просто всегда по-умолчанию многострочный режим, поэтому надо пользоваться \A \z.
+3
И еще вдогонку из документации:
^ — Matches beginning of line
$ — Matches end of line
\A — Matches beginning of string.
\Z — Matches end of string. If string ends with a newline, it matches just before newline
\z — Matches end of string
И описания хорошо видно, что работает с полной строкой (даже многострочной), а что с line в строке.
Хотя на самом деле с непривычки это несколько обескураживает, но привыкнуть можно. По крайней мере я после прочтения книги о Ruby как-то сразу для себя уяснил это и использовал в первом же regexp именно \A и \z. Но, согласен, что по невнимательности это может привести к проблеме.
^ — Matches beginning of line
$ — Matches end of line
\A — Matches beginning of string.
\Z — Matches end of string. If string ends with a newline, it matches just before newline
\z — Matches end of string
И описания хорошо видно, что работает с полной строкой (даже многострочной), а что с line в строке.
Хотя на самом деле с непривычки это несколько обескураживает, но привыкнуть можно. По крайней мере я после прочтения книги о Ruby как-то сразу для себя уяснил это и использовал в первом же regexp именно \A и \z. Но, согласен, что по невнимательности это может привести к проблеме.
0
спасибо! Да, разумеется руби по умолчанию в этом режиме. Но это огромный фейл «Ruby won't prevent you shooting your foot» это был сильный промах руби изначально пойти по такому пути. Я не думаю что реально поднять уровень знания об этой проблеме достаточно высоко. Куда проще было бы принять свой фейл и выйти из мультилайн режима.
А так да, конечно, «you need to use \A and \z (or \Z) to match start and end of string» мы это и так знаем. Эдакое «тайное» знание
А так да, конечно, «you need to use \A and \z (or \Z) to match start and end of string» мы это и так знаем. Эдакое «тайное» знание
-3
Дело не в тайных знаниях. Дело в привычке. Те, кто не привык к тому, что многострочный режим НЕ используется по-умолчанию, при переходе на Ruby будут ошибаться.
Ну а по-хорошему, наверное, чтобы писать на Ruby надо внимательно читать документацию и просто писать правильно. Как ни крути, а есть отличия…
Ну а по-хорошему, наверное, чтобы писать на Ruby надо внимательно читать документацию и просто писать правильно. Как ни крути, а есть отличия…
+3
ссылочку не дашь пожалуйста на ответ руби?
-3
хомяков снова открывает америку, в следующий раз напиши плиз о шифровании паролей или настройки файрвола
+4
Sign up to leave a comment.
Массовая уязвимость в проектах на Ruby