Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ruby и Python, Сравнение, а не holy war 
V
    Опции темы
Rubynovich
Дата 8.6.2006, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 7.6.2006

Репутация: 3
Всего: 3



Цитата(Void @ 8.6.2006,  18:11)
Цитата(Rubynovich @  8.6.2006,  19:55 Найти цитируемый пост)
оптимизация быстродействия -- это всегда потеря выразительности кода

Алгоритмической оптимизацией тоже? Предпочтешь O(N^2) алгоритм в две строчки более громоздкому O(N * log(N))? smile

Без раздумий предпочту O(N**2) в одну строчку. Раньше, для меня это было кощунством, но теперь стал понимать, что все равно 100 раз переделывать. Проще будет переписать одну строчку, чем двадцать.  

Оптимизировать можно после сдачи проекта и за отдельную плату. =) 

Это сообщение отредактировал(а) Rubynovich - 8.6.2006, 18:25
PM MAIL   Вверх
Cr@$h
Дата 24.8.2006, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: нет
Всего: 41




M
Cr@$h
Тема выделена из разговора об особенностях Ruby.

PM MAIL ICQ   Вверх
Амортизатор2
Дата 16.12.2006, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 6.2.2006

Репутация: нет
Всего: 2



лямду собираются убирать? кому оно мешало? еще один шаг в сторону от лиспа...
PM MAIL   Вверх
cherep
Дата 16.12.2006, 04:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 11.1.2006
Где: Москва

Репутация: нет
Всего: 4



Лямду не уберут! На гугловской презентации Python3000 Гвидо дал однозначно понять, что он оставит лямбду!

Теперь немного по теме сабжа. Я знакомился с языками по пути Pascal - C - Java - PHP - Perl - Python - Ruby - ...
Вероятно, очевидно, что мой выбор - Python. Перл был очень гибкий, но при этом довольно "страшненький". После Java'ы в Perl'е не хватало нормального человеческого ООП. Работа с хэшами и массивами была отнюдь не так очевидна как в питоне.  Вобщем попав на Python, выучил его на одном дыхании. В нем было все что нужно и главное все было понятно! Поизучав Руби, не нашел чего-то такого, той изюминки, способной пересадить на него. 
В питоне же таких изюминок целых несколько. 
1) Его синтаксис, делающий его пожалуй самым читабельным языком 
2) Очень четкие принципы, заложенные в язык (Zen of Python), и одновременно являющиеся рекомендациями к тому, как писать программы. Надо сказать, очень правильные рекомендации. Еще очень отрадно, что создатель языка (Гвидо ван Россум) принимает самое активное участие в развитии языка, более того, его слово является решающим, правда, не знаю про Matz'а.
Конечно есть такое чувство, что Ruby в каком-то роде более целостный чем Python. Например в Python'е различие классов и типов (последние нельзя менять), немногострочная лямбда. Однако все это мелочи, ибо первое - практически никак не сказывается на практике, а второе не нужно ввиду вышеупомянутой идеологии языка. self - это вовсе не проблема, это лишь отражение того, что explicit is better than implicit. Кстати, в пайтоне возможно множественное наследование, чего в руби нет.
В руби понравились блоки. Жаль только что методу можно передавать только 1 блок. Ведь в smalltalk'е можно было сколько угодно smile. Да и вообще smalltalk более ООП чем руби smile Блин, отвлекся... В пайтоне есть генераторы с yield, но используются они гораздо реже.
Решающими фактороми были, впрочем, распространенность языка и библиотек и более развитая инфраструктура.
А вообще выбор языка - это дело совершенно личное. Если ваш язык вас устраивает, и вы на нем продуктивны - я только рад за вас. Думаю, перловщики с удовольствием перейдут на Ruby. Много языков - это не плохо. Ибо из конкуренции появляется качество smile
 
PM MAIL WWW ICQ   Вверх
Амортизатор2
Дата 7.3.2007, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 6.2.2006

Репутация: нет
Всего: 2



Цитата(cherep @  16.12.2006,  04:37 Найти цитируемый пост)
Да и вообще smalltalk более ООП чем руби



Не скажи. В Smalltalke квалификатор private для методов чисто фиктивный, т е он не запрещает вызов private-метода. По крайней мере так было в VA лет 6 назад, когда я его смотрел. Также отсутствует квалификатор  protected, это вообще ужас - на каждом шагу нужно делать закрытые от прямого вызова методы, которые будут наследоваться. Все это говорит о том, что в Smalltalk нарушена инкапсуляция - один из 3 основных критериев ООП.

Это сообщение отредактировал(а) Амортизатор2 - 7.3.2007, 21:03
PM MAIL   Вверх
FunnyFalcon
Дата 9.3.2007, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 27.3.2006

Репутация: 3
Всего: 7



Цитата

 Все это говорит о том, что в Smalltalk нарушена инкапсуляция - один из 3 основных критериев ООП.

Хммм....
Вопрос ведь не в языке - в любом языке можно извратиться и вызвать защищенный метод, хотя бы исправив *.h :-)
А данные принципы (инкапсуляция, полиморфизм, наследование) были сформулированы позднее, чем появился Smalltalk

К тому же, согласно одному из определений:
Цитата

Инкапсуляция (encapsulation) - это механизм, который объединяет данные и код, манипулирующий этими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования. (http://www.codenet.ru/progr/cpp/ipn.php)

Таким образом, Smalltalk реализует инкапсуляцию в части объединения данных и кода, и делает это получше, чем С++ :-)
PM MAIL   Вверх
Амортизатор2
Дата 10.3.2007, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 6.2.2006

Репутация: нет
Всего: 2



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

Smalltalk более ООП по сравнению с другими языками, т к в нем все есть объекты - даже куски кода. Но на практики это сомнительное преимущество.


PM MAIL   Вверх
max_lapshin
Дата 16.3.2007, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 10.9.2006
Где: Москва

Репутация: 2
Всего: 3



Цитата(Амортизатор2 @ 10.3.2007,  12:50)
Но на практики это сомнительное преимущество.

Сомнительное лично для вас? Тогда советую почитать хорошую литературу про использование ООП.
Вся эта макулатура типа «профессиональное программирование на С++», конечно же яйца выеденного не стоит. Действительно книги про использование ООП - это, например, Рефакторинг кода Фаулера
PM MAIL WWW ICQ Jabber   Вверх
cherep
Дата 21.3.2007, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 11.1.2006
Где: Москва

Репутация: нет
Всего: 4



Амортизатор2, про квалификаторы в Смолтоке вы верно подметили, мне после жавы их очень не хватает (курочу Squeak на досуге) и не только в смоллтолке но и в питоне...
Тут вот была интересная дискуссия на тему квалификаторов в контексте Смолтока, я там как раз отписался (ник xonix).
PM MAIL WWW ICQ   Вверх
JUmPER
Дата 15.6.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



Цитата(cherep @  16.12.2006,  04:37 Найти цитируемый пост)
Кстати, в пайтоне возможно множественное наследование, чего в руби нет

есть mixin'ы
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
Daevaorn
Дата 16.6.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Цитата(Rubynovich @  7.6.2006,  23:50 Найти цитируемый пост)
Скорость выполнения -- сопоставима (где-то выше, где-то ниже).

http://shootout.alioth.debian.org/debian/b...&lang2=ruby
PM MAIL WWW   Вверх
FunnyFalcon
Дата 19.6.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 27.3.2006

Репутация: 3
Всего: 7



Цитата(JUmPER @  15.6.2007,  15:04 Найти цитируемый пост)
Цитата(cherep @  16.12.2006,  04:37 Найти цитируемый пост)
Кстати, в пайтоне возможно множественное наследование, чего в руби нет

есть mixin'ы 

+1
Не берусь утверждать, но по-моему множественное наследование используется в основном в качестве mixin.

Вопрос: кто когда вообще использовал множественное наследование не в качестве mixin?
И, если использовал, нельзя ли было обойтись в этом случае mixin? Какие преимущества у того и другого подхода?
PM MAIL   Вверх
JUmPER
Дата 2.7.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



Цитата(FunnyFalcon @  19.6.2007,  11:43 Найти цитируемый пост)
Какие преимущества у того и другого подхода?

считается, что у другого подхода есть только недостатки, а именно:
- неясность структуры
- возможные проблемы с именами членов
- сложность реализации
и т.д.
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
setq
Дата 2.7.2007, 19:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Уточните)
  Вверх
JUmPER
Дата 3.7.2007, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



из Вики:
Цитата

Множественное наследование — потенциальный источник ошибок, которые могут возникнуть из-за наличия одинаковых имен методов в предках. В языках, которые позиционируются как наследники C++ (Java, C# и др.), от множественного наследования было решено отказаться в пользу интерфейсов. Множественное наследование поддерживается в языке UML.

Большинство современных объектно-ориентированных языков программирования (C#, Java, Delphi и др.) поддерживает возможность одновременно наследоваться от класса-предка и реализовать методы нескольких интерфейсов одним классом. Этот механизм позволяет во многом заменить множественное наследование — методы интерфейсов необходимо переопределять явно, что исключает ошибки при наследовании функциональности одинаковых методов различных классов-предков.

Цитата

It is often criticized for increased complexity and ambiguity, as well as versioning and maintenance problems it can cause (often summarized as the diamond problem).[1] Detractors also point out multiple inheritance implementation problems such as not being able to explicitly inherit from multiple classes and the order of inheritance changing class semantics. There are languages that address all technical issues of multiple inheritance, but the main debate remains whether implementing and using multiple inheritance is easier than using single inheritance and software design patterns.

--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0935 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.