Рубин, питон, перловка, пых

8th March 2005 - 05:24

Уже второй месяц урывками читаю «Programming Ruby — The Pragmatic Programmer’s Guide», обнаруженный после установки ruby 1.8.2, и мучаюсь. У меня, как у человека, знакомого лишь с PHP, пускай даже достаточно поверхностно знакомого, конструкции

a, b = b, a
[ 3, 1, 7, 0 ].sort.reverse
mon, day, year = $1, $2, $3 if /(\d\d)-(\d\d)-(\d\d)/

вызывают обильное слюноотделение. Чувствую, что неплохо было бы более пристально посмотреть в сторону других языков, но вот какого из трёх (Perl, Python, Ruby) — никак не определюсь.

P.S. Ruby On Rails, Рубин На Рельсах, PHP. Утренний юмор, да.

P.P.S. А никому не попадались «Hackers and Painters» в бесплатной цифре?

Categories: PHP | comments: (14)

Комментарии

1. Илья Бирман 8th March 2005 - 08:17

Я вот ещё когда-то прочитал доку по Icon — тоже интересный язык, посмотри.

Mash:

Этот? Не, не то. Хочется чего-то более близкого к жизни.

2. BOLK 8th March 2005 - 12:18

На Perl это будет:

($a, $b) = ($b, $a);
reverse sort (3,1,7,0);
($mon, $day, $year) = ($1, $2, $3) if /(\d\d)-(\d\d)-(\d\d)/;

Mash:

«Девушка, Вы что будете пить: водку или спирт?» Вот и я говорю, «даже не знаю, всё такое вкусное». :)

Perl подкупает хостингом и базой знаний.

3. ilishin 8th March 2005 - 13:43

Python красивее. Великолепный язык общего назначения. Для изучения лучше чем http://diveintopython.org/ не найдешь.

Главная засада — на shared hosting его редко ставят, потому что mod_python позволяет делать с системой слишком многое.

Mash:

Да, он более human-readable, чем тот же Perl, но Ruby мне показался более симпатичным. Да и четыре пробела этих… Нет, я понимаю, некоторые подсаживаются и потом жизни себе без этого уже не представляют, но как-то не по мне, хотя и не проблема.

С другой стороны, у Питона больше документации, third-party support и библиотек по сравнению с Рубином.

4. BOLK 8th March 2005 - 14:43

2ilishin: что mod_python позволяет делать такого, что не позволяет делать mod_perl или CGI?

5. ilishin 8th March 2005 - 21:28

2 Bolk:
Python конечно же может работать через CGI. Но тогда интерпретатор будет стартовать на каждый хит. о mod_perl:
mod_python может читать файлы в чужих каталогах и писать вредоносные pre_output хэндлеры. В принципе, из того что я знаю о mod_perl — его возможностей тоже должно бы на это хватать :). Но mod_perl ставят на shared hosting, а mod_python — только выделяя каждому клиенту по экземляру Апача.

6. BOLK 8th March 2005 - 22:14

подозреваю, что у mod_perl ровно такие же возможности как у mod_python. Что же до CGI, я спрашивал в следующем ключе: что может такого делать mod_python, что не может CGI (неважно на каком языке). Дело в том, что CGIи разрешены у каждого второго провайдера, причём внимание безопасности почти не уделяется.

7. ilishin 8th March 2005 - 23:10

Только две вещи — не подымать каждый раз интерпретатор и определять хендлеры отличные от OutputHandler. На ранних стадиях обработки запроса — разбор каталога, аутентификация etc. Очень удобно когда надо, скажем, при запросе на avi или mp3 проверить права пользователя а дальше отдавать его стандартным апачем.

8. YuppY 9th March 2005 - 11:57

В питоне:

a, b = b, a
sorted([3, 1, 7, 0], reverse = True)

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

import re
match = re.match(r'(\d\d)-(\d\d)-(\d\d)', s)
if match:
mon, day, year = match.groups()

Тут s — строка со значением. Я, к сожалению, плохо разбираюсь в ruby и перле и не понимаю откуда она там берется.

Mash:

Из документации:

If a single regular expression appears as a boolean expression, it is matched against the current value of the variable $_.

if /re/ ... is equivalent to if $_ =~ /re/ ...

Т.е. могу надумать вот такой пример:

$_ = "03-09-05"
mon, day, year = $1, $2, $3 if /(\d\d)-(\d\d)-(\d\d)/

Или такой:

while $stdin.gets
  print "Month: ", $1, "\n" if /(\d\d)-(\d\d)-(\d\d)/
end

Что интересно, Ruby на это матерится (не знаю почему, сам плохо пока разбираюсь), но отрабатывает. А так…

s = "03-09-05"
mon, day, year = $1, $2, $3 if /(\d\d)-(\d\d)-(\d\d)/ =~ s
9. Baka 9th March 2005 - 16:11

Ещё есть «Японский Forth» (MIND (сайт на японском, да) ). ^_^
(via kuro5hin.org)

10. G100m 14th March 2005 - 21:34

mod_python не дают на общих хостингах потому, что это отнимет время у админа и за это можно срубить хорошие деньги.

2 BOLK: он может вмешиваться в фазы обработки запроса, в остальном это тот же самый интерпритатор.

http://www.onlamp.com/pub/a/python/2003/10/02/mod_python.html

11. Julik 19th March 2005 - 23:50

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

Mash:

В минуту?! %)

Не, мне Rails не нужен. Жаль только, что mod_ruby под винду пока что «почти» нет. Есть под второй апач, в стадии beta, прикрутить не получилось, плюнул. FastCGI наш друг…

12. Julik 20th March 2005 - 01:17

Мне-то как раз Rails нужен, но под CGI он ненормален (даже для девелопмента).

Rails — чудо. Под MacOS X у меня спокойно собрался mod_ruby под второй апач но ставить я его пока не пробовал, под ним только одно приложение можно крутить. А пока — FastCGI, да…

Кстати, забавно — сборка ruby со всеми нужными кусочками занимает примерно вчетверо меньше времени чем сборка mod_php с сопоставимым функционалом.

13. yA! 25th March 2005 - 21:19

Mash>> Не, мне Rails не нужен.
Mash>> Жаль только, что mod_ruby под винду пока что «почти» нет.
Mash>> Есть под второй апач, в стадии beta, прикрутить не получилось, плюнул.
Mash>> FastCGI наш друг…

А где это вы видели FastCGI под винду??

Mash:

Там же, где и mod_ruby.

14. Vanger 11th May 2005 - 12:55

Как человек, два года посвятивший веб-разработке на руби — он того стоит. Язык на котором приятно работать.
Единственный, но смертельный трабл, увы и ах, его неподдерживаемость средним хостером. ЗЫ: у вас хороший журнал — интересно читать. спасибо.

Комментарии временно отключены.