LINUX.ORG.RU
ФорумTalks

[дискас]И все же в чем плюшки Python или Perl?


0

2

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

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

★★★★★

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

Язык программирования — это не женщина, он должен быть логичным и предсказуемым.

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

Язык программирования — это не женщина, он должен быть логичным и предсказуемым.

Согласен. есть такое.

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

Тогда питон — очевидный выбор. Он и предсказуем, и логичен до мозга костей. Есть некоторый набор правил, которым подчиняются все без исключения сущности языка.

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

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

«Аграджаг»

Необычное сравнение с перлом =) После С мне питон показался очень простым, но потом по учебе сказали будем перлом пользоваться, я начал его изучать, вообще если не смотреть на его «мутантность» и «многозубие» то он тоже чем-то хорош, но если, как вы и сказали, подойти более строго к программированию, к стабильности, к предсказуемости, то у перла есть проблемы. Надеюсь когда выпустят 6 версию, в перле будет поменьше этих проблем с мутациями.

sol13 ★★★★★
() автор топика

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

Tark ★★
()

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

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

Сленга, мата, малопонятных шуток и мемов. А главное, если ты ошибаешься одной буквой в шутке — выдает тебе такое непонятное сообщение об ошибке, что чувствуешь, как будто тебя только что обос...ли с головы до ног, но не знаешь, за что, и недоумеваешь — вроде все правильно, что ему не так? Все равно, что на ЛОРе про религию или женщин общаться.

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

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

Да, ворочается. Даже конференции проводятся, и молодежь (до 40 лет) присутствует...

Я тоже что-то там пописываю...

shimon ★★★★★
()

вот попробовал написать код:

import random

def fu(l):
	L=[0.4, 0.5, 0.9, 1.0, 1.4, 1.8, 2.1, 2.3, 2.6, 3.0]
	A=[0.08, 0.1, 0.19, 0.22, 0.51, 1.69, 1.87, 1.06, 0.44, 0.19]
	rangelist = range(10)
	i=0
	W=0
	for i in rangelist:
		W+=(1.97/(1+10*(L[i]-l)*(L[i]-l))-A[i])*(1.97/(1+10*(L[i]-l)*(L[i]-l))-A[i])
		i=i+1
	return W
a=0.4
b=3.0
new=b-a
anew=a
bnew=b
Q=range(100)
rangelist1 = range (100)
while abs(anew-bnew) > 0.01:
	j=0
	for j in rangelist1:
		r = random.Random()
		Q[j]= r.randint(4, 500)
		Q[j]= anew+(new)*(Q[j]+1)/500
		j = j+1

	k=0
	m1=0
	m2=0
	for k in rangelist1:
		m1= fu(Q[k])
		m2= fu(Q[0])
		if m1 < m2 :
			Q[0]=Q[k]
		k=k+1
		
	new=0.2*(b-a)
	print "new= %s\n"%new
	anew=Q[0]-new/2
	if anew<a:
		anew=a
	bnew=Q[0]+new/2
	if bnew>b:
		bnew=b
print "Optimal lambda0= %s\n"%Q[0]

писал как представляю программу на С.

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
float f(float dl){
	int i;
	float W=0;
	float L[10]={0.4,0.5,0.9,1.0,1.4,1.8,2.1,2.3,2.6,3.0};
	float A[10]={0.08,0.1,0.19,0.22,0.51,1.69,1.87,1.06,0.44,0.19};
	for (i=0;i<10;i++) {
	W+=(1.97/(1+10*(L[i]-dl)*(L[i]-dl))-A[i])*(1.97/(1+10*(L[i]-dl)*(L[i]-dl))-A[i]);
	}
    return W;
}

int main (){
	float L0[100];
	float a, b, anew, bnew, new;
	int j;
	a=0.4;
	b=3.0;
	new=b-a;
	anew=a;
	bnew=b;
	while ((fabs(anew-bnew) > 0.01)){
		b=bnew;
		a=anew;

		srand(4);
		for (j=0;j<100;j++) {
			L0[j]=rand()%500;
			L0[j]=anew+(new)*(L0[j]+1)/500;
		}

		for (j=1;j<100;j++) {
			if (f(L0[j]) < f(L0[0])) {
				L0[0]=L0[j];
			}
		}
		new=0.2*(b-a);
		printf("new= %f\n",new);
		anew=L0[0]-new/2;
		if (anew<a) {
			anew=a;
		}
		bnew=L0[0]+new/2;
		if (bnew>b) {
			bnew=b;
		}
	}
	printf("Optimal lambda0= %f\n", L0[0]);
    return 0;
}

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

sol13 ★★★★★
() автор топика
Ответ на: комментарий от sol13
Q=range(100)
j=0
for j in rangelist1:
  r = random.Random()
  Q[j]= r.randint(4, 500)
  Q[j]= anew+(new)*(Q[j]+1)/500
  j = j+1

./facepalm.py

писал как представляю программу на С.

представляйте на питоне. разберитесь как работают for и списки.

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

представляйте на питоне. разберитесь как работают for и списки.

понял. постараюсь.

sol13 ★★★★★
() автор топика

«Любая нетривиальная программа на Си или Фортране содержит кривую, глючную и медленную реализацию половины Common Lisp» (c)

Так вот перл — это та самая «кривая, глючная и медленная», но, всё-таки, гораздо прямее, чем способно написать подавляющее большинство программистов.

Почему не сразу Лисп? Да потому что человеку свойственно квадратно-гнездовое мышление! Пойди туда, сделай то, повторяй, пока не. Всё-таки, я считаю, компьютер для человека, а не наоборот.

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

У тебя нет строк, аналогичных

=) Точно забыл. теперь все гуд.

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

Почему не сразу Лисп?

Не знаю почему. Я на втором курсе пытался с ним «подружиться», но как-то не получилось. Может попробую еще раз. Но все равно после C как-то порой трудновато в других языках мне.(а говорят должно быть наоборот.)

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

Разобрался с for, понял кривизну, заменил.

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

> а Ruby, Python, Lua, PHP - нет

что значит «использовать многоядерность»? если я пущу два процесса питона на одну задачу и сделаю каждому строгий алайнмент под конкретный процессор/ядро - это будет «использовать многоядерность»?

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

мне ближе как-то tcl ))
вот пример кода создающего равномерную нагрузку в ~40% на каждое из трех ядер моего CPU:

package require math::bignum
# Factorial example
proc fact n {
# fromstr is not needed for 0 and 1
set z 1
for {set i 2} {$i <= $n} {incr i} {
set z [::math::bignum::mul $z [::math::bignum::fromstr $i]]
    puts $z;
}
return $z
}

puts [::math::bignum::tostr [fact 5000]]

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

а в переводе на русский язык :
при использовании интенсивного ввода/вывода и вычислений ,можно порвать пистон как тузик тряпку и даже не прибегая к использованию tclthread
на многоядерных CPU.))

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

shimon> Тогда питон — очевидный выбор. Он и предсказуем, и логичен до мозга костей.

Он не столько логичен, сколько практичен.

Quasar ★★★★★
()

>а пишу все же на С =(

Тогда объяснять бесполезно, ты уже встал на темную сторону Силы.

А плюшек у Перла много, например не надо закорачиваться с преобразованием типов, указателями, встроенные регэкспы, продвинутые возможности вызова внешних программ, наличие модулей на все случаи жизни. И стринги Си - жуткий отстой =) А если привыкнешь к такми вещам как переменная $_ так вообще си каменным веком покажется.

Многое зависит от задач, перл очень хорош для обработки текста во всех формах для сего собственно и создавался. Ну и субъективно язык более человеческий - лексемы сравнительно длинные, можно делать сложносочиненные «предложения», в общем если привыкнуть почти что естественный язык с его контекстами.

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

> Он и предсказуем, и логичен до мозга костей.

Питон предсказуем но нелогичен. Логики в нем не больше чем в бейсике.

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

>что значит «использовать многоядерность»? если я пущу два процесса питона на одну задачу и сделаю каждому строгий алайнмент под конкретный процессор/ядро - это будет «использовать многоядерность»?

Ну в этом случае возможности системы используешь ты а не язык. Вот если бы ты просто сложил два массива а компилятор разбил бы процесс сложения на несколько потоков...

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

Многонитевость такая многоядерность.

еще: http://stackoverflow.com/questions/1002440/which-scripting-languages-support-...

perl и tcl умеют использовать многоядерность CPU, а Ruby, Python, Lua, PHP - нет.

Такое поведение наблюдается только в венде или в GNU/Linux тоже? Кстати, автор говорит, что так себя ведут не только Ruby и Python, но даже Erlang.

While the application is perfectly multithreaded, unsurprisingly it uses only one CPU core. Regardless of the fact that most modern scripting languages support multithreading, scripts can run on one CPU core only.

Ruby, Python, Lua, PHP all can only run on a single core. Even Erlang, which is said to be especially good for concurrent programming, is affected.

Camel ★★★★★
()

Пишу в основном на С и перл. Перл плюшевый в том, что даёт возможность писать меньше, последнее время часто стал использовать кодогенерацию, что тоже избавляет от необходимости писать тонны кода на все случаи жизни. В общем как и положено языку более высокого уровня, чем С, перл даёт возможность писать меньше и по делу:) Одно но, за это приходится платить производительностью. С питоном та же фигня.

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

> Тогда питон — очевидный выбор. Он и предсказуем, и логичен до мозга костей. Есть некоторый набор правил, которым подчиняются все без исключения сущности языка.

очевидный выбор для чего?

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

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

Если отставить позади все стереотипы, почему на нём не писать? Поддерживается он относительно нормально, с кросплатформенностью всё ок, достаточно выразителен.

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

Не надо так сразу идиализировать лисп. Вот тут на главной новость про глубоко ограждённую среду реализацию того самого CL. Даже если не брать в расчёт чисто CL, а добавить к нему возможность выбирать SCHEME ещё, то наберётся не так уж много эффективных реализаций(которые генерируют хоть какой-то нативный код), да ещё и кросплатформенных. Те, что без генерации кода, ваще не вариант, потому что мы получаем тот же перл с точки зрения производительности, зато со скобочками, что некоторых людей почему-то разрадражает. Но даже если не брать в расчёт скобочки, то всё равно мы получаем тот же перл:) Ну или наоборот, кому как нравится. А если копнуть чуть глубже, и посмотреть на выхлопы того же ecl, chicken и тд, то можно увидеть там довольно много говна, до оптимальной кодогенерации им как до луны. Да, это лучше, чем байткодоязыки, но хуже, чем скажем vala и уж точно хуже явы.

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

ixrws ★★★
()

по сравнению с си - встроенные в синтаксис тупли, списки и словари; автоматическая работа с памятью; динамическая типизация; генераторы; классы. ну и биндинги с библиотекам типа Qt со всеми этими фичами.

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

olegsov
()

>[дискас]И все же в чем плюшки Python или Perl?

[дискас]И все же в чем плюшки Python или girl?

fixed. Так интереснее.

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

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

annulen ★★★★★
()

>питон долгое время, а вот перл только начал

А какой смысл в наше время изучать Перл после Питона? :) Второй почти повсеместно вытеснил первый и намного более правилен.

Я сегодня Перл используют только в исключительных случаях, когда под него библиотеки, скажем, удобнее (например, Image::ExifTool намного лучше, чем PIL.ExifTags). Но это только потому, что итак знаю и тот, и другой. Но если не знать Perl, то я не вижу сегодня стимулов, чтобы его изучать :)

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

>вообще если не смотреть на его «мутантность» и «многозубие» то он тоже чем-то хорош

Чем-то хорош любой язык, даже Брейнфак или Шекспир. Но у Перла много генетических недостатков, которые сильно затрудняют его долговременное использование в чём-то сложнее простых скриптов :)

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

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

Тогда уже PHP. А то конструкции, вида:

push(@{$stat{$lens}{'data'}}, $info{'FocalLength'});
# ...
foreach my $focal (@{$stat{$lens}{'data'}})

доставляют, когда их пишешь :)

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

>> Чтобы на нем программировать.

что программировать?


Драйвера, embedded-решения, ядро операционной системы - очевидно же ;)

KRoN73 ★★★★★
()

Вся инфраструктура создания пакетов, инсталлер и т.д, ... в Debian основано на perl .
Одного этого уже достаточно для минимального изучения perl и долгого его существования.

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

Ваше объяснение мне даже больше нравится, чем моё.

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

можно немного облегчить себе жизнь, если не ставить кавычки внутри {}. А еще, в перле прекрасные функции для работы с массивами, можно делать вещи вроде

($dir) = grep { -d $_ } map { "$_/log/" } sort @dirs;

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

>можно немного облегчить себе жизнь, если не ставить кавычки внутри {}

Когда-то также в PHP было. Потом это стало NOTICE. Так что я стараюсь на воду дуть :D

А еще, в перле прекрасные функции для работы с массивами, можно делать вещи вроде


Да они и в Python есть, и в PHP... Только не с таким птичьим синтаксисом :) На Perl хорошо по-быстрому небольшой скрипт набросать. Опять же, время стартапа скрипта у него из минимальных. А вот долго поддерживать большой проект - это ад :)

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

> Язык программирования — это не женщина, он должен быть логичным и предсказуемым.

Если женщина для тебя непредсказуема, то ты просто лузер и девственик

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

>А какой смысл в наше время изучать Перл после Питона? :) Второй почти повсеместно вытеснил первый и намного более правилен.

Очень толсто

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