Ruby @ восходящее солнце

Alexandre

PHPПенсионер
у меня другие цели в жизни, кроме как выучиться и стать мега-супер пупер программистом
HraKK, а не поделишься ли своими целями, в личке?
а то, может я не правильно живу???

А что есть в питоне чего нету в пхп?
в питоне есть куча поддержки разных библиотек, которые не реализованны в пхп
 

HraKK

Мудак
Команда форума
А разве есть понятие правильно живу или нет?
 

Alexandre

PHPПенсионер
например? интересно
xmlsec, rabbitmq
эти две, которые мне понадобились, на самом деле их гораздо больше
в частности недавно (нашему админу, назввание не скажу) понадобилась библиотека по консистентному кешу. libketama не подходит.
что ни новая технлогия, на питоне уже все готовенькое...
 

zerkms

TDD infected
Команда форума
что ни новая технлогия, на питоне уже все готовенькое...
консистентность поверх произвольной библиотеки кеширования реализуется за 15 минут. и это не "новая технология".
 

Sherman

Mephi
>в питоне есть куча
Согласен. Идиотский синтаксис и кривая внутренняя реализация. Можно вспомнить, например, GIL.
 

Sherman

Mephi
2daevaorn

Вот простой пример. Это же write only.

В примере map сортируется по значению.

Код:
#!/usr/bin/python
import sys

map = {
        'aa':10000000,
        'bb':51,
        'bb':32,
        'cc':8,
        'xx':933,
        'yy':11
}

def sortByValue(map):
        return [(elt[0], elt[1]) for elt in sorted(map.items(), key = lambda(elt) : -elt[1])]

print sortByValue(map)
Насчет GIL, если не понимаете почему, почитайте сначала о нем что-нибудь:
http://www.dabeaz.com/python/GIL.pdf

Но, если серьезно говорить, то конечно субъективно все. Просто мне вот не нравится python и синтаксически, и за динамическую типизацию, и за нестройность стандартной библиотеки, за то что строки не unicode(вроде бы в 3 пофиксили), за семантическую нагрузку на проблемы и табы, и даже за свои собственные кейворды, за то что там нету параметрического полиморфизма(или есть?).

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

daevaorn

Новичок
Sherman
Ясно. Спасибо. Всё вкусовщина.


PS: print sorted(map.items(), reverse=True, key=lambda pair: pair[1])
 

Sherman

Mephi
2daevaorn

Ну как сказать, если часть действительно вкусовщина, то часть претензий объективна. На питон беcсмысленно пытаться писать многопоточные _высокопроизводительные_ программы, а иногда это бывает нужно(не вебом единым).
Отсутствие статической типизации и параметрического полиморфизма очень сильно влияют на процесс программирования. Первое, не заметно в маленьких скриптах, но в больших системах, коду писать надо больше, засчет бОльшего кол-ва тестов(любая ошибка может бахнуть в runtime) и опять же, многие вещи может проверять компилятор, а не человек. Второе же является превосходным средством _выразительного_ обобщенного программирования.
 

daevaorn

Новичок
> На питон беcсмысленно пытаться писать многопоточные _высокопроизводительные_ программы, а иногда это бывает нужно(не вебом единым).

Почему бессмысленно? То что иногда это не эффективно, не значит что это бессмысленно вообще.

> Первое, не заметно в маленьких скриптах, но в больших системах, коду писать надо больше, засчет бОльшего кол-ва тестов

Тысты надо писать всегда. И я не вижу сильного увеличения их числа из-за динамической природы питона.

> Второе же является превосходным средством _выразительного_ обобщенного программирования.

Что вы подразумеваете под "параметрическим полиморфизмом", которого, как вы счистаете, в питоне нет?
 

AmdY

Пью пиво
Команда форума
Автор оригинала: HraKK
у меня другие цели в жизни, кроме как выучиться и стать мега-супер пупер программистом.
+1
какая разница какого цвета велосипед, главное, чтобы было кому букет на 8-го марта подарить.
 

kode

never knows best
Автор оригинала: daevaorn
Что вы подразумеваете под "параметрическим полиморфизмом", которого, как вы счистаете, в питоне нет?
Я думаю он предполагает параметрический полиморфизм аля Java:

Код:
public void MyMethod(Bar foo){
   return 1;
} 

public void MyMethod(Foo bar){
   return 0;
}
Должен заметить что похапе так тоже не умеет :)
 

Fortop

Новичок
Должен заметить что похапе так тоже не умеет
Омг...
public void & return 1; - это сильно

но помимо этого
PHP:
public function MyMethod($fooOrBar) {
    if (!is_object($fooOrBar)) {
        throw new Exception('Object required');
    }
    switch (get_class($fooOrBar)) {
        case 'Foo':
            $result = 1;
            break;
        case 'Bar':
            $result = 0;
            break;
        default:
            $result = -1;
            break;
    }
    return $result;
}
Думаю, такое же можно сделать и в Python'е
 

nerezus

Вселенский отказник
Можно вспомнить, например, GIL.
На одноядерной системе это не зло. А в момент разработки питона многоядерных не было.

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

На питон беcсмысленно пытаться писать многопоточные _высокопроизводительные_ программы, а иногда это бывает нужно(не вебом единым).
Бред.
Youtube? Eve online?

например? интересно
Qt. Одно из основных применений.

А честно, если бы выбор ЯП мне довелся не 4 года назад, а сейчас, то я даже не смотрел бы в сторону PHP и выбрал бы питон для веба.
 

Sherman

Mephi
Под параметрическим полиморфизмом я имею в виду не перегрузку функций, или какие-то php-хаки, а параметрический полиморфизм. Отличается такой полиморфизм от ad-hoc полиморфизма тем, что в нем реализуется одно действие на семейство типов(не обязательно связанных общих предком, то есть все валидные типы не обязаны проходить тест is-a).

Пример на java:

Код:
public <T> void method(T value)
{
 // doing something with T;
}
Duck typing в языке с дин. типизацией я не считаю равноценной заменой, так как это очень небезопасно(ошибку можно поймать только в runtime).

2nerezus
Потоки != процессам.
 

Fortop

Новичок
Пример на java:
// doing something with T;
Мда, а можно подробнее раскрыть это "doing something"?
И попутно про семейство типов.

Они должны иметь общего предка? Или реализовывать какой-то общий интерфейс?
 

nerezus

Вселенский отказник
> Потоки != процессам.
Да. И это я говорю вам.
В пхп нет потоков.
GIL в потоках.
 

Sherman

Mephi
2Fortop
Doing something - не относится к теме беседы. Но тем не менее, пример контейнера(c++):

Код:
template <class T>
class Stack
{
public:
	Stack();
   	void push(T value);
   	T pop();
private:
   int topPointer;
   T values[100];
};
Stack<int> stack;
stack.push(2);

Про реализацию(в разных языках есть серьезные отличия) почитайте лучше самостоятельно, так интереснее. Поддержка есть в c++, java, c#, например.

Вообще, мне бы не хотелось, дискутировать на тему, зачем нужен такого рода полиморфизм. Вопрос был в том, есть ли что-то подобнон в питоне или нет. Про duck typing я знаю.

-~{}~ 10.03.10 17:44:

Автор оригинала: nerezus
> Потоки != процессам.
GIL в потоках.
Эээ, ну и? Блокировка-то глобальная для всех потоков. В чем суть вашего замечания?
 
Сверху