LINUX.ORG.RU

Программирование на Python: Часть 1. Возможности языка и основы синтаксиса

 


0

0

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

>>> Подробности

★★★

Проверено: boombick ()
Ответ на: комментарий от ubuntulover

Ну-ну, то же самое можно сказать про брейнфак. Это не архитектура языка плохая, это он «подталкивает на правильный стиль написания кода»

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

Ё-моё, все эти __del__, отступы и прочая — чистой воды КОСТЫЛИ. Пейтон это второй язык после ВизуалБасика, который целиком построен на грязных хаках, где всё это ещё гордо именуется features

Я его тоже за это не люблю. Меня еще больше радует, что во второй версии print это оператор, а в третьей функция. Мне он вообще не очень нравится. Мне только нравятся всякие обертки типа PyQt, NumPy, Twisted, PyGame и прочее. Этакий DSL, только не для business logic, а для appilcation logic.

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

Gukl> Пока до 3-его уровня вложенности не доходишь, ага-ага.

Я и до 4 уровня вложенности доходил. Всё удобно.

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

Ё-моё, все эти __del__, отступы и прочая — чистой воды КОСТЫЛИ. Пейтон это второй язык после ВизуалБасика, который целиком построен на грязных хаках, где всё это ещё гордо именуется features

Я его тоже за это не люблю. Меня еще больше радует, что во второй версии print это оператор, а в третьей функция. Мне он вообще не очень нравится. Мне только нравятся всякие обертки типа PyQt, NumPy, Twisted, PyGame и прочее. Этакий DSL, только не для business logic, а для appilcation logic.

Ну и что, что функция, туда теперь поместили дополнительный функционал зато. Было объявлено, что всё будет приведено к общему знаменателю и если это по сути функция, то и оформлять её надо так.

Что качается отступов, то это очень удобно и что такого в этом хакерского? Вот в Фортране 66 и 77 первые 7 символов в строке вообще имели специальный смысл. И писали люди, многим нравилось.

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

думаю, вопрос привычки. мне удобнее отступами - их все равно ведь делать. а найти потерянную скобку (ну или begin/end) глазами достаточно тяжело - даж подсветка не всегда спасает.
думаю, все таки от отступов в питоне больше пользы чем вреда.

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

Не понял, чего неправильного в сортировке с использованием cmp. Сортировка как сортировка. Да, более медленная, так как функция вызывается чаще, не более того.

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

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

> все таки от отступов в питоне больше пользы чем вреда.

При рефакторинге сложнее копипастить код. Автоматическое форматирование не работает

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

> Lumi, не думал что ты захочешь вести себя как выфер.
Мне последние месяца три очень хочется перелезть на дистрибутив, в котором нет питона, вообще, вместе с плодами воспалённого ума его обожателей.
Так, к слову, я не обязан быть белым, пушистым и мурчать. Почему-то perl никто не держит по три версии, или там shell.

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

Ты написал петонокреатиф, зависящий от кучи пакетов. Написал как сумел (речь же идёт по прежнему про UI?). Да вот беда, у кого-то 2.5, у других 2.6, у третьих вообще 3K, и биндинги разных версий, а ещё это барахло должно как-то обновляться. А педонокреативы штука такая — распаковал в каталог и «работай». Или смотри на простыни трейсов. dllhell здесь ни при чём, программа на цэ просто не откомпилируется, и мне скажут где и в чём я не прав. А здесь фиг поймёшь, почему этот кривому петонокреатифу вынь да выложь bonobo.ui. И нужно выпотрошить половину программы, чтобы отучить, и не дай тнб, где-нибудь отступ не так будет.

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

Почему-то perl никто не держит по три версии [..] shell.

ога, рассказывайте больше... где-то стоит bash где-то csh где-то ещё что и всё разных версий :)

Ты написал петонокреатиф, зависящий от кучи пакетов. Написал как сумел (речь же идёт по прежнему про UI?). Да вот беда, у кого-то 2.5, у других 2.6, у третьих вообще 3K

с 2.5 и 2.6 вообще никаких проблем, а 3к - отдельная песня

здесь фиг поймёшь, почему этот кривому петонокреатифу вынь да выложь bonobo.ui.

очевидно же, потому что в зависимостях есть

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

Хахаха, такие большие и страшные сложности. Вы с с/с++ программами никогда в таком разрезе не ковырялись, не?

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

При рефакторинге сложнее копипастить код

копипаста - страшное зло

Как правило --- да. Если нужно несколько раз исполнить код --- пиши его в функцию. Иногда копипаст 1--2 раза оправдан, но ошибок при нём --- просто тьма.

Кстати, что у вас при копировании с пробелами, я не понял. или копирую сишный код вы потом отступы не выравниваете, получается как придётся?

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

Кстати, что у вас при копировании с пробелами, я не понял. или копирую сишный код вы потом отступы не выравниваете, получается как придётся?

для правильного форматирования кода в c/c++ и c# есть astyle

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

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

Список программ для ознакомления. http://en.wikipedia.org/wiki/List_of_Python_software

Спасибо за ссылку, не знал, что в четвёртой цивилке использовался Питон для логики и не только. Что касается среды разработки, я предпочитаю geany или kate. Хотя для больших проектов нужно использовать Eric.

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

>это грязный хак С++, связанный с тем что функция не умеет возвращать более 1-го значения

Лолшто? Это не грязный хак. Так и должно быть при программировании по человечески.

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

Лолшто? Это не грязный хак. Так и должно быть при программировании по человечески.

Не ну я всякое слышал, но чтобы передавать переменные по указателю явно считалось нормальным программированием? Может быть лет 15 назад, когда я ходил в старшую школу нам такое рассказывали, но теперь практически все языки произодят передачу по указателю неявно: и Паскаль (если var поставить), и Фортран в версии f95 точно, и Питон, и D. Явная работа с указателем --- это разве что для системного программинга низкоуровнего. Но если я логику пишу или ГУЙ, это просто безобразие!

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

> > >При рефакторинге сложнее копипастить код

> копипаста - страшное зло

Офигеть, вы что, бухие? Пятница ещё не наступила вроде

Как правило --- да. Если нужно несколько раз исполнить код --- пиши его в функцию. Иногда копипаст 1--2 раза оправдан, но ошибок при нём --- просто тьма.

Ещё раз, при *рефакторинге* нужно удалить код в одном месте (скопировать его) и вставить в другое.

Кстати, что у вас при копировании с пробелами, я не понял. или копирую сишный код вы потом отступы не выравниваете, получается как придётся?

Не строй из себя идиота. Ты сам прекрасно знаешь, что сишный код можно выровнять автоматом, а код на питоне — нет. Пример сам придумаешь или тебе написать?

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

> Не строй из себя идиота.

Ты тоже.

Ты сам прекрасно знаешь, что сишный код можно выровнять автоматом, а код на питоне — нет.

Выделенный блок кода передвигается одним нажатием на Tab. Не автоматически, но вполне работает.

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

>Явная работа с указателем --- это разве что для системного программинга низкоуровнего. Но если я логику пишу или ГУЙ, это просто безобразие!

Бред какой. Работа с указателями всегда славилась только своей сложностью для восприятия. Просто можно ошибиться так, то фиг пойми то будет.

А вот как-раз в этой функции (а точнее такой вариант присваивания) все предельно понятно и ошибиться могут только идиоты. Ничего страшного в том, что я явно через указатель записал переменную.

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

> Почему-то perl никто не держит по три версии, или там

Раньше - держали Perl4 и Perl5. Подожди, пока Perl 6 выйдет.

shell.

Доо. Bash, zsh, dash, sh, csh...

dllhell здесь ни при чём, программа на цэ просто не откомпилируется, и мне скажут где и в чём я не прав. А здесь фиг поймёшь, почему этот кривому петонокреатифу вынь да выложь bonobo.ui.

Это именно DLL Hell + проблемы динамических языков. Попробуй собрать что-нибудь нетривиальное на Perl - те же ощущуения. Просто на Perl для Гнома ничего не пишут.

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

<troll>Не можешь - не берись </troll>

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

> > Ты сам прекрасно знаешь, что сишный код можно выровнять автоматом, а код на питоне — нет.

Выделенный блок кода передвигается одним нажатием на Tab. Не автоматически, но вполне работает.

Разве я писал, что код при вставке невозможно выровнять руками? Зачем ты строишь из себя непонятно кого? Весь вопрос в удобстве (а это понятие субъективное), и в возможных ошибках/их исправлении. Если я ошибусь в отступом в хаскелле - то, скорее всего, код упадёт на тайп-чекинге. А тут - при выполнении.

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

Явная работа с указателем --- это разве что для системного программинга низкоуровнего. Но если я логику пишу или ГУЙ, это просто безобразие!

Бред какой. Работа с указателями всегда славилась только своей сложностью для восприятия. Просто можно ошибиться так, то фиг пойми то будет. А вот как-раз в этой функции (а точнее такой вариант присваивания) все предельно понятно и ошибиться могут только идиоты. Ничего страшного в том, что я явно через указатель записал переменную.

Ну, знаете, и вы гарантируете, что в каждой или в подавляющем большинстве функций будет также или ещё проще? А если мне надо передать скажем 10 различных параметров: массивы, числа разных типов, строки и т.д., что я там тоже всё буду передавать по указателям? И что я стану делать, если пропущу или перепутаю? В Питоне мне во время исполнения хотя бы ругнётся, что недопустимое присвоение типов, а указателю пофиг на что указывать. Этак я там наскладываю строк с массивами, что будь здоров. Или мне каждый раз такой список параметров в класс заворачивать прикажете?

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

> Не строй из себя идиота. Ты сам прекрасно знаешь, что сишный код можно выровнять автоматом, а код на питоне — нет. Пример сам придумаешь или тебе написать?

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

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

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

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

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

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

anonymous
()

Почитал. Осуждаю. Гвидо ван россум + откидач «язык программирования питон» и больше ничего. в сад, все в сад. опустили отличный язык. допишите статью про multithread сервер уже, а то начали с main'а и им же кончели. кто вообще от ibm_dw новости одобряе? :\

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

это еще цветочки. помню была статья, что-то вроде «как написать gps приложение для maemo на питоне». там по делу вообще было абсолютный 0 инфы, даже ссылки какие-то бесполезные даны. ни одного примера хотя-бы как-то связанного с темой. статья была посвящена каким-то левым иде для питона, типа нажмите сюда и туда, а теперь пишите сами знаете что и сами знаете как, инфу ищите сами не знаю даже где, а то что статья так называется так это чтобы только выглядело по-солиднее :)

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

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

>это грязный хак С++, связанный с тем что функция не умеет возвращать более 1-го значения

Лолшто? Это не грязный хак. Так и должно быть при программировании по человечески.

ога, давайте все сделаем хорошую мину при плохой игре :)

итак, простой код:

py:

def add_one_1(arg_in):
    return arg_in + 1

cpp:

int add_one_1(int arg_in) {
    return arg_in + 1;
}

усложняем:

py:

def add_one_2(arg1_in, arg2_in):
    return arg1_in + 1, arg2_in + 1

cpp: ??? don't follow

struct TWO_ARGS {
    int arg1;
    int arg2;

    TWO_ARGS(int arg1_in, int arg2_in) {
        arg1 = arg1_in;
        arg2 = arg2_in;
    }
};

TWO_ARGS add_one_2(int arg1_in, int arg2_in) {
    return TWO_ARGS(arg1_in + 1, arg2_in + 1);
}

или, как вариант, вот так:

void add_one_2(int& arg1_out, int& arg2_out) {
    arg1_out += 1;
    arg2_out += 1;
}

Что же мы видим в итоге?

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

Вот почему я сказал что С++ с костылями, так понятнее?

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

при *рефакторинге* нужно удалить код в одном месте (скопировать его) и вставить в другое.

ухахаха, вот он безымянный гений :)

прочитайте что такое реафакторинг сначала, вот Вам линк

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

c


void foo (int & x , int & y){ 
    *x += 6; 
    *y += 15; 
} 
// Результат как бэ: 
 
int x = 10, y = 10 ; 
 
foo (x, y); 
 
//итого: 
 
x = 16; 
y = 25; 
python
def foo(x, y):
    globals()['x'] = x+6
    globals()['y'] = y+15

x = 10
y = 10
foo(x, y)

# итого: 
# x = 16
# y = 25

isAlex
()
Ответ на: комментарий от isAlex
def foo(x, y): 
    globals()['x'] = x+6 
    globals()['y'] = y+15 
 
x = 10 
y = 10 
foo(x, y) 

Мля... «Што ето было, Ватсон?» (с) Это типа попытка сделать из Питона Си?

def foo(x, y):
  return x+6, y+15

x = 10
y = 10
x, y = foo(x, y)
tailgunner ★★★★★
()
Ответ на: комментарий от shty

> > при *рефакторинге* нужно удалить код в одном месте (скопировать его) и вставить в другое.

ухахаха, вот он безымянный гений :)

прочитайте что такое реафакторинг сначала, вот Вам линк

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

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

> Вот почему я сказал что С++ с костылями, так понятнее?

Ты хотел сказать, что в С++ нет встроенных кортежей? А где костыли?

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

молодой человек. я в теме.

ололо, а по высказываниям совсем не заметно :)

а командовать будете на вахте.

на этот счёт у анонимов права голоса нет :) регистрируйся и поговорим

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

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

перечитай, дорогой, инфу по линку который я приводил и осознай своё ничтожество и упоротую тупость

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

> Вот почему я сказал что С++ с костылями, так понятнее?

Ты хотел сказать, что в С++ нет встроенных кортежей? А где костыли?

я хотел сказать ровно то что сказал, если не понятно рекомендую ещё раз перечитать, если не поможет то идти в детский сад

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

> ога, рассказывайте больше... где-то стоит bash где-то csh где-то ещё что и всё разных версий :)
Не вижу у себя баша трёх версий, наверное плохо смотрел.

с 2.5 и 2.6 вообще никаких проблем, а 3к - отдельная песня

2.6 это химера, которая должна была стать мостиком между православным 2.5 и 3.1, только что-то затянулось всё до безобразия.

очевидно же, потому что в зависимостях есть

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

Хахаха, такие большие и страшные сложности.

Да нет никаких сложностей. Либо поделку под нож, либо подтыкаем бандл. Либо ждём, когда слоупоки обновят свой потато.

Вы с с/с++ программами никогда в таком разрезе не ковырялись, не?

Ковырялся, несколько лет даже программером работал (асм, ц, плюсы), поэтому, в отличии от некоторых здесь, знаю о чём говорю.

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

Я знал, что ты возбудишься. Но, увы всё мимо. Если ты почитаешь внимательно, то наверное заметишь, что речь шла про UI.

Раньше - держали Perl4 и Perl5. Подожди, пока Perl 6 выйдет.

За 13 лет нигде такого не видел. В базовой установке? Ню-ню. Звездобол.

Доо. Bash, zsh, dash, sh, csh...

Лишь бы что не сказать... Где /bin/bash2, /bin/bash3, /bin/bash4? Ась?

Это именно DLL Hell + проблемы динамических языков.

Поэтому не нужно писать на динамических языках для UI. Больше я здесь никаких тезисов и не выдвигаю. Прототипы — милое дело, для продакшена, где по 10 лет один и тот же стейбл стоит — милое дело, с бандлами — всеми руками за! Но бандл на каждую свистоперделку не повесишь. Пайтон — прекрасный язык, прекрасная читаемость, низкий порог вхождения, возможностей куча, но...

Попробуй собрать что-нибудь нетривиальное на Perl - те же ощущуения.

Например что?

Просто на Perl для Гнома ничего не пишут.

И слава макаронному монстру! Зато петонопейсатели суют свой фетиш во все щели. Ты, кстати, прекрасно знаешь, что я говорил про гном с его питон-байндингами в l-t. Проблема в том, что он туда уже гвоздями намертво приголочен.

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

>> Раньше - держали Perl4 и Perl5. Подожди, пока Perl 6 выйдет.

За 13 лет нигде такого не видел. В базовой установке? Ню-ню. Звездобол.

Утипути. Perl5 старше Линукса, если что. Так что Perl4 и Perl5 держали очень давно. Но держали...

Попробуй собрать что-нибудь нетривиальное на Perl - те же ощущуения.

Например что?

Давно это было, так что я помню только SVK (он еще не был в стандартных пакетах, требовал новых биндингов к SVN).

Доо. Bash, zsh, dash, sh, csh...

Лишь бы что не сказать... Где /bin/bash2, /bin/bash3, /bin/bash4? Ась?

Ты слово «башизм» слышал?

Это именно DLL Hell + проблемы динамических языков.

Поэтому не нужно писать на динамических языках для UI.

На них вообще не надо ничего писать. Но приходится, потому что всё остальное еще хуже.

Просто на Perl для Гнома ничего не пишут.

И слава макаронному монстру!

Слава ему!

Зато петонопейсатели суют свой фетиш во все щели.

Ага, и виноват Питон. И в том, что гномеры решили выпилить Bonobo, тоже виноват Питон.

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

> ога, рассказывайте больше... где-то стоит bash где-то csh

где-то ещё что и всё разных версий :) Не вижу у себя баша трёх версий, наверное плохо смотрел.

ололо, наверное плохо ставили :)

а если серьёзно у меня тоже нет 5 версий питона, но, ЕМНИП, говорили мы с Вами о портируемости приложения, да? если так что я вообще не понял к чему вот Вы это сказали

> с 2.5 и 2.6 вообще никаких проблем, а 3к - отдельная песня 2.6 это химера, которая должна была стать мостиком между православным 2.5 и 3.1, только что-то затянулось всё до безобразия.

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

> Вы с с/с++ программами никогда в таком разрезе не ковырялись, не? Ковырялся, несколько лет даже программером работал (асм, ц, плюсы), поэтому, в отличии от некоторых здесь, знаю о чём говорю.

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

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

> Но бандл на каждую свистоперделку не повесишь.
.
http://www.activestate.com/activepython/ - не так раскручен как .Net - но суть та же. это если мы говорим о вин.
в случае же лин есть пакетные менеджеры. к сишному софту зависимости тянутся запросто, отчего к питонософту им не тянуться?
надеюсь, суть твоих претензий и смысл слова бандл я правильно понял.

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

>>>> ололо, а по высказываниям совсем не заметно :)

может потому что у вас мало еще жизненного опыта?

на этот счёт у анонимов права голоса нет :) регистрируйся и поговорим

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

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

Мы обсуждали конкретную строку, приведеннув качестве примера, не более того. За примерами из жизни сходите на govnokod.ru

Gukl ★★★
()

Питон хейтеры одолевают. Это язык из серии easy to learn, hard to master. И серьезных интырпрайз проектов полно. Например один из самый ярких проектов это еве онлине - 50 тысяч онлайн на едином серве. Клиент(гуй там кстате такой, что хейтеры тоже позавидуют) и сервак на питоне.

И вообще, худейте.

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

> Например один из самый ярких проектов это еве онлине - 50 тысяч онлайн на едином серве.

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

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

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

> Проблема подобная твоей часто встречается у людей начавших изучать распиаренный язык, особенно когда это делается чисто для поднятия ЧСВ)

Поднимать ЧСВ «распеареннуой _хренью_» как-то не очень круто :)

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

>> Тоже самое здесь, <troll>есть вещи и похуже типа Руби</troll>

ну и чем тебе руби не угодил? Мифической медлительностью или красивейшим синтаксисом?

Кому-как. Гомосексуалам красива волосатая мужская жопа. Она мне не красива.

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