
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.52] |
![]() |
|
Сообщ.
#1
,
|
|
|
Ребят, стоит ли изучать Делфи в свете продажи линейки Борландом? Будет ли данная среда поддерживаться? И будут ли программисты этой среды востребованы?
|
![]() |
Сообщ.
#2
,
|
|
Цитата Emerald @ стоит ли изучать Делфи в свете продажи линейки Борландом? нет. Цитата Emerald @ Будет ли данная среда поддерживаться? да. Цитата Emerald @ И будут ли программисты этой среды востребованы? нет. ЗЫ все - ИМХО, естественно. |
Сообщ.
#3
,
|
|
|
Цитата jack128 @ нет. а что тогда стоит изучать при таком раскладе??? ![]() |
Сообщ.
#4
,
|
|
|
Цитата olga90 @ а что тогда стоит изучать при таком раскладе??? c++ ![]() JAVA ![]() |
![]() |
Сообщ.
#5
,
|
|
Если рассматривать ту область, где доминирует дельфи(бух), то наверно .NET ...
|
Сообщ.
#6
,
|
|
|
Цитата olga90 @ а что тогда стоит изучать при таком раскладе??? ![]() VB.NET и C# |
Сообщ.
#7
,
|
|
|
Всё это очень прискорбно.
![]() ![]() |
Сообщ.
#8
,
|
|
|
Было бы унизительно думать, что Дельфи - это только среда для бухгалтрских прог. Пусть этим мусором занимается теперь .Net. А я вот думаю, что среди засилья .Net-программ Delphi запросто может продвинуться в прикладном и массовом секторе, в том числе и за счет
Цитата min@y™ @ Total Commander, TheBat!, QIP а также множества других коммерческих программ. Ведь Delphi ничуть не сложнее шарпа (а как по мне даже проще и очевиднее), а по уровню удобства и наличию готовых компонентов - на голову выше. И у Борланд огромные планы - адаптация под Висту, генерация 64-битного кода. Пока Дельфи будет развиваться, у этого языка и среды будет своя аудитория. А бухгалтерские проги - это не то, что прибавляет Delphi славы. Наоборот, часто те, кто их делает и являются столь известными "кнопкокидальщиками" и приносят Delphi только дурную славу. Цитата min@y™ @ Delphi может затухнуть навсегда Никогда ![]() ![]() |
Сообщ.
#9
,
|
|
|
Цитата Smike @ Цитата min@y™ @ Delphi может затухнуть навсегда Никогда ![]() ![]() Е-мае... У меня аж слезы навернулись. Ей-богу! |
Сообщ.
#10
,
|
|
|
Цитата Albinos_X @ Скорее уж C# и J#... c++ JAVA ![]() Вот подождем официального релиза Vista и посмотрим, насколько там можно будет на дельфах пописать... |
Сообщ.
#11
,
|
|
|
Цитата Testudo @ Вот подождем официального релиза Vista и посмотрим, насколько там можно будет на дельфах пописать... Уже сейчас можно ![]() |
Сообщ.
#12
,
|
|
|
Если честно, то возможности современной Делфи приближаются к возможностям того же Билдера/С++? И что даст переход на новую платформу Висты? И почему язык программирования иногда называют профессиональным? Что делает язык таковым? Почему С - да, а вот паскаль - нет? Мне просто интересно, только без флейма...
|
Сообщ.
#13
,
|
|
|
Emerald
Цитата Emerald @ Если честно, то возможности современной Делфи приближаются к возможностям того же Билдера/С++? Делфи и Билдер равны. А вот VC отличается, только тем, что изначально царь горы. Цитата Emerald @ И что даст переход на новую платформу Висты? Время покажет. Цитата Emerald @ почему язык программирования иногда называют профессиональным? Что делает язык таковым? Почему С - да, а вот паскаль - нет? Потому, что не разбираются. Си - является стандартом, в программирование. Си и Паскаль равны. Другое дело, что Си развивается быстрее, чем Паскаль. Даже скорее не быстрее, а более развит в прикладном смысле. Но это не заслуга языка, а заслуга определенного компилятора. |
Сообщ.
#14
,
|
|
|
Цитата Emerald @ Почему С - да, а вот паскаль - нет? Потому что С появился вовремя ? ![]() IMHO сейчас в лидерах интерпретируемые языки: JAVA, Python etc... Просто в них намного удобнее работа с памятью а отсюда простота отладки. Опять же распространенность переносимость и истинная кроссплатформенность (в отличие .NET ![]() К примеру тот же Python. ![]() 1) Не нужно обьявлять типы переменных ![]() 2) Нет скобок begin end или подобных операторов их роль играет фарматирование текста а точнее отступ от левого края. 3) Не нужно преобразование типов переменных обо всем заботится Python (если очень надо то можно делать самому). 4) Оди и тот же код работает на любых Windows-ах, Linux-ах, Unix-ах... без изменений в самом коде вот это я называю кроссплатформенностью. Учтя только преречисленные особенности языка нетрудно представить во сколько раз упрощается исходный текст программы. К примеру у меня реализация консольного приложения по одному алгоритму на Delphi выходит в три раза длинее по числу строк чем на Python. Просто потому что многое из ручной работы в Delphi берет на себя Python. А "Почему С - да"? У каждого языка есть своя специфическия область применения и свои характерные только для этого языка задачи. То что на С займет 5-6 страниц кода на bash один оператор ![]() ![]() ЗЫ : Об этом Цитата Emerald @ я скромно промолчу И что даст переход на новую платформу Висты? ![]() |
Сообщ.
#15
,
|
|
|
ЗЫ Да и сами переменные в Python можно не обьявлять
|
Сообщ.
#16
,
|
|
|
Цитата Emerald @ Наверное, потому что паскаль изначально был специально разработан для ОБУЧЕНИЯ программированию, а не для профессиональных разработок И почему язык программирования иногда называют профессиональным? Что делает язык таковым? Почему С - да, а вот паскаль - нет? ![]() |
Сообщ.
#17
,
|
|
|
Цитата best_lamer @ ЗЫ Да и сами переменные в Python можно не обьявлять И ты считаешь это достоинством?! ![]() Добавлено Цитата Emerald @ И почему язык программирования иногда называют профессиональным? Что делает язык таковым? Почему С - да, а вот паскаль - нет? Почему ты решил, что Паскаль - не профессиональный язык? Простая логика: профессиональное - это что-то, чем пользуются профессионалы. Профессионалы - люди, которые с помошью этого чего-то зарабатывают деньги (это их профессия). Я - профессиональный программист на Delphi. Какой вывод? ![]() Может, ты хотел сказать "промышленный"? Тогда это то, чему учат в учебных заведениях. Тут, кстати, интересная ситуация: в ВУЗах учат тем инструментам, которые применяются на производстве, в промышленности. А что применяется в промышленности? То, чему учат в ВУЗах, конечно. ![]() |
Сообщ.
#18
,
|
|
|
Си имеет спецификацию ANSI, а вот паскаль - нет. Правда такой спецификации нет и у C++...
|
Сообщ.
#19
,
|
|
|
Цитата Testudo @ Си имеет спецификацию ANSI, а вот паскаль - нет. Правда такой спецификации нет и у C++... ANSI Pascal есть. И Delphi с ним совместим. Думаешь, почему System.pas не пишется в uses? ![]() И стандарт C++ тоже есть, уже с прошлого века (98 год, если память не изменяет). Вот у Object Pascal нет стандарта, это язык одного производителя. Вот если бы Борланд лицензировал спецификации другим, то можно было бы подумать о стандарте. |
Сообщ.
#20
,
|
|
|
Цитата Testudo @ Наверное, потому что паскаль изначально был специально разработан для ОБУЧЕНИЯ программированию, а не для профессиональных разработок Не факт! Assembler изначально создан для программирования и он наааааамного более высокопрофессиональный чем все версии Си вместе взятые тем не менее покажи человека который по своей доброй воле будет решать в нем задачи которые на том же Си решаются в два счета. Цитата Romkin @ И ты считаешь это достоинством?! ![]() Аха ![]() Сколько занимает в коде обьявление переменных? А потом еще преобразования типов. А сколько ошибок все это вместе влечет у начинающих (и у бывалых) программистов? Если мне нужна новая переменная я просто пишу ![]() ![]() new_var=100 там где это надо по тексту программы и все у меня есть новая переменная ![]() Частый глюк - нехватка виртуальной памяти... (причина надеюсь понятна? ![]() Еще Python различает верхний и нижний регистр. Потом мне к примеру не составит труда сделать такое ![]() ![]() a=complex(1.13,1.85)#a=1.13+j1.85 b=10 print c=a+b И мне не надо ни о чем заботиться ![]() ЗЫ: Теперь немного классики ![]() 0) Три переменных x, y, z надо преравнять нулю ![]() ![]() x=y=z=0 1) Поменять значения переменных a и b местами (те то что было в a будет в b и наоборот) ![]() ![]() a,b=b,a 2) Бросание игральных костей ![]() ![]() import random def dice(num,sides)# num - число костей sides - число сторон каждой кости return reduce(lambda x,y,s=sides:x+random.randrange(s), range(num+1))+num Кто сможет проще и нагляднее милости прошу ![]() |
Сообщ.
#21
,
|
|
|
best_lamer И, казалось бы, при чем здесь Питон?
Цитата best_lamer @ Сколько занимает в коде обьявление переменных? А потом еще преобразования типов. А сколько ошибок все это вместе влечет у начинающих (и у бывалых) программистов? Ошибок? Странно, мне всегда казалось, что явное описание всех переменных уменьшает их количество. Тот, кто два часа отлаживал программу на GW-Basic, а потом обнаружил, что ошибка в том, что в одном месте в имени вместо "0" "0" написано, я думаю, предпочтет строгие объявления ![]() Цитата best_lamer @ Частый глюк - нехватка виртуальной памяти... Э? Это - глюк? ![]() |
Сообщ.
#22
,
|
|
|
Цитата best_lamer @ Уж лучше они будут объявлены. Покрыйней мере будет сразу понятна область их видимости.Сколько занимает в коде обьявление переменных? А по поводу труда, связанного с их объявлением, дык в Delphi2006 это делается одним клава-сочетанием... ![]() Добавлено Цитата best_lamer @ 0) Три переменных x, y, z надо преравнять нулю x=y=z=0 ![]() ![]() var x,y,z:byte; *** ZeroMemory(@x,3); ![]() |
Сообщ.
#23
,
|
|
|
Цитата best_lamer @ Потом мне к примеру не составит труда сделать такое ![]() ![]() a=complex(1.13,1.85)#a=1.13+j1.85 b=10 print c=a+b И мне не надо ни о чем заботиться ![]() ![]() V := VarComplexCreate(1.13,1.85); b := 10; ShowMessage(V + b); Скучно... Да еще необязательность объявления переменных в сочетании с регистрозависимостью имен... Чур меня ![]() |
Сообщ.
#24
,
|
|
|
Цитата Romkin @ Э? Это - глюк? Это - кривые ручки! Вот вот... ![]() ![]() Ребятааааааа ![]() ![]() ![]() Program examples; {APPTYPE CONSOLE} uses {и это все что надо...} var {и тут тоже...} begin V := VarComplexCreate(1.13,1.85); b := 10; ShowMessage(V + b); end. И только потом хвастаться краткостью простотой и красотой решения. ![]() Цитата Testudo @ var x,y,z:byte; *** ZeroMemory(@x,3); У меня x y и z могут иметь любые типы Romkin ухватил правильно в Delphi самое похожее именно Variant! А так ничего классно ![]() Цитата Romkin @ Скучно... Лады чтоб скучно не было приведу примерчик посолиднее. ![]() Печатаем первые n чисел дядьки Фибоначчи ![]() ![]() def fib(n):#функция дядьки Фибоначчи x,y=0,1 while y<n: print y x,y=y,x+y # вызов функции fib(200) #На выходе имеем: 1 1 2 3 5 8 13 21 34 55 89 144 |
Сообщ.
#25
,
|
|
|
Цитата best_lamer @ def fib(n):#функция дядьки Фибоначчи x,y=0,1 while y<n: print y x,y=y,x+y ![]() ![]() function Fib(n: integer): integer; begin if n>1 then Result := Fib(n - 1) + Fib(n - 2) else Result := 1; end; |
Сообщ.
#26
,
|
|
|
Цитата best_lamer @ Ребятааааааа Testudo Romkin у меня приведены полностью работоспособные программы на Python выполняющие требуемые действия. Попрошу приводить полностью! belochub ![]() |
Сообщ.
#27
,
|
|
|
best_lamer А какая разница, полностью или нет?
![]() ![]() program Project2; {$APPTYPE CONSOLE} uses VarCmplx; var V: Variant; b: Double; begin V := VarComplexCreate(1.13,1.85); b := 10; WriteLn(V + b); end. И что из этого следует? Я, по крайней мере, вижу типы переменных. А какой тип у твоей переменной b? Она целая или с плавающей точкой? Можно ли сравнивать два значения? И можешь ли ты так же легко сделать, например, векторную арифметику, как и комплексную? Краткость никогда не являлась преимуществом. Читабельность и контроль над кодом гораздо важнее. И по сравнению с этим отсутствие необходимости писать "лишние" строки - ничто. Да, программист должен быть ленивым. Но эта лень должна быть конструктивной, а не тупой выбор "тута буков меньше". Нет уж. И "хвастаться простотой и краткостью" я не собираюсь. И измерять я ничего не собираюсь, нафиг мне это надо? |
Сообщ.
#28
,
|
|
|
Цитата Romkin @ И измерять я ничего не собираюсь, нафиг мне это надо? Ну и правильно, человечество давно уяснило, что размер не главное ![]() |
Сообщ.
#29
,
|
|
|
Цитата Romkin @ Я, по крайней мере, вижу типы переменных. А какой тип у твоей переменной b? Она целая или с плавающей точкой? Переменная b в том примере целая ибо b=10 если бы я написал b=10.0 или b=10e0 то был бы вещественный. А вообще при желании явно работать с типами ![]() ![]() b=10e0 print b #вещественное print int (b) #целое print float (b) #вещественное #выдаст 10.0 10 10.0 Покажи мне задачу где тип переменной играет роль. Цикл? На Delphi/Pascal в конструкции вида ![]() ![]() for variable:=1 to 10 do begin end; понятное дело что variable должна быть integer эта же строчка на Python ![]() ![]() for variable in range (1,11): не суть важно чему была равна variable до этой строчки но после этой строки переменная будет содержать список variable=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] элементов целых от 1 до 10 дальше все как и в Delphi. Цитата Romkin @ Можно ли сравнивать два значения? Можно ![]() ![]() ![]() a=10 b=20.0 if b>a: print "b>а !!!" #выдаст b>а !!! Цитата Romkin @ И можешь ли ты так же легко сделать, например, векторную арифметику, как и комплексную? Без проблем сразу с матрицами пойдет? ![]() ![]() ![]() #это начало собственно программы #импорт необходимого from Matrix import * from Numeric import * m = Matrix( [[1,0,1],[0,2,1],[2,22,34]]) print m print m*m print transpose(m) print m**-1 #а ее это конец # вывод программы #m Matrix([[ 1, 0, 1], [ 0, 2, 1], [ 2, 22, 34]]) #m*m Matrix([[ 3, 22, 35], [ 2, 26, 36], [ 70, 792, 1180]]) #транспонированная m [[ 1 0 2] [ 0 2 22] [ 1 1 34]] #m^-1 Matrix([[ 1.0952381 , 0.52380952, -0.04761905], [ 0.04761905, 0.76190476, -0.02380952], [-0.0952381 , -0.52380952, 0.04761905]]) Могу усложнить если надо ![]() ![]() Цитата Romkin @ И "хвастаться простотой и краткостью" я не собираюсь. Да и не надо. Просто попробуй тот же пример (с комплексными) на Pascal а не на Delphi с Variant-ами ![]() Добавлено Цитата Romkin @ best_lamer А какая разница, полностью или нет? Просто так нагляднее видно на сколько мне на Python работы меньше ![]() А если серьезно то я привожу текст полностью работоспособной программы + результат (в большинстве случаев) ![]() ЗЫ Кому бы руки поотбивать за настройки расцветки в коде Python? ![]() Да еще и цветом не выделяется ![]() |
![]() |
Сообщ.
#30
,
|
|
best_lamer, нечестно ты играешь...
Смотри сюда: Цитата best_lamer @ #это начало собственно программы #импорт необходимого Я тебе с этим самым "импортом необходимого" могу точно такую же программу привести, как и у тебя - ничуть не длиннее (FPC 2.0.0, если тебя это интересует, только вот какой будет этот "импорт" тебя не должно интересовать, договорились?) |
Сообщ.
#31
,
|
|
|
Цитата Romkin @ Краткость никогда не являлась преимуществом. Читабельность и контроль над кодом гораздо важнее. И по сравнению с этим отсутствие необходимости писать "лишние" строки - ничто. Правильно. Примерно то же самое пишут в своей книге "Практика программирования" Брайан У. Керниган и Роб Пайк. |
Сообщ.
#32
,
|
|
|
Цитата best_lamer @ А вообще при желании явно работать с типами Это преобразование. Контроля типов, насколько я понял, нет. Цитата best_lamer @ Цитата (Romkin @ Сегодня, 14:44) Можно ли сравнивать два значения? Можно Я, вообще говоря, имел в виду сравнение на равенство. И вот в этом случае очень важно знать, что именно у тебя получилось, целочисленная переменная или с плавающей точкой. Как ты думаешь, почему в Delphi не пишут программы, используя только тип Variant? Ведь подходит, объявляй переменные, не думая? Цитата best_lamer @ Без проблем сразу с матрицами пойдет? Замечательно. Значит, мат. библиотеки есть. А можно средствами языка написать такую же, с перекрытием операторов? Цитата best_lamer @ Да и не надо. Просто попробуй тот же пример (с комплексными) на Pascal а не на Delphi с Variant-ами Угу. А еще на ассемблере можно... Или с закрытыми глазами попробовать код отладить... Может, надо брать инструмент, который к задаче подходит? В общем, спасибо за информацию, некоторое представление я получил о языке. Добавлено volvo877 У него импорт написан, две библиотеки. Интересно только, написаны ли эти библиотеки на Питоне, и есть ли исходники. Но, впрочем, особых преимуществ я не увидел. Представление о языке получил, начальное. |
Сообщ.
#33
,
|
|
|
Цитата volvo877 @ best_lamer, нечестно ты играешь... Почему собственно? Я ничего не имел против Цитата Romkin @ uses VarCmplx; А в этих двух строчках Цитата best_lamer @ from Matrix import * from Numeric import * Python-овский аналог uses. В чем собственно заключаеться "нечестная игра" ? ![]() Есть модули (как на Python так и на Delphi или еще чем то) мы их используем. В чем проблема? Народ интересовал синтаксис и реализация конкретных проблем я использовал Numeric-Python(из него использую класс Matrix и мат операции с ним) модуль такой же как его подобие Math в Delphi так что не вижу причин для обвинений. ![]() Цитата volvo877 @ FPC 2.0.0, если тебя это интересует, только вот какой будет этот "импорт" тебя не должно интересовать, договорились? Э неее не пойдет. Все что я приводил можно использовать где угодно. Оно уже работоспособно даже в том виде в каком оно есть сейчас. И в моих примерах нет никаких завуалированных подвохов. А раз уж быть настолько щепитильными то для примера Цитата Romkin @ program Project2; {$APPTYPE CONSOLE} uses VarCmplx; var V: Variant; b: Double; begin V := VarComplexCreate(1.13,1.85); b := 10; WriteLn(V + b); end. Нужен Delphi и модуль VarCmplx(и кстате не только он еще Variants это даже без компилятора помню) а в моем нужен Python и только модуль Numeric-Python. Еще раз повторюсь все что я здесь выше приводил это полные готовые и роботоспособные примеры программ!!! Хотите могу переделать со своими собственными классами и модулями (это понятное дело займет время) только тогда чур ![]() ![]() uses System, VarCmplx, Variants... etc ![]() ![]() Добавлено Цитата Romkin @ Контроля типов, насколько я понял, нет. Тип переменной определяется типом присваиваемого ей значения. Тип переменной не является неизменным. Любое присвоение для переменной корректно. Т.е. как такового контроля нет. Все на себя берет Python. Тем не менее ошибку отловить не проблема... её допустить сложнее. В этом смысле Python напоминает Basic. Цитата Romkin @ Я, вообще говоря, имел в виду сравнение на равенство. И вот в этом случае очень важно знать, что именно у тебя получилось, целочисленная переменная или с плавающей точкой. Тут логика такая «припариваться» округлением или контролем нет смысла. Тип переменной будет таким каким мы ее введем до тех пор пока мы ее принудительно не приведем к другому типу. Цитата Romkin @ Как ты думаешь, почему в Delphi не пишут программы, используя только тип Variant? Ведь подходит, объявляй переменные, не думая? Python язык более высокого уровня чем Delphi, Pascal, C, C++, Java (он от всех их произошел)... В Python каждая переменная по умолчанию это Класс а не Тип! Romkin на Python забудь о Типе как о страшном сне. Цитата Romkin @ Замечательно. Значит, мат. библиотеки есть. А можно средствами языка написать такую же, с перекрытием операторов? Ну если так хочется то да. Исходники открыты наследовался от нужных классов переопределил все что надо и в путь. Цитата Romkin @ В общем, спасибо за информацию, некоторое представление я получил о языке. Да не за что. Цитата Romkin @ volvo877 У него импорт написан, две библиотеки. Интересно только, написаны ли эти библиотеки на Питоне, и есть ли исходники. Написаны на Python. Естественно есть. Сам интерпретатор Python написан на Си исходный код доступен. Библиотеки как правило на самом Python либо Си+ Python но в любом случае все доступно в исходниках. |
Сообщ.
#34
,
|
|
|
Скажу свое имхо.
Программистом я работаю на вольных хлебах (я геодезист вообщето). Так вот заказщику абсолютно побоку на чем написана прога - работает, не глючит, делает что надо - зашибись! Вы ж ему не исходники даете, а екзешку. Ну продали они линейку, ну не будет навых версий делфи, от етого что, у вас делфи автоматически деинсталировалось? Нравитса делфи - пишите на делфи. Не хватает возможностей - книгу по асму в зубы и дерзать! Даже если делфи не будут разробатывать дальше, она продержитса еще лет 10 - ето я могу гарантировать. Вот вспомните, чего вас учили в институте? Пусть первый, кто скажет что небыло в учебной программе делфи, пусть бросит в меня монитором! Немного путано получилось, но думаю вы поняли мои сумбурные мысли. |
Сообщ.
#35
,
|
|
|
Цитата best_lamer @ Python язык более высокого уровня чем Delphi, Pascal, C, C++, Java (он от всех их произошел)... В Python каждая переменная по умолчанию это Класс а не Тип! Romkin на Python забудь о Типе как о страшном сне. Повешу на стенку крупными буквами. Весь отдел будет лежать ![]() Нет слов. А компилятор Питона-то есть? Или все - интерпретатор? Ты правильно подметил, что это похоже на Бейсик. Это он и есть, в современной версии. Все, что я увидел, это язык, пригодный для первоначального обучения программированию, не более. Он прост по синтаксису и имеет свойства, которые очень нравятся новичкам ![]() Цитата Woland @ Так вот заказщику абсолютно побоку на чем написана прога - работает, не глючит, делает что надо - зашибись! Вы ж ему не исходники даете, а екзешку. А это как в договоре описано, бывает, что и исходники, это даже иногда предпочтительнее: сопровождение в этом случае лежит на заказчике. Цитата Woland @ Вот вспомните, чего вас учили в институте? Пусть первый, кто скажет что небыло в учебной программе делфи, пусть бросит в меня монитором! И брошу ![]() Параллельно - Паскаль и С, в качестве самообразования. Замечаю: ANSI версии, и то подмножество ANSI C было. Но мыслишь в правильном направлении. Впрочем, перейти на другой язык не так уж сложно ![]() |
Сообщ.
#36
,
|
|
|
Цитата Romkin @ Повешу на стенку крупными буквами. Только для начала представь себе Delphi в котором каждая variable=class причем по дефольу (!) хош ты того али нет. Нормальное кино? Как полегчает можеш вешать и не забудь указать номер моей ICQ пущай стучацца найдем общие темы ![]() Цитата Romkin @ А компилятор Питона-то есть? Или все - интерпретатор? Python интерпретируемый язык. При желании можно портировать python >> Cи даже софтину для этого видел. Потом есть еще приблудина (под виндовс) та может exe файлы собирать (но меня оно не трогает ибо я под Linux) Цитата Romkin @ Ты правильно подметил, что это похоже на Бейсик. Это он и есть, в современной версии. Все, что я увидел, это язык, пригодный для первоначального обучения программированию, не более. Он прост по синтаксису и имеет свойства, которые очень нравятся новичкам Присмотрись повниметельнее. ![]() ![]() Ну по поводу васика ![]() А вообще если сравнивать сложные встроенные типы данных которыми обладает к примеру Delphi (Васик) (массивы, записи, файлы, классы) и Python... то в Python за исключением записи (которую можно реализовать через классы) к примеру выбор намного больше (не считая перечисленного: списки, кортежи, словари...). В Python нет прямого аналога массива немного извращаться надо. И потом я уже говорил повторюсь в Python любая переменная это класс (а не тип). В том примере (с комплексными числами) оператор complex() инициирует класс комплекслных чисел... Короче для обучения он подходит но кроме самого Python надо полюбому давать что то еще. Иначе всех прелестей Pythona человек просто не заметит и воспримит все как должное а потом столкнувшись к примеру с С уйдет в анабиоз ![]() У новичков от таких пирогав моСк закипит ![]() Добавлено Цитата Romkin @ Пусть первый, кто скажет что небыло в учебной программе делфи, пусть бросит в меня монитором! И брошу ![]() ![]() ![]() |
Сообщ.
#37
,
|
|
|
Цитата Woland @ Кто сказал, что не будет? Ты топик внимательно читал? Сказано же было: линейку будут развивать те же программисты, но уже в собственной отдельной компании. Ну продали они линейку, ну не будет навых версий делфи, от етого что, у вас делфи автоматически деинсталировалось? |
Сообщ.
#38
,
|
|
|
Цитата Testudo @ Кто сказал, что не будет? Ты топик внимательно читал? Сказано же было: линейку будут развивать те же программисты, но уже в собственной отдельной компании. И потом полюбому останется FPC |
Сообщ.
#39
,
|
|
|
Цитата best_lamer @ IMHO сейчас в лидерах интерпретируемые языки: JAVA, Python etc... Интерпретируемые языки фтопку. Добавлено Я вообще не понимаю, почему речь зашла о Питоне. Бест_ламер только этот язык знает? Delphi не является интерпретируемым языком, следовательно уже на голову выше. |
Сообщ.
#40
,
|
|
|
Цитата Smike @ Интерпретируемые языки фтопку. Ну это безусловно АРГУМЕНТ. Romkin вот ЭТОТ перл рядом с моим повесь PLZ ![]() Цитата Smike @ Бест_ламер только этот язык знает? Бест_ламеру этот язык очень нравиццо! Цитата Smike @ Delphi не является интерпретируемым языком, следовательно уже на голову выше. ![]() Smike выше по тексту есть несколько примеров. Уж если есть такое желание показать крутость Delphi пожалуйста приведи то же что и у меня только на КРУТЕЙШЕМ Delphi (только чур приводи весь пример целиком потому как у меня приведены тоже целые готовые и работоспособные программы). Smike специально для тебя повторю еще раз - Python но голову выше: Delphi, C, C++, C#, Java и любого другого языка хотябы только потому что в Python все переменные по умолчанию хочеш ты того или нет есть КЛАССЫ те variable=class ! ЗЫ: А вообще хочеш холивара создавай в холиваре "Интерпретируемые языки VS Компилируемые языки" ![]() |
Сообщ.
#41
,
|
|
|
А зачем? Ну хорошо, вот есть статья, в которой описана структура данных, фактически - динамический набор символов (стек).
Писал я программу в ней с чувством, толком, и отладкой (не так, как пономарь ![]() Можешь реализовать этот объект на Питоне? |
![]() |
Сообщ.
#42
,
|
|
Цитата best_lamer @ На Delphi/Pascal в конструкции вида for variable:=1 to 10 do begin end; понятное дело что variable должна быть integer не совсем так... она должна быть Ordinal type, а в последних версиях Delphi и Set Of и даже Class(?). Цитата best_lamer @ Без проблем сразу с матрицами пойдет? насколько я помню в стандартной поставке Delphi нет модуля для работы с матрицами давай с нуля, а? например умножение матриц... Цитата best_lamer @ Python но голову выше: Delphi, C, C++, C#, Java и любого другого языка хотябы только потому что в Python все переменные по умолчанию хочеш ты того или нет есть КЛАССЫ те variable=class ! накладные расходы на эти "красивости" каковы? |
Сообщ.
#43
,
|
|
|
Цитата best_lamer @ Smike выше по тексту есть несколько примеров. Уж если есть такое желание показать крутость Delphi пожалуйста приведи то же что и у меня только на КРУТЕЙШЕМ Delphi (только чур приводи весь пример целиком потому как у меня приведены тоже целые готовые и работоспособные программы). Я то думал, что язык нужен, чтобы эффективно решать задачи, а не ради его красоты, простоты. А если эта его красивость возможна только при динамической линковке в памяти, то далеко на этом языке не уедешь. Из-за всех эти приблуд терять на производительности и используемой памяти? Кстати, я считаю, что верх совершенства языка - это возможность написания на нем себе подобных. Компиляторы C++ пишутся на C++, среда Delphi пишется на Delphi. Питон же на C++ написан, а писать на нем компилятор, при всей его красоте - задачу ну очень неблагодарная именно из-за низкой производительности выходного продукта. |
Сообщ.
#44
,
|
|
|
Цитата Python но голову выше: Delphi, C, C++, C#, Java и любого другого языка хотябы только потому что в Python все переменные по умолчанию хочеш ты того или нет есть КЛАССЫ те variable=class ! Насколько я помню высказывания моего друга, который пишет на С++, в этом языке (С++) типы тоже классы. (могу конечно что-то перепутать, но вряд ли). |
Сообщ.
#45
,
|
|
|
Delphi теперь не особо популярен.
Если у тебя выбор между направлением: С или Pascal,то иди по C линии. Востребованность гарантирована. Добавлено Цитата Soul ![]() в этом языке типы тоже классы ? |
Сообщ.
#46
,
|
|
|
Цитата Woland @ Вот вспомните, чего вас учили в институте? Пусть первый, кто скажет что небыло в учебной программе делфи, пусть бросит в меня монитором! Я бы бросил и НЕ ПОЖАЛЕЛ МОНИТОРА, но не знаю вектора ![]() ![]() ![]() ![]() Цитата Искандер В. @ Delphi теперь не особо популярен Работать легко??? Легко. Проблемы решаются??? В меру знаний тонкостей!!! И плевать заказчику (цитата WOLAND'A) на чем написана программа.Emerald Я скажу так - припрет все изучишь. До тонкостей!!! Лучше самого Дяди Билла будешь знать!!!! А если такой вопрос задаешь - Цитата Emerald @ Ребят, стоит ли изучать Делфи в свете продажи линейки Борландом? --Значит не приперло, радуйся что жизнь оставила время подумать и сделать выбор, и если есть время то уж не брезгуй, пожалуйста , разбирайся в ДЕЛЬФИ, пока есть время. Ведь, как сказал Кырла-Мырла, кажется, "Жизнь не спросит, что ты учил, а спросит, что ты знаешь!". И за место под Солнцем придется бороться с таким же как я, и возможно, драться насмерть, а тут все средства хороши - и ДЕЛЬФИ в том числе в запасе иметь не помешает. ![]() ![]() ![]() З.Ы.Ну и речь толкнул, прям на пленум выдвигай!!! ![]() ![]() ![]() |
Сообщ.
#47
,
|
|
|
Цитата Romkin @ Можешь реализовать этот объект на Питоне? Разберусь в статье... (разобрался) Так прочитал. А теперь по поводу реализации на Python... 1) Отдельные элементы строки в Python неизменны. Если надо то меняем всю строку целиком. 2)В Python "от греха" нет указателей на память как таковых. Они есть но в спрятанном от глаз виде.. короче с извратом до указателей добраться можно вот только смысл? Python позволяет подобное и без всяких классов реализовать ![]() ![]() ![]() def print_SetOf(SetOf): """Жуткая функция печатаем SetOf""" for variable in range(0,len(SetOf)): print SetOf[variable] #Присвоили str=['a',2,3] #Вывели print "Первый вывод" print_SetOf(str) #добавили элемент str.append('Вася супер стар') print "Второй..." print_SetOf(str) str.remove('a') print "Третий..." print_SetOf(str) А теперь ее вывод ![]() ![]() Первый вывод a 2 3 Второй... a 2 3 Вася супер стар Третий... 2 3 Вася супер стар Цитата Shaggy @ она должна быть Ordinal type, а в последних версиях Delphi и Set Of и даже Class(?) Хвала последней Delphi ![]() ![]() Цитата Shaggy @ давай с нуля, а? например умножение матриц... Накладно это... да и к чему? Я тут при чем 8) что в Delphi нет класса нормальных матриц? Обьясни глубокий смысл создания того что и так существует проверенно не одним программером и прекрасно справляется со своими обязанностями? (блин привыкли по виндовзу...) ![]() ![]() Цитата Shaggy @ накладные расходы на эти "красивости" каковы? Python – интерпретатор. (те время исполнения кода) Цитата Smike @ Из-за всех эти приблуд терять на производительности и используемой памяти? Smike тебе критична скорость работы твоего проекта? Тогда только чистый ассемблер ибо он и только он самый быстрый в скорости по сравнению с чем угодно. Мне говоря откровенно по большему счету наплевать за 0,1 сек. или за 0,5 секунд выполнится мой код. Зато я точно уверен в том что мой код будет без изменений работать на всех осях под которые существует интерпретатор Python. Цитата Smike @ Кстати, я считаю, что верх совершенства языка - это возможность написания на нем себе подобных. Компиляторы C++ пишутся на C++, среда Delphi пишется на Delphi. Питон же на C++ написан, а писать на нем компилятор, при всей его красоте - задачу ну очень неблагодарная именно из-за низкой производительности выходного продукта. Smike – Python is NOT компилятор is интерпретатор! И он кстати реализован не только на С еще есть Jython - Python реализованный на Java... Smike разорви меня в клочья!!! ![]() ![]() #simple example for Smike A="ПРЕВЕД" B="Я МЕДВЕД" #вывели на печать A потом -:- и B print A,'-:-',B #что характерно поменяли содержимое A B местами A,B= B,A #<<<This is Python Power #опять вывели на печать A потом -:- и B print A,'-:-',B и вывод... ![]() ![]() ПРЕВЕД -:- Я МЕДВЕД Я МЕДВЕД -:- ПРЕВЕД Давай по существу можешь проще реализовать тоже самое на Delphi? |
![]() |
Сообщ.
#48
,
|
|
Цитата best_lamer @ да и к чему? Я тут при чем 8) что в Delphi нет класса нормальных матриц? Обьясни глубокий смысл создания того что и так существует проверенно не одним программером и прекрасно справляется со своими обязанностями? мы же языки сравниваем или vcl&rtl vs что там в Питоне вот и покажи так сказать всю мощь ![]() |
Сообщ.
#49
,
|
|
|
Цитата best_lamer @ Хвала последней Delphi ![]() ![]() А что, по твоему в последней BDS только .Net? У меня Delphi for .Net даже не стоит. JEDI JCL стоит, установилось нормально и легко. JVCL не пользуюсь, уж больно overhead большой, а результат маленький. Цитата best_lamer @ Smike тебе критична скорость работы твоего проекта? Тогда только чистый ассемблер ибо он и только он самый быстрый в скорости по сравнению с чем угодно. Для меня критична не столько скорость, а результирующий вектор из нескольких составляющих: 1) скорость разработки 2) удобство разработки 3) скорость и эффективность работы результата разработки Пока этот вектор указывает в сторону Delphi. Цитата best_lamer @ И он кстати реализован не только на С еще есть Jython - Python реализованный на Java... Все, можно вешаться. Java для меня неприличное слово. |
Сообщ.
#50
,
|
|
|
Цитата Shaggy @ вот и покажи так сказать всю мощь Считай что уговорил ![]() Создаю матрицу вида (это кстати результат работы программы) ![]() ![]() 0 0 1 1 2 2 3 3 4 4 Собственно ![]() ![]() #! /usr/bin/python """array.py -- A array example. """ class Array: def __init__(self, x, y): self.x = x self.y = y tmp = [] for i in range(5): obj = Array(i, i) tmp.append(obj) for tmpsub in tmp: #print "X is", tmpsub.x, "Y is", tmpsub.y print tmpsub.x, tmpsub.y Дальше чего с массивом делать будем? И Shaggy кстати как там по поводу примеров на делфи без модулей System, Math к примеру? Потому как я щаз сделал то же самое ![]() |
Сообщ.
#51
,
|
|
|
Цитата best_lamer @ Shaggy кстати как там по поводу примеров на делфи без модулей System, Math к примеру? Цитата best_lamer @ Без модуля Math - да что угодно!все равно что без array... А вот без System (впрочем, как и без array) - это уже, извини, бред. System - не есть модуль. Это, так сказать, часть самого языка Delphi - его отличие от Object Pascal ![]() |
Сообщ.
#52
,
|
|
|
Цитата best_lamer @ Разберусь в статье... (разобрался) Так прочитал. А теперь по поводу реализации на Python... 1) Отдельные элементы строки в Python неизменны. Если надо то меняем всю строку целиком. 2)В Python "от греха" нет указателей на память как таковых. Они есть но в спрятанном от глаз виде.. короче с извратом до указателей добраться можно вот только смысл? Python позволяет подобное и без всяких классов реализовать Прочитал, но не разобрался. Где там у меня указатели? Я там в классе только со строкой общаюсь, специально взял ее для простоты. Ты прочитал только введение? Оно несущественно. Если проблемы с доступом к отдельному символу строки - ничто не мешает реализовать динамическую таблицу, например, чисел. Стек - он и есть стек. А смысл в том, что в приведенной структуре время добавления-удаления элемента O(1) (в смысле амортизационной стоимости). Вопрос: а ты знаешь, какова стоимость вставки элемента в set, время поиска элемента в наборе и тд? Я не говорю, и не говорил, что Delphi - крутой язык. Я говорю, что Питон отнюдь не превосходит ни Delphi, ни Java, ни C, ни какой либо другой язык из своей категории. У него есть своя ниша, и говорить, что это - замена всему, глупость. Этот язык неплох для обучения программированию, и написания небольших программ, например, лабораторных работ. Для чего-то серьезного он не подходит, он небезопасен. И говорить, что Питон - язык более высокго уровня, чем Delphi - тоже глупость. Языком более высокого уровня, чем процедурные, является, например, SQL. И разница видна сразу. |
Сообщ.
#53
,
|
|
|
Цитата Testudo @ Без модуля Math - да что угодно! Да я не о том я решил операции с массивом без использования массивов (запись + стек) на Delphi без Math вполне можно обойтись особенно если сама программа не сильно привяна к математике. Цитата Romkin @ Стек - он и есть стек. Вот именно и на Python городить для стека класс это бред. «Динамическая таблица» ![]() ![]() a=[] a.append("q") a.append("r") print a ![]() ![]() >>> ['q', 'r'] И все вот тебе стек! Надо тебе строки? ![]() ![]() a.append("тут свою строку") Надо вложенный стек в стеке (массив) сделать? ![]() ![]() a.append(переменная_с_вложенным_стеком) Что не так? К примеру разберу по косточкам то что я сделал для массива Класс Array реализует аналог типа Запись из Delphi. Цитата best_lamer @ class Array:{на самом деле это банальная Запись} def __init__(self, x, y): self.x = x self.y = y Этот кусок создает переменную tmp (типа стек из записей) и заполняет ее числами... Цитата best_lamer @ tmp = [] for i in range(5):{for i:=0 to 5 do} obj = Array(i, i) {заполняем запись переменной от 0 до 4} tmp.append(obj){tmp – стек ! я могу добавлять удялять и тд Все как у стека} {в данном случае append добавление в стек} Ну и вывод на печать Цитата best_lamer @ for tmpsub in tmp: print tmpsub.x, tmpsub.y Цитата Romkin @ а ты знаешь, какова стоимость вставки элемента в set, время поиска элемента в наборе и тд? ![]() Цитата Romkin @ Я не говорю, и не говорил, что Delphi - крутой язык. Я говорю, что Питон отнюдь не превосходит ни Delphi, ни Java, ни C, ни какой либо другой язык из своей категории. У него есть своя ниша, и говорить, что это - замена всему, глупость. Опять пустые слова... Я и не говорю что он замена всему. Он элегантнее красивее проще и на голову выше всех языков. Считаешь иначе? Я приводил кучу примеров и Смайка просил «обломать» меня... Не надо классов записей массивов и скорости. Просто есть 2 переменные поменяй их значения местами и все это покажет какой из языков более изящен ! На Delphi для обмена нужна лишняя переменная а это лишние затраты памяти и быстродействия! Или я не прав? И по тенденции развития... то к чему Delphi только приходит в Python есть от рождения. Еще по поводу Delphi VCL обожает Strings (и ему подобное) тогда как математический аппарат с числами в виде строк считать не умеет... те характерно для Delphi следующая схема: ВВОД (строка)- ПРЕОБРАЗОВАНИЕ СТРОКА->ЧИСЛО – Собственно расчет – ПРЕОБРАЗОВАНИЕ ЧИСЛО -> СТРОКА – ВЫВОД Не беря во внимание ввод/вывод вопрос какого лешего я должен уделять внимание не тому что меня интересует в первую очередь (собственно расчету) а преобразованию типов? И ли в самом процессе преобразования типов сокрыт какой то тайный сакральный смысл постичь который обязанность каждого программиста? На Python преобразованием типов я не занимаюсь если это мне не нужно по самому алгоритму. ![]() ![]() Цитата Romkin @ Для чего-то серьезного он не подходит, он небезопасен. Пример в студию. |
Сообщ.
#54
,
|
|
|
Цитата best_lamer @ На Delphi для обмена нужна лишняя переменная а это лишние затраты памяти и быстродействия! Ох, как заговорил ![]() Цитата best_lamer @ Еще по поводу Delphi VCL обожает Strings (и ему подобное) тогда как математический аппарат с числами в виде строк считать не умеет... те характерно для Delphi следующая схема: ВВОД (строка)- ПРЕОБРАЗОВАНИЕ СТРОКА->ЧИСЛО – Собственно расчет – ПРЕОБРАЗОВАНИЕ ЧИСЛО -> СТРОКА – ВЫВОД Интересно, на чем основан такой вывод. Для хранения нестроковых данных есть TList. Ты вот лучше расскажи, как можно на Питоне например написать компонент вроде VCL? Добавлено Кстати, есть способо обмена чисел без дополнительных переменных, но там 3 действия. |
Сообщ.
#55
,
|
|
|
Цитата Smike @ А я умею Ох, как заговорил А что, Питон такой чудесный, что умеет обменивать значение переменных без дополнительных переменных? ![]() ![]() ![]() ![]() procedure TForm1.Button1Click(Sender: TObject); var s1,s2:DWord; begin s1:=10; s2:=55; ShowMessage(IntToStr(s1)+':'+IntToStr(s2)); s1:=s1 xor s2; s2:=s1 xor s2; s1:=s1 xor s2; ShowMessage(IntToStr(s1)+':'+IntToStr(s2)); end; |
Сообщ.
#56
,
|
|
|
Цитата Smike @ А что, Питон такой чудесный ![]() Цитата Smike @ Кстати, есть способо обмена чисел без дополнительных переменных, но там 3 действия. ![]() ![]() Цитата Smike @ Ты вот лучше расскажи, как можно на Питоне например написать компонент вроде VCL? Я лучше покажу ладно? Могу (лично тебе по секрету, блату и за огромные деньги) рассказать как поиметь любой компонент VCL Delphi из Python-a. Добавлено Смайк ![]() ![]() Цитата Smike @ ВВОД (строка)- ПРЕОБРАЗОВАНИЕ СТРОКА->ЧИСЛО – Собственно расчет – ПРЕОБРАЗОВАНИЕ ЧИСЛО -> СТРОКА – ВЫВОД "ВВОД" Цитата Testudo @ s1:=10; s2:=55; "ПРЕОБРАЗОВАНИЕ" Цитата Testudo @ IntToStr(s1)+':'+IntToStr(s2) "Собственно расчет" Цитата Testudo @ s1:=s1 xor s2; s2:=s1 xor s2; s1:=s1 xor s2; И все это в Delphi сплошь и рядом ![]() |
Сообщ.
#57
,
|
|
|
Цитата best_lamer @ Цитата (Smike @ Сегодня, 12:31) Кстати, есть способо обмена чисел без дополнительных переменных, но там 3 действия. ![]() ![]() суть вопроса была не в этом, а в том, что в python так или иначе один из этих способов используется - Цитата best_lamer @ затраты памяти и быстродействия |
Сообщ.
#58
,
|
|
|
Цитата best_lamer @ Уж лучше это будет видно, а не скрыто. Контроль над кодом всегда нужен.И все это в Delphi сплошь и рядом А вообще, сравнивать эти два языка - бессмысленно. Они разных уровней. Таким же манером можно сравнивать и delphi и ассемблером. Простая операция на делфи c:=a+b; на ассемблере будет иметь огромный вид (ведь кроме самого сложения нужно еще учитавать возможность переполнения). С другой стороны, если я знаю наверняка, что переполнения не будет, то код на ассемблере это упростит. А вот делфи я никак не заставлю не делать эту проверку ![]() |
Сообщ.
#59
,
|
|
|
Цитата Testudo @ А вот делфи я никак не заставлю не делать эту проверку Ну почему? Есть же директива компилятора, check overflow. Другое дело, что всегда все рекомендуется проверять ![]() |
Сообщ.
#60
,
|
|
|
Цитата Testudo @ Они разных уровней. ![]() Я думаю так если продолжать дальше конструктивно то другое дело а так как разговор скатывается в холивар есть смысл продолжать в холиваре это моё мнение. |
Сообщ.
#61
,
|
|
|
Цитата best_lamer @ Стек - он и есть стек. Вот именно и на Python городить для стека класс это бред. «Динамическая таблица» Дальше говорить бессмысленно. То ты говоришь, что все, что есть - это классы, то "городить класс". Я не просил тебя написать именно красс, я просил реализацию абстрактной структуры данных "динамическая таблица". Это структура обеспечивает хранение информации изменяемого размера, обеспечивая среднее время вставки/удаления элемента O(1), за счем использования двойного размера памяти. А что в ней лежит - да что угодно, например, очередь с приоритетами на основе двоичной кучи. Если ты говоришь, что такая структура (та, что в статье) уже есть - дай описание, с асимптотикой. Если тебя это не привлекает - реализуй что-нибудь другое, например, биномиальную кучу. Сам. Код для нее найти просто ![]() Цитата best_lamer @ Для чего-то серьезного он не подходит, он небезопасен. Пример в студию. Ну какой пример? Того факта, что нет контроля типов - уже достаточно, чтобы я ЭТО не применял. Думаешь, почему я в свое время выбрал именно Паскаль? Потому что в нем, в отличие от С и Бейсика жесткий контроль типов. Потом, в С++, контроль все-таки ввели. И отсутствие контроля типов нравится только новичкам. Когда начинается серьезная работа - сразу начинает действовать принцип "чем больше я отловлю ошибок на этапе компиляции - тем меньше мне придется ловить багов при выполнении". И не понимаю я смысла сравнивать скриптовый язык, изначально созданный для обучения, с профессиональным компилятором. У них просто весовые категории разные. Добавлено Я уже не говорю о том, что блоки определяются отступами. Для учашегося - это нормально, прививает хороший стиль. Для меня - циклы-то иногда длинными бывают, чуть сдвинул в конце не туда, что, трассировать? Листинг проверять трудненько будет. |
![]() |
|
|
Чувствую пора в Холивар.
![]() Парень спросил про то,изучать ли ему Дельфи. Вот лично мой ответ и дмуаю его многие поддержат: Языки на основе С,на данный момент более востребованы,нежели ветка языков основанных на Pascal'е. (я уже не говорю про такой *****зм как линия Basic) Но C,соответственно сложнее. |
Сообщ.
#63
,
|
|
|
Цитата Romkin @ я просил реализацию абстрактной структуры данных "динамическая таблица" Она приведена! ![]() ![]() Цитата Romkin @ То ты говоришь, что все, что есть - это классы, то "городить класс". Пойми для этой задачи на Delphi без класса никак. На Python как я уже говорил переменная=класс которому доступны уже предопределенные методы. Есть стандартные классы: очереди, стека. И для их реализации не нужно создавать еще что то эти классы по дефолту доступны любой переменной (точно также как и все методы этих классов может использовать любая переменная). Сама переменная может хранить элемент любого мыслимого типа (точто также и отдельный элемент стека может содержать что угодно: текст, еще один стек... я не знаю) В общем "Python Tutorial" глава "5. Data Structures" если вас не затруднит. А потом задавайте вопросы ![]() Цитата Romkin @ Для чего-то серьезного он не подходит, он небезопасен. Пример в студию. Ну какой пример? Если человек говорит "он небезопасен" то он подразумевает что на этоя языке можно совершить нечто потенциально опасное... так? Меня это естесственно заинтересовало и я попросил привести "Пример в студию." бог с ним с Python-ом а вообще алгоритм реализация которого несет угрозу чему либо... невозможна по каким либо причинам... как еще понятнее? И я получаю ответ "Ну какой пример?". Пример реализация которого без явного контроля типов на Python станет "небезопасной". Так устроит? А по поводу этого: ![]() Цитата Romkin @ И не понимаю я смысла сравнивать скриптовый язык, изначально созданный для обучения, с профессиональным компилятором. У них просто весовые категории разные. Давай сюда PS Кстати рекомендую ознакомится ![]() |
![]() |
Сообщ.
#64
,
|
|
Примеры..
Ну тревиальный: TOKEN = 'одвсводаовд' print T0KEN подобную ошибку я на VBA два часа искал. Потом узнал про Option Explicit и нашел мгновенно... |
Сообщ.
#65
,
|
|
|
Цитата best_lamer @ Цитата (Romkin @ Сегодня, 15:13) я просил реализацию абстрактной структуры данных "динамическая таблица" Она приведена! Ты всегда читаешь только первый абзац? Вот смотри, что я написал во втором: Цитата Romkin @ Если ты говоришь, что такая структура (та, что в статье) уже есть - дай описание, с асимптотикой. ![]() Цитата best_lamer @ Есть стандартные классы: очереди, стека. Есть. Какой расход памяти и какая асимптотика то есть какие затраты на вставку/извлечение? В STL это тоже все есть. Но когда я спрашиваю программиста С++ об этом, он мне четко отвечает. Разницу чувствуешь? Цитата best_lamer @ Пример реализация которого без явного контроля типов на Python станет "небезопасной". Я говорил о небезопасности для программиста, а не AV. Это несколько разные вещи. Что мне мешает в Питоне ошибиться в названии переменной, и потом пару часов искать ошибку? Что мне мешает ошибится в том, какой на данный момент тип имеет данная переменная, и получить из--за этого неверный результат? В общем, диалог абсолютно пустой. |
Сообщ.
#66
,
|
|
|
Цитата best_lamer @ Пойми для этой задачи на Delphi без класса никак. Где ты такой чуши поднабрался? Без класса подобное тоже очень легко реализуется. Я писал в свое время матричную арифметику на TP5, без всяких классов. И матрицы у меня были размерностью, если память не изменяет, до 20000х20000 элементов типа double (здесь нет лишних ноликов!). Проблемы были в том, чтобы найти машину с подходящим диском, но никак не в отсутствии ООП. |
Сообщ.
#67
,
|
|
|
Цитата Romkin @ Что мне мешает в Питоне ошибиться в названии переменной, и потом пару часов искать ошибку? Сам Python ![]() Цитата jack128 @ Примеры.. Ну тревиальный: TOKEN = 'одвсводаовд' print T0KEN jack128 Для удобства я для ВАС даже строки пронумеровал! ![]() ![]() TOKEN = 'одвсводаовд'#Строка 1 print T0KEN#Строка 2 Запускаю на выполнение читаю: Цитата Отлаживаемая программа выбросила исключение unhandled NameError "name 'T0KEN' is not defined" Файл: /'тут был путь'/temp.py, строка 2 С этим вопрос исчерпан? (перед запуском на исполнение идет собственно процесс отладки и поиска ошибок и в этом плане Python дааааааалеко не Васёк) Еще идеи касательно «нетривиальных» подводных камней есть? Цитата Romkin @ Я говорил о небезопасности для программиста, а не AV. Для программиста так для программиста давай!!! Цитата Romkin @ Есть. Какой расход памяти и какая асимптотика то есть какие затраты на вставку/извлечение? В STL это тоже все есть. Но когда я спрашиваю программиста С++ об этом, он мне четко отвечает. Разницу чувствуешь? Ни этим «Какой расход памяти» ни этим «какие затраты на вставку/извлечение» специально не интересовался. Но думаю что если пойти на этот сайт то при желании эту информацию можно без проблем отыскать. (у мну диалап поэтому прошу прощения но искать для ВАС у меня просто нет времени) |
![]() |
Сообщ.
#68
,
|
|
Цитата best_lamer @ И Shaggy кстати как там по поводу примеров на делфи без модулей System, Math к примеру? примеры чего? говори, напишу... |
Сообщ.
#69
,
|
|
|
Цитата Shaggy @ примеры чего? говори, напишу... Да хотя бы те же массивы без Array ![]() |
![]() |
Сообщ.
#70
,
|
|
непонял
![]() начиналось то с чего? сравниваем возможности языка и неиспользуем модули, DLL etc. т.к. я и в Delphi могу например Uses Чего-то там ... супер-пупер действие ты имитируешь работу с массивом, потому что его поддержки нет в Питоне, но в Delphi-то Array встроен, это возможность языка, а не фишка какой-нибудь либы... |
Сообщ.
#71
,
|
|
|
Цитата Shaggy @ непонял начиналось то с чего? сравниваем возможности языка и неиспользуем модули, DLL etc. т.к. я и в Delphi могу например Uses Чего-то там ... супер-пупер действие ты имитируешь работу с массивом, потому что его поддержки нет в Питоне, но в Delphi-то Array встроен, это возможность языка, а не фишка какой-нибудь либы... Смотрим... программа с матрицами из см Сообщ. #29 от 8.08.06, 16:50 Реализована при помощи двух внешних модулей (Matrix и Numeric) из библиотеки Numerical-Python вслед за этим понеслись обвинения вида «А ты обманщик и мы тожа так можем с нашими uses-ами... Даешь чистый Python» Чистый Python? Нате вам чистый Python я написал реализацию матриц без единого внешнего модуля см Сообщ. #50 от Вчера, 21:38 Оцени еще раз то что именно я сделал. В Delphi это равносильно работе с матрицами без использования вообще чего либо в секции uses! «ты имитируешь работу с массивом, потому что его поддержки нет в Питоне» Не совсем точно вернее будет так «ты имитируешь работу с массивом, потому что в чистом Python без вредных внешних модулей нет прямого аналога Delphi-йскому типу Array» Shaggy Давайте будем до конца честными друг с другом! Мне запретили пользоваться какими то ни было библиотеками/модулями и тд Я предоставил решение проблемы удовлетворяющее поставленному условию. Т.е. отказавшись от вообще всего внешнего только средствами встроенными во все интерпретаторы Python я тем не менее решил задачу. А теперь пара вопросов... Кроме всего прочего файл system.pas является модулем в представлении языка Pascal? (Да безусловно!) А если является то наверное будет честно решить простенькую задачу с матрицами на Pascal/Delphi отказавшись от всего что предоставляют нам внешние модули/библиотеки и т.п.? В Python нет аналога файлу system.pas в Delphi! Т.е. в Python нет какой бы то ни было библиотеки/модуля которая загружалась бы автоматически при старте и была бы доступна любому приложению по умолчанию. И если вначале программы нет конструкции вида «from название_либы import *» значит эта программа использует исключительно то что умеет интерпретатор самого Python (а сам он надо сказать довольно беден на встроенные функции). В общем со своей стороны я решил задачу (несколькими путями) а от вас я очередной раз читаю отговорки. ЗЫ: Название Python ничего общего со змеёй не имеет! |
Сообщ.
#72
,
|
|
|
Чтоли выдумать задачу на которой питон сольет?
![]() |
Сообщ.
#73
,
|
|
|
Кстати, а как в дельфах обходят ограниченную ссылочную объектную модель? Вот в c++ есть автоматические объекты, т.е., можно из функции вернуть объект, после чего он сразу же будет уничтожен. В c#, java, и в (afaik) почти всех интерпретируемых языках --- сборка мусора. А в дельфе нет ни автоматических объектов, ни сборки мусора.
Поясню на примере: cpp: ![]() ![]() class MyClass { ... }; MyClass my_func(){return MyClass();} int my_func2(MyClass mc){...} int main() { my_func2(my_func()); } Утечки ресурсов нет --- все объекты уничтожены. c#: ![]() ![]() class MyClass { ... } MyClass my_func(){return new MyClass();} int my_func2(MyClass mc){...} int main() { my_func2(my_func()); } Утечки также нет --- все приберет сборщик. delphi: ![]() ![]() type MyClass = class ... end; function my_func: MyClass; begin result := MyClass.Create(); end; procedure my_func2(mc: MyClass); begin ... end; begin my_func2(my_func); end. А здесь --- утечка. что делают дельфисты в таких случаях? Пользуются временными переменными для сохранения ссылок? Но это моветон. |
Сообщ.
#74
,
|
|
|
Цитата best_lamer @ А если так:С этим вопрос исчерпан? ![]() ![]() TOKEN = 'одвсводаовд'#Строка 1 T0KEN = 'alwejkhgfK'#Строка 2 print TOKEN#Строка 3 |
Сообщ.
#75
,
|
|
|
Цитата Smike @ Чтоли выдумать задачу на которой питон сольет? Какое максимальное значение факториала можно вычислить на питоне? ![]() ![]() #! /usr/bin/python """factorial.py -- Выясняем и выводим максимально возможный факториал для Python. """ #Это сам факториал. Ни функций (def) ни циклов (for, while) Жутко не так ли? ;) fac = lambda x: x-1+abs(x-1) and fac(x-1)*x or 1 #Проверка факториала print "fac(0)=", fac(0), "fac(1)=", fac(1), "fac(10)=", fac(10) #Этим куском кода выяснял максимальный факториал for var in range(0,1000): try:#пробуем посчитать наш факториал для очередной var fac(var) except RuntimeError:#ошибка??? знач достигнут максимум целых! print var#Печатаем переменную #И выяснил что он равен fac(993) дальше не хватает :'( print "Максимально возможный факториал в Python выяснен опытным путем", fac(993) ![]() ![]() fac(0)= 1 fac(1)= 1 fac(10)= 3628800 994 995 996 997 998 999 Максимально возможный факториал в Python выяснен опытным путем (вырезано в целях экономии места) Smike ![]() |
Сообщ.
#76
,
|
|
|
Цитата best_lamer @ Цитата (jack128 @ Сегодня, 18:00) Примеры.. Ну тревиальный: TOKEN = 'одвсводаовд' print T0KEN jack128 Для удобства я для ВАС даже строки пронумеровал! Возьми что-нибудь менее трвиальное. Например вот что: ![]() ![]() #Тут у нас начало программы СodeVar = "My first cool programm!!!" print CodeVar Скопируй этот код и попытайся запустить. |
Сообщ.
#77
,
|
|
|
Цитата trainer @ TOKEN = 'одвсводаовд'#Строка 1 T0KEN = 'alwejkhgfK'#Строка 2 print TOKEN#Строка 3 ![]() ![]() >>>одвсводаовд Добавлено Цитата Flex Ferrum @ Возьми что-нибудь менее трвиальное. Например вот что: #Тут у нас начало программы СodeVar = "My first cool programm!!!" print CodeVar Взял! Выдает: ![]() ![]() В строке 1 файла /"тут был путь"/temp.py обнаружена синтаксическая ошибка invalid syntax. Скорее всего не на англ. Языке символ >С<odeVar. |
Сообщ.
#78
,
|
|
|
Цитата best_lamer @ Скорее всего не на англ. Языке символ >С<odeVar. Ай-яй-яй... Не поддерживает идентификаторы в национальных кодировках... Ай-яй-яй... |
Сообщ.
#79
,
|
|
|
Smike о чего умная книжка говорит по поводу целых.
Г. Россум, Ф.Л.Дж. Дрейк, Д.С.Откидач "Язык программирования Python" Цитата Целые числа реализованы с использованием типа long в С, поддерживающего числа в диапазоне от -2147483647 до 2147483647. Длинные целые имеют неоганиченную точность. Добавлено Цитата Flex Ferrum @ Ай-яй-яй... Не поддерживает идентификаторы в национальных кодировках... Ай-яй-яй... Ну что поделать ![]() ![]() |
Сообщ.
#80
,
|
|
|
Возникла идея сравнить скорость работы Python и Pascal... Завтра отпишусь
|
Сообщ.
#81
,
|
|
|
Цитата best_lamer @ А я-то хотел 'alwejkhgfK', просто в написании имени "ошибся", а Python создал новую переменную. Что и требовалось доказать. >>>одвсводаовд Добавлено P.S. Я эти восторги по поводу "переменные не нужно объявлять...", "куча операторов в одной строке..." и пр. проходил с Васиком в школьные годы лет 15 назад. |
Сообщ.
#82
,
|
|
|
Цитата best_lamer @ Smike ![]() Ха-ха, я и говорил, что Питон сольет ![]() ![]() В Дельфи успешно вычислен факториал: 1754!=1.97926189010501006E4930 ![]() Добавлено Почти в 2 раза меньший факториал питон позволяет вычислить. Отсюда прикинь накладные расходы памяти. Добавлено Цитата mo3r @ Кстати, а как в дельфах обходят ограниченную ссылочную объектную модель? Есть, представь себе. Интерфейсные классы, уничтожаются автоматически при выходе из зоны видимости. А сборщик мусора есть в Delphi .Net. |
Сообщ.
#83
,
|
|
|
Цитата Smike @ А с какой точностью? Все цифры числа получил? В Дельфи успешно вычислен факториал: 1754!=1.97926189010501006E4930 ![]() ![]() Ты, очевидно, достиг предела значений для 80-битных чисел с плавающей точкой. |
Сообщ.
#84
,
|
|
|
Цитата trainer @ Ты, очевидно, достиг предела для 80-битных чисел с плавающей точкой. Похоже на то, но на Питоне стек раньше переполнился, чем был достигнут числовой предел. |
Сообщ.
#85
,
|
|
|
Цитата Smike @ Но при этом он, возможно, получил точное значение, а ты - приблизительное. Похоже на то, но на Питоне стек раньше переполнился, чем был достигнут числовой предел. ![]() |
Сообщ.
#86
,
|
|
|
Эксперимент был именно в этом. Увидеть, какой overhead у функций на питоне. Оказалось очень не маленький. Кстати, мой калькулятор выражений, написанный на Delphi и поддерживающий пользовательские функции, способен вычислять факториалы более 1000 вот по такой вот простой записи:
Fact(X)=if(X=0,1,X*Fact(X-1)) Добавлено Цитата trainer @ Но при этом он, возможно, получил точное значение, а ты - приблизительное. ![]() Пусть best_lamer предъявит в студию ![]() |
Сообщ.
#87
,
|
|
|
Цитата Smike @ В Дельфи успешно вычислен факториал: Че-то приведенное тобой число ничуть не похоже на 1754! (разве только порядком). Где, млин, все цифры в представлении? Или теперь у нас факториалы модно считать с погрешностью 1e4917? Цитата Smike @ Похоже на то, но на Питоне стек раньше переполнился, чем был достигнут числовой предел. Ты вычисляешь факториал рекурсивно???? Вообще-то 2000 вызовов для стека -- пустяк, даже если при это передаются аргументы типа double. Цитата Smike @ Но что-то не верится, что в питоне реализована символьная математика. Я склонен верить в это. |
Сообщ.
#88
,
|
|
|
Точное значение 1754! :
Цитата 19792618901050100553817943275326058046108068783738609324419265088819304483104993781885087202818113141758217913524290130054389296110993761638740562668086720319880427262935698693967581955224697784352253451193044258326976331156416947056438129330448484873349514829197645621239444485448239146935896153775590111732587818296459849627459353506090190816436768622149143245877010092044525541198101437008400855968372167396290739386409342170079504343421050369816262077375848019943621633226305029241453255011807874493471441613893166886404227641754874191551006952300689238289694917634254857480292477598617118146209420015426832674824141333871406874925495039833613525562230823870445067956882391043212640088433844765075222854007375218446111796167815222112204326351858486365801392825068977413837974019598184403697290305095734456302825425424297490396089928965335730526812103146098573107702157854270177199767825442749350201413946725009195057326897275290315992989551283217132625396008363704167073884773289299455292582100013318724043978115479189795971227593949165652573800863631369880751519155681479325163622535064222024958212870621175904393043175157432660314980056449083195372465368801850812660313438891900683727287156080499851709318854475428588361838558608077561856533842534855607765607448085974124739026430012766042603940126063334294969408951800845891360188126920571835980829528007267126221118070706016769334485604857435979271480748466820877760845140134685753415967851414834906224030398526042289264840718139064633795752844783420865363989924190625578167655974198326049157940574049688969089004193589389716090830734218131008966129131957926189879225124282116528253811787942373426561347414931862332774325707598266866258953712898505582752541954235181029119678206860537116008975299892598378816005948758884516848732853390040677868297719380398400159684539103544149493661512742757997238791259023428196971026399786014457708955787130038262741909485444934067286397152429195348492620793061569295999497955035973807520238150390227542055961666116335567397505885860681595664464708759869790588566250910283055947915309023011006623599422787212720197003617906390896778624442248993548532269817347298436127453343428593523698211014488961623831672721679125422422480162233314303169941078370282017550763154939294448124735222025459248459192152338866622222094242693382696902940014110295639004144232102938571622019516579854386279130979621526571568139594183937391503514375348113179344343226453251904516778689590711431923746201292184718994258818836875617505592808566870904747986422748225938961565059060448488945262135383310869478350691973916076509260188719843080022877611887930094530371446690716422697474414155722859697971677133302163877157007706880828183543941635279586566948799583204081206405735205957552603718396907735093135159909966208491364385136817450719163397789708447088542080798947822580968959390475618260158537883076663231227022722459715466857468044445609385116666080845613176171319878590448640133042036507933133070095794241996956705966524579565419900183122902900392875206590948193683297634524262359619303476934566816367389058429019243921989062035379924596319433515720853389266046668818750586768418095575146523349213476562995701297894563555064586731292996256428087793552467410803796751623176328455748919329968098375614602387058350574368505591678326528000678285594938360883617088867701785757307931706400349515323974588727667422990176927489475579845696586998687172869681340913642717877619860889917131362661581527423608077008497788947393888299908446015746204587307385712259715272719836478083370195959913933252375629799631587855609423863830879942966570112309873003348067971535233666959518187061405959686368889690637435469783137327238909818780511672362538336877756625232796700675357521076858873186315701524030762919677122009276428880757179871311186941402237479706416709629889697835076601535629501181477681046348104491866526886765336571013550227128755720005491211081737694967647877807138342235204593794157730576529153242539457357788859841046774572687944020251206370770874233249162555612982104851147953606631289224049194658324848398079356552199438385029729411333459774764622428455234946651561030864609032738009475123065021416164689270243374366813187498401308112931643696460069958446510591631916081334127578270637114107660160619925552357245305794045382493393320585630913721037991674529155111521412730118515065756666298484306487580661733916902981429567350361526982783321369746306387727818096627121448147270649707938784751870609740579767000047288320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ![]() ![]() ![]() |
Сообщ.
#89
,
|
|
|
Цитата mo3r @ delphi: ![]() ![]() type MyClass = class ... end; function my_func: MyClass; begin result := MyClass.Create(); end; procedure my_func2(mc: MyClass); begin ... end; begin my_func2(my_func); end. А здесь --- утечка. что делают дельфисты в таких случаях? Пользуются временными переменными для сохранения ссылок? Но это моветон. Писать так - моветон в Delphi ![]() Но можно так ![]() ![]() procedure my_func2(mc: MyClass); begin ... end; begin with my_func do try ... //работа с результатом функции finally Free; //Освободили end; end. Второй путь - интерфейсы встроены, хочешь отслеживание области действия и множественное наследование, используешь их. Только как-то и не надо. Никогда мне не нужны были "обходы ограничений" ![]() Добавлено Цитата trainer @ Получено с помощью моего класса длинных целых на С++. Так что и Python и Delphi дружно сливают C++ ![]() ![]() ![]() |
Сообщ.
#90
,
|
|
|
Цитата Ха-ха, я и говорил, что Питон сольет ![]() ![]() В Дельфи успешно вычислен факториал: 1754!=1.97926189010501006E4930 ![]() Гон. Цитата trainer @ ![]() ![]() ![]() Еще гон. Цитата >>> def factorial(x): ... a = 1 ... for i in range(1,x+1): ... a = a * i ... return a ... >>> factorial(1754) 19792618901050100553817943275326058046108068783738609324419265088819304483104993781885087202818113141758217913524290130054389296110993761638740562668086720319880427262935698693967581955224697784352253451193044258326976331156416947056438129330448484873349514829197645621239444485448239146935896153775590111732587818296459849627459353506090190816436768622149143245877010092044525541198101437008400855968372167396290739386409342170079504343421050369816262077375848019943621633226305029241453255011807874493471441613893166886404227641754874191551006952300689238289694917634254857480292477598617118146209420015426832674824141333871406874925495039833613525562230823870445067956882391043212640088433844765075222854007375218446111796167815222112204326351858486365801392825068977413837974019598184403697290305095734456302825425424297490396089928965335730526812103146098573107702157854270177199767825442749350201413946725009195057326897275290315992989551283217132625396008363704167073884773289299455292582100013318724043978115479189795971227593949165652573800863631369880751519155681479325163622535064222024958212870621175904393043175157432660314980056449083195372465368801850812660313438891900683727287156080499851709318854475428588361838558608077561856533842534855607765607448085974124739026430012766042603940126063334294969408951800845891360188126920571835980829528007267126221118070706016769334485604857435979271480748466820877760845140134685753415967851414834906224030398526042289264840718139064633795752844783420865363989924190625578167655974198326049157940574049688969089004193589389716090830734218131008966129131957926189879225124282116528253811787942373426561347414931862332774325707598266866258953712898505582752541954235181029119678206860537116008975299892598378816005948758884516848732853390040677868297719380398400159684539103544149493661512742757997238791259023428196971026399786014457708955787130038262741909485444934067286397152429195348492620793061569295999497955035973807520238150390227542055961666116335567397505885860681595664464708759869790588566250910283055947915309023011006623599422787212720197003617906390896778624442248993548532269817347298436127453343428593523698211014488961623831672721679125422422480162233314303169941078370282017550763154939294448124735222025459248459192152338866622222094242693382696902940014110295639004144232102938571622019516579854386279130979621526571568139594183937391503514375348113179344343226453251904516778689590711431923746201292184718994258818836875617505592808566870904747986422748225938961565059060448488945262135383310869478350691973916076509260188719843080022877611887930094530371446690716422697474414155722859697971677133302163877157007706880828183543941635279586566948799583204081206405735205957552603718396907735093135159909966208491364385136817450719163397789708447088542080798947822580968959390475618260158537883076663231227022722459715466857468044445609385116666080845613176171319878590448640133042036507933133070095794241996956705966524579565419900183122902900392875206590948193683297634524262359619303476934566816367389058429019243921989062035379924596319433515720853389266046668818750586768418095575146523349213476562995701297894563555064586731292996256428087793552467410803796751623176328455748919329968098375614602387058350574368505591678326528000678285594938360883617088867701785757307931706400349515323974588727667422990176927489475579845696586998687172869681340913642717877619860889917131362661581527423608077008497788947393888299908446015746204587307385712259715272719836478083370195959913933252375629799631587855609423863830879942966570112309873003348067971535233666959518187061405959686368889690637435469783137327238909818780511672362538336877756625232796700675357521076858873186315701524030762919677122009276428880757179871311186941402237479706416709629889697835076601535629501181477681046348104491866526886765336571013550227128755720005491211081737694967647877807138342235204593794157730576529153242539457357788859841046774572687944020251206370770874233249162555612982104851147953606631289224049194658324848398079356552199438385029729411333459774764622428455234946651561030864609032738009475123065021416164689270243374366813187498401308112931643696460069958446510591631916081334127578270637114107660160619925552357245305794045382493393320585630913721037991674529155111521412730118515065756666298484306487580661733916902981429567350361526982783321369746306387727818096627121448147270649707938784751870609740579767000047288320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L А сколько времени мессир писали свой класс? Добавлено Я бы предъявил и факториал 17540, только вот форум, зараза такая, говорит, что сообщение слишком длинное. |
Сообщ.
#91
,
|
|
|
Цитата Ho Im @ Думаю, что не больше, чем то же самое делал(и) автор(ы) Python'а А сколько времени мессир писали свой класс? ![]() |
Сообщ.
#92
,
|
|
|
Возможно, но почему тогда каждый третий плюсовик должен писать свой велосипед для bignum'ов? К C++ батарейки не прилагают, что ли?
|
Сообщ.
#93
,
|
|
|
Цитата Ho Im @ Зачем? Бери мой класс и пользуйся. Возможно, но почему тогда каждый третий плюсовик должен писать свой велосипед для bignum'ов? ![]() Откуда берется это "должен"? Может, но не обязан. А "каждый третий |
Сообщ.
#94
,
|
|
|
Цитата trainer, 11.08.2006, 10:48:34, 1214679 Точное значение 1754! что-то 436 нулей в конце подозрительны... по идее, не должно бы таких чисел получиться . Цитата trainer, 11.08.2006, 10:48:34, 1214679 Так что и Python и Delphi дружно сливают C++ ![]() |
Сообщ.
#95
,
|
|
|
Цитата Змей(Чёрный) @ А ты прикинь, сколько раз там происходит умножение на числа, кратные 10 и пары чисел, кратных 5 и 2. что-то 436 нулей в конце подозрительны... по идее, не должно бы таких чисел получиться . |
Сообщ.
#96
,
|
|
|
Цитата Змей(Чёрный) @ что-то 436 нулей в конце подозрительны... по идее, не должно бы таких чисел получиться . А ты посчитай на бумажке. Добавлено trainer, я худший садист ![]() |
Сообщ.
#97
,
|
|
|
По вашему для Дельфи нет модулей для больших чисел? Хе
![]() |
Сообщ.
#98
,
|
|
|
Даешь войну "У кого больше библиотек"!
![]() |
Сообщ.
#99
,
|
|
|
Цитата Ho Im, 11.08.2006, 12:55:01, 1214951 А ты посчитай на бумажке. хм... как-нить потом... В принтере последние два листочка, а туалетной всего три рулончика осталось... не хватит... |
Сообщ.
#100
,
|
|
|
Цитата Romkin @ Писать так - моветон в Delphi ![]() Но можно так procedure my_func2(mc: MyClass); begin ... end; begin with my_func do try ... //работа с результатом функции finally Free; //Освободили end; end. Второй путь - интерфейсы встроены, хочешь отслеживание области действия и множественное наследование, используешь их. Только как-то и не надо. Никогда мне не нужны были "обходы ограничений" ![]() э-ээ.. Этот код отличается от моего. Нужно передать в my_func2 то, что нам вернула my_func, а затем это удалить. Интересно, как это будет выглядеть с with? И сколько строчек он будет занимать? А если аргументов --- не один, а пять? Цитата Smike @ Есть, представь себе. Интерфейсные классы, уничтожаются автоматически при выходе из зоны видимости. Можно примерчик? |
Сообщ.
#101
,
|
|
|
Цитата trainer @ Даешь войну "У кого больше библиотек"! ![]() /me вспомнил CPAN и понял, что сейчас самое время появиться перловщикам /me еще напряг серое вещество и вспомнил Java /me посинел от натуги, покраснел от гнева и понял, что C# доступно такое, о чем все перечисленные выше могут только мечтать /me считает, что плюсовикам лучше вообще не влезать в спор "у кого больше библиотек", т. к. все плюсовые библиотеки либо костыли для действий, не предусмотренных стандартом (как boost), либо просто врапперы над сишными; категория реально нужных вещей вроде Qt очень немногочисленна |
Сообщ.
#102
,
|
|
|
Итак как я проводил соревнования Python vs Delphi.
Цель измерить время работы одного алгоритма на Python и Delphi. Платформа OS: Windows XP (Build 2600: Service Pack 2) Borland Delphi Enterprise version 7.0 (Build 4.453) Кидаем компонент memo на пустую форму. Дальше собственно ![]() ![]() procedure TForm1.FormCreate(Sender: TObject); var Begin_Time, End_Time: TDateTime; x,y,z: Integer; r:real; begin Begin_Time:=Time; for x:=0 to 100 do for y:=0 to 1000 do for z:=0 to 100 do r:=sin(x)+cos(y)+sin(z); End_Time:=Time; memo1.Lines.Add('Begin_Time '+TimeToStr(Begin_Time)); memo1.Lines.Add('End_Time '+TimeToStr(End_Time)); memo1.Lines.Add('All_Time '+TimeToStr(End_Time-Begin_Time)); end; Результат: ![]() ![]() Begin_Time 14:31:06 End_Time 14:31:09 All_Time 0:00:03 Python 2.3.3 (#51, Dec 18 2003, 20:22:39) [MSC v.1200 32 bit (Intel)] on win32 Программа. В циклах "+ 1" изза "дощечек в заборе"... ![]() ![]() # -*- coding: cp1251 -*- from time import gmtime, strftime, localtime from math import sin,cos print "Begin_Time ", strftime("%a, %d %b %Y %H:%M:%S +0000", localtime()) for x in range (0,100 + 1): for y in range (0,1000 + 1): for z in range (0,100 + 1): r=sin(x)+cos(y)+sin(z) print "End_Time ", strftime("%a, %d %b %Y %H:%M:%S +0000", localtime()) О функциях: Цитата strftime( format) Return a string representing the date, controlled by an explicit format string. Format codes referring to hours, minutes or seconds will see 0 values. See the section on strftime() behavior. localtime( [secs]) Like gmtime() but converts to local time. The dst flag is set to 1 when DST applies to the given time. Changed in version 2.1: Allowed secs to be omitted. Результат: ![]() ![]() Begin_Time Fri, 11 Aug 2006 14:41:02 +0000 End_Time Fri, 11 Aug 2006 14:41:30 +0000 All_Time 0:00:28 Таким образом со счетом (0:00:03) против (0:00:28) те 3 сек. против 28 сек. победил (фанфары барабаны) Delphi ![]() Цитата Smike @ В Дельфи успешно вычислен факториал: 1754!=1.97926189010501006E4930 Smike во первых я использовал исключительно целый тип это раз у тебя он никак не целый смотри сам "1>>>.<<<97926189010501006E4930" Это что такое? Во вторых я для расчета факториала не использовал ни функций ни циклов ни одного модуля не потревожил ![]() И сама функция факториала - лямбда рекурсия в одну строку ![]() Цитата Ho Im @ Цитата >>> def factorial(x): ... a = 1 ... for i in range(1,x+1): ... a = a * i ... return a ![]() PS С факториалом я не туда поглядел! |
Сообщ.
#103
,
|
|
|
Цитата mo3r @ Этот код отличается от моего. Нужно передать в my_func2 то, что нам вернула my_func, а затем это удалить Сори, я твой код просто не понял. Но так как ты хочешь - просто не делают. Объект не уничтожают в функции, если он пришел как параметр, это уж слишком ![]() Принял объект от MyFunc, передал в MyFunc2, она что-то слелала - вот и уничтожай. Понятно, нужна переменная. И что? ![]() Цитата mo3r @ Цитата (Smike @ Сегодня, 10:39) Есть, представь себе. Интерфейсные классы, уничтожаются автоматически при выходе из зоны видимости. Можно примерчик? Да сколько угодно ![]() ![]() ![]() type IFoo = interface procedure FooFoo; end; //Реализация TFoo = class(TInterfacedObject, IFoo) protected procedure FooFoo; public destructor Destroy; override; //Для иллюстрации даем сообщение end; implementation { TFoo } destructor TFoo.Destroy; begin ShowMessage('Destroy'); inherited; end; procedure TFoo.FooFoo; begin ShowMessage('Foooo! :)'); end; //Пример вызова procedure TForm1.Button1Click(Sender: TObject); var Foo: IFoo; begin Foo := TFoo.Create; Foo.FooFoo; end; Или мне, по традиции, привести полное консольное приложение? ![]() ![]() ![]() program Project1; {$APPTYPE CONSOLE} type IFoo = interface procedure FooFoo; end; //Реализация TFoo = class(TInterfacedObject, IFoo) protected procedure FooFoo; public destructor Destroy; override; //Для иллюстрации даем сообщение end; destructor TFoo.Destroy; begin WriteLn('Destroy'); inherited; end; procedure TFoo.FooFoo; begin WriteLn('Foooo! :)'); end; //Чтобы была область видимости procedure DoFoo; var Foo: IFoo; begin Foo := TFoo.Create; Foo.FooFoo; end; begin DoFoo; ReadLn; end. |
Сообщ.
#104
,
|
|
|
Цитата best_lamer @ Ho Im если пользоваться твоим (классическим) факториалом тогда максимальный факториал для Python равен 3628799! для факториала через лямда форму (по моему) 993! предел... Странно надо разобраться почему так. ![]() Питон не делает оптимизации хвостовых вызовов. |
Сообщ.
#105
,
|
|
|
Цитата Romkin @ Но так как ты хочешь - просто не делают. Объект не уничтожают в функции, если он пришел как параметр, это уж слишком ![]() ![]() ![]() ![]() type MyClass = class ... end; function my_func: MyClass; begin result := MyClass.Create(); end; procedure my_func2(mc1,mc2,mc3: MyClass); begin ... end; var t1,t2,t3: MyClass; begin t1 := my_func; t2 := my_func; t3 := my_func; my_func2(t1,t2,t3); t1.Free; t2.Free; t3.Free; end. Т.е., --- почувствуйте себя ассемблером (в том смысле, что надо вручную разворачивать выражения так, чтобы не было вложенных вызовов функций). Цитата Romkin @ Или мне, по традиции, привести полное консольное приложение? ![]() Дельфы под рукой нету, нельзя ли показать вывод от этого приложения? Цитата Romkin @ type IFoo = interface procedure FooFoo; end; //Реализация TFoo = class(TInterfacedObject, IFoo) protected procedure FooFoo; public destructor Destroy; override; //Для иллюстрации даем сообщение end; Да, это "очень удобно и немногословно". А как у этой штуки с наследованием --- ведь TInterfacedObject --- это класс, не так ли? А это уже не даст отнаследовться от других классов. Так что, как ни крути, а будет неудобно. |
Сообщ.
#106
,
|
|
|
Цитата mo3r @ э-ээ.. Этот код отличается от моего. Нужно передать в my_func2 то, что нам вернула my_func, а затем это удалить. Интересно, как это будет выглядеть с with? И сколько строчек он будет занимать? А если аргументов --- не один, а пять? Да ты что ![]() ![]() ![]() type MyClass = class function GetThis: MyClass; property This: MyClass read GetThis; end; function MyClass.GetThis: MyClass; begin Result := Self; end; function my_func: MyClass; begin result := MyClass.Create(); end; procedure my_func2(mc: MyClass); begin ... end; begin with my_func do try my_func2(this); finally free; end; end. Цитата mo3r @ Можно примерчик? И то же самое с интерфейсами: ![]() ![]() type IMyClassInt = interface ... end; TMyClass = class(TInterfacedObject, IMyClassInt) ... end; function my_func: IMyClassInt; begin result := MyClass.Create(); end; procedure my_func2(mc: IMyClassInt); begin ... end; |
Сообщ.
#107
,
|
|
|
Цитата Smike @ Да ты что ![]() Класс пришлось изменить, чтобы это поддерживалось. Да и в любом случае дополнительно 5 строчек. Цитата mo3r @ А как у этой штуки с наследованием --- ведь TInterfacedObject --- это класс, не так ли? А это уже не даст отнаследовться от других классов. Smike, а на это что скажешь? |
Сообщ.
#108
,
|
|
|
Цитата mo3r @ Smike, а на это что скажешь? А что мешает базовый класс от интерфейсного объекта унаследовать? TInterfacedObject - это такой же объект, только со счетчиком ссылок. Классы VCL и так интерфейсные: ![]() ![]() TComponent = class(TPersistent, IInterface, IInterfaceComponentReference) |
Сообщ.
#109
,
|
|
|
Цитата Smike @ А что мешает базовый класс от интерфейсного объекта унаследовать? TInterfacedObject - это такой же объект, только со счетчиком ссылок. Классы VCL и так интерфейсные: Вот я и говорю --- удобство разработки прямо сразу видно --- менять весь дизайн приложения из-за непродуманности языка. |
Сообщ.
#110
,
|
|
|
Цитата best_lamer @ Таким образом со счетом (0:00:03) против (0:00:28) те 3 сек. против 28 сек. победил (фанфары барабаны) Delphi ![]() Ничего противоестественного не вижу. Основное достоинство интерпретируемых языков в безопасности кода и более быстром процессе разработки. |
Сообщ.
#111
,
|
|
|
Цитата mo3r @ Вот я и говорю --- удобство разработки прямо сразу видно --- менять весь дизайн приложения из-за непродуманности языка. Глупо утверждать, что это непродуманность языка. Мне это при разработке никогда не мешало. Просто архитектуру нужно изначально придумывать корректную. Давай на примере. Зачем может понадобиться создание 3-х одинаковых объектов, передача их в одну функцию и автоматическое их удаление? |
Сообщ.
#112
,
|
|
|
Цитата Smike @ Да ты что ![]() А если таких аргументов, скажем, два, а? ![]() |
Сообщ.
#113
,
|
|
|
Цитата best_lamer @ PS С факториалом я не туда поглядел! У меня хватило терпения до 70000! дальше еще считает... сколько максимально возможный факториал даже не представляю... У кого есть желание проверить точнее милости просим ![]() |
Сообщ.
#114
,
|
|
|
Цитата best_lamer @ У кого есть желание проверить точнее милости просим ![]() Что, так долго считает? ![]() Добавлено Цитата linuxfan @ А если таких аргументов, скажем, два, а? ![]() Если объяснишь зачем - тогда скажу как. А так я программировать не привык. Код пишется под задачу, а не под с целью точно продублировать какой-то другой код. |
Сообщ.
#115
,
|
|
|
Сейчас подмешиваемые (Mix-in) классы вспомниать начнем...
|
Сообщ.
#116
,
|
|
|
Цитата Smike @ Если объяснишь зачем - тогда скажу как. А так я программировать не привык. Ясно. Значит -- никак. Ну не очень-то и надо. В C++ лямбда функций ведь нет (костыль, кажется, в boost положили?) |
Сообщ.
#117
,
|
|
|
Цитата linuxfan @ В C++ лямбда функций ведь нет (костыль, кажется, в boost положили?) Это означает, что эти функции могут быть реализованы средставми языка. По этому про "костыли" - не надо. |
Сообщ.
#118
,
|
|
|
Цитата linuxfan @ Ничего противоестественного не вижу. Основное достоинство интерпретируемых языков в безопасности кода и более быстром процессе разработки. Полностью согласен! Я сам и не ожидал того что Python будет быстрее ![]() Добавлено Цитата Smike @ Что, так долго считает? Ты вначале сделай нормальный факториал в целых а потом поговорим дальше ![]() |
Сообщ.
#119
,
|
|
|
Цитата mo3r @ Дельфы под рукой нету, нельзя ли показать вывод от этого приложения? Вывод как и должен быть. Увы, из консоли не копируется у меня, пишу: Цитата Foooo! ![]() Destroy И ждет Enter на readln, разумеется. Цитата mo3r @ Цитата (Smike @ Сегодня, 17:20) А что мешает базовый класс от интерфейсного объекта унаследовать? TInterfacedObject - это такой же объект, только со счетчиком ссылок. Классы VCL и так интерфейсные: Вот я и говорю --- удобство разработки прямо сразу видно --- менять весь дизайн приложения из-за непродуманности языка. Ну млин. Интерфейс я ввести могу на любом уровне иерархии. Я использовал TInterfacedObjetc потому, что там реализованы три метода IInterface. Вот как раз и вводятся интерфейсы: Цитата Smike @ TComponent = class(TPersistent, IInterface, IInterfaceComponentReference) Причем здесь как раз подсчет ссылок отключается, поскольку за временем жизни компонента следит его контейнер. Это также и ответ на вопрос, почему приходится иногда писать реализацию методов IInterface ![]() Цитата mo3r @ Цитата (Romkin @ Сегодня, 16:36) type IFoo = interface procedure FooFoo; end; //Реализация TFoo = class(TInterfacedObject, IFoo) protected procedure FooFoo; public destructor Destroy; override; //Для иллюстрации даем сообщение end; Да, это "очень удобно и немногословно". Да, это очень удобно. А многословно или нет - кто-то может считать, что многословно. И что с того? Написано все, что нужно и так как должно. Это - компонент-ориентированное программирование уже, следующая стадия ООП. Интерфейс описывается отдельно, реализация - отдельно. Ясно, что у одного интерфейса может быть любое количество реализаций и один класс может реализовать несколько интерфейсов. Что такое компонентная модель - читайте книгу Дональда Бокса "Сущность технологии COM". Там он в первой главе очень популярно объясняет что это. Все, правда, на С++. Добавлено Цитата linuxfan @ Ничего противоестественного не вижу. Основное достоинство интерпретируемых языков в безопасности кода и более быстром процессе разработки. Ну что это за высказывание? Интерпретируемость сама по себе ничего не дает, практически любой язык может быть и интерпретируемым, и компилируемым. Или ты хочешь сказать, что если бы Delphi был интерпретируемым, то его код стал бы сразу безопасным и процесс разработки ускорился? Мне что-то не верится. Основное достоинство интерпретируемых языков в отсутствии компилятора. Интерпретатор всегда есть, и программа в виде текста. Основной недостаток - низкая скорость, если не применять некоторых ухищрений вроде прекомпиляции и тд. |
Сообщ.
#120
,
|
|
|
Цитата linuxfan @ В этом выражении надо убрать слово "плюсовые"все плюсовые библиотеки либо костыли для действий, не предусмотренных стандартом Цитата linuxfan @ А в Python иначе? либо просто врапперы над сишными ![]() Цитата linuxfan @ Понятие "реально нужные вещи" весьма относительно. Мне вот не нужен ни один python'овский пакет. И сам python ни к чему. категория реально нужных вещей вроде Qt очень немногочисленна |
Сообщ.
#121
,
|
|
|
Цитата linuxfan @ В C++ лямбда функций ведь нет (костыль, кажется, в boost положили?) Ясно. Значит так и запишем: Python - это большой костыль над C++ ![]() ![]() |
Сообщ.
#122
,
|
|
|
Цитата Smike @ Python - это большой костыль над C++ ![]() ![]() С какой стати? Я знаю Python, а C++ пока что нафиг не уперся. Бытие же костылем предполагает, что тебе, вообще-то, нужен как-бы C++, но в силу бла-бла-бла...бла-бла приходится брать костыль и подпирать. Костыль не может быть самостоятельной независимой сущностью. |
Сообщ.
#123
,
|
|
|
Дебилизм какой. Мне не не нужно вычислять длинных факториалов. Мне не нужны фантастические лямбда функции. 99 процентам психически здоровых людей они тоже не нужны. 99 процентов населения планеты хотят быстрых программ. Поэтому выбираем С++.
|
Сообщ.
#124
,
|
|
|
Цитата BugHunter @ 99 процентов населения планеты хотят быстрых программ. Поэтому выбираем С++. 99% заказчиков хотят получить работающий проект быстро. Поэтому C++ идет на вот туда. 1% заказчиков хочет быструю программу быстро. Поэтому эти заказчики следуют за C++. |
Сообщ.
#125
,
|
|
|
BugHunter, Ho Im прав. Лично мое начальство всегда резко выступает против C/C++, когда я пытаюсь протащить это дело. Мотивируют они это довольно просто: в более высокуровневом языке можно сосредоточиться на решении задачи, а не на управлении памятью и прочей фигней.
|
Сообщ.
#126
,
|
|
|
Цитата linuxfan @ Лично мое начальство всегда резко выступает против C/C++, когда я пытаюсь протащить это дело. Мотивируют они это довольно просто: в более высокуровневом языке можно сосредоточиться на решении задачи, а не на управлении памятью и прочей фигней. "Высокоуровневость" языка очень сильно зависит от используемых библиотек. |
Сообщ.
#127
,
|
|
|
Flex Ferrum, 1) ищем библиотеку, 2) смотрим чейнджлоги, 3) читаем багтрак на нее... А ты ведь думал как?
Добавлено Цитата linuxfan @ Лично мое начальство всегда резко выступает против C/C++, когда я пытаюсь протащить это дело. А на чем останавливаются? Если на лиспе, то я уже офигел... |
Сообщ.
#128
,
|
|
|
Flex Ferrum, согласись, в Java, например, напартачить несколько сложнее, чем в C++, а в PHP напартачить легко, зато пишется очень быстро.
|
Сообщ.
#129
,
|
|
|
linuxfan, зато не напартачить еще труднее, чем на жабе. У жабиста такие вещи на уровне инстинкта, а пхпист на грабли натыкается... постоянно.
|
Сообщ.
#130
,
|
|
|
Цитата Ho Im @ Flex Ferrum, 1) ищем библиотеку, 2) смотрим чейнджлоги, 3) читаем багтрак на нее... А ты ведь думал как? Бывает и такое. А бывает, что пользуешься уже проверенными стабильными версиями... ![]() Цитата linuxfan @ Flex Ferrum, согласись, в Java, например, напартачить несколько сложнее, чем в C++ Может быть и сложнее - не знаю. Но, помнится, когда жабу скрещивали с плюсами, некоторые особенности работы жабного сборщика мусора мы так победить и не смогли... Из за этого в java-части пришлось писать код не совсем в java-стиле, ибо в противном случае наблюдалась конкретная течь памяти... А в плюсах, используя тот же shared_ptr, добится утечки достаточно сложно. |
Сообщ.
#131
,
|
|
|
Цитата linuxfan @ Flex Ferrum, согласись, в Java, например, напартачить несколько сложнее, чем в C++, а в PHP напартачить легко, зато пишется очень быстро. Всё зависит от используемых библиотек, как уже было сказано. Например, используя те библиотеки, которые использую я, напортачить КРАЙНЕ сложно. Так спроектированны и написаны. За что авторам огромное спасибо. Цитата 99% заказчиков хотят получить работающий проект быстро. Поэтому C++ идет на вот туда. 1% заказчиков хочет быструю программу быстро. Поэтому эти заказчики следуют за C++. не знаю, что за заказчиков имеешь в виду ты, львиная доля готовых коробок на рынке ПО - это C++/C. Добавлено (для тех, кто не понял - лев отнимает у других всё, окромя падали) |
Сообщ.
#132
,
|
|
|
Цитата Ho Im @ пхпист на грабли натыкается... постоянно. Ну по крайней мере пхпист не нарвется на лики или на двойное освобождение памяти или на еще чего-нибудь эдакое. Цитата BugHunter @ не знаю, что за заказчиков имеешь в виду ты, львиная доля готовых коробок на рынке ПО - это C++/C. Львиная доля на .NET или на Java. Enterprise почему-то «недолюбливает» C++. |
Сообщ.
#133
,
|
|
|
Цитата BugHunter @ львиная доля готовых коробок на рынке ПО - это C++/C. Я о ПО на заказ. Не коробками едиными... Добавлено Цитата linuxfan @ Ну по крайней мере пхпист не нарвется на лики Я везучий — нарывался. И должен сказать — это большая ж... |
Сообщ.
#134
,
|
|
|
Цитата Flex Ferrum, 1) ищем библиотеку, 2) смотрим чейнджлоги, 3) читаем багтрак на нее... А ты ведь думал как? Да, иногда таким образом можно узнать много интересного. А можно и не узнать. Тот же STL например, уже давно устаканеный. Добавлено Цитата Львиная доля на .NET или на Java. Enterprise почему-то «недолюбливает» C++. Да, есть такой момент. Не знаю, почему это происходит. Вот, например, АДО. Даже используя .NET это не самая тривиальная технология. У меня же на плюсах, по сути, торчит наружу 3 вещи: 1) конструктор для создания соединения 2) ExecuteStoredProcedure 3) ExecuteSQL никаких изощрений или извращений, всё уже продумано и придумано. Вокруг этого можно мутить и думать дальше. .NET даёт более геморойные инструменты, над которыми ещё придётся думать, а я этого не люблю. Цитата Я о ПО на заказ. Не коробками едиными... Вот и я об то же - заказное ПО часто бывает уже куплено ещё до того, как его написали, а поэтому и писать его можно абы как (что опять таки, львиная доля заказного ПО ярко демонстрирует). То ли дело выпуск галимой коробки: через день весь интернет будет кишеть криками "они облажались, не покупайте эту срань!". и в каком месте мы увидем прибыль? |
Сообщ.
#135
,
|
|
|
Цитата BugHunter @ не знаю, что за заказчиков имеешь в виду ты, львиная доля готовых коробок на рынке ПО - это C++/C. Ну и? Погляди на ту статистику которая распространяется и насаждается в средствах массовой информации по ней выходит что других осей кроме виндовза ваще не существует. Не помню что читал но валялся под стулом речь шла о "самой безопасной на сегодняшний день... " и тра ля ля в том же духе ага именно о виндовс. Но в реальной жизни все иначе. Коробочное ПО путь себе и остается коробочным ПО на нем весь мир клином не сошелся! И корпоративный сегмент тоже брать не будем. Кросплатформенность разрабатываемого ПО - залог если не успеха то по крайней мере того что на такое ПО обратят внимание. А простоте портирования ПО на Python под другую ось позавидует любой программист. Потому что в правильно написанной программе на Python менять ровным счетом ничего не надо. И не смотря на такие жуткие усилия на портирование программист одновременно захватывает: Dos, All Windows, Linux, Unix, FreeBsd (остановите меня кто нибудь) Mac OS... Да да это именно те насаждаемые прессой 0% рынка. ![]() Еще LOL - Python желает знать кодировку всех строк и всегда просит либо явно ее задать либо везде работать со строками в юникоде. Ну хочешь фиг с тобой. Сделал по манам в юникоде. В Linux проблем нет а в винде оказывается что юникод он как бы и не юникод вовсе ![]() А так пару миллиардов на рекламу и пиар и через время покупатель будет искренне верить в то что кроме (подставить сюда название ЛЮБОГО некоробочного продукта) ему ничего и не надо. ![]() |
Сообщ.
#136
,
|
|
|
Цитата Ho Im @ 99% заказчиков хотят получить работающий проект быстро. Поэтому C++ идет на вот туда. Вот из-за того, что некоторые недопрограммеры не хотят нормально кодить на компилируемых языках, и получаются таким фтопочные продукты как OpenOffice ![]() Добавлено Цитата BugHunter @ не знаю, что за заказчиков имеешь в виду ты, львиная доля готовых коробок на рынке ПО - это C++/C. Ну и Delphi, хотя и меньше. Delphi не сильно популярен в больших коммандных разработках, но для разработки небольшой группой программистов качественных продуктов за небольшое время - очень даже ![]() Цитата linuxfan @ Львиная доля на .NET или на Java. Коробочное ПО редко бывает для enterprise-сектора. Обычно enterprise-программы - это разовые заказы. А коробочное ПО предусматривает выпуск обновлений и новых версий, постоянное развити продукта и заботу над его популярностью среди масс. Добавлено Цитата best_lamer @ Кросплатформенность разрабатываемого ПО - залог если не успеха то по крайней мере того что на такое ПО обратят внимание. Да ну? А можешь назвать хоть одну действительно популярную питоновскую программу? Вообще Линукс пока интересует очень малое количесто серьезных разработчиков. Даже 4% рынка ОС - это не повод переписывать серьезные проекты на Питон. Да еще чтобы они тормозили потом как такая дрянь, как OpenOffice. Представляешь как будет тормозить фотошоп на питоне? Его интерфейс и так притормаживает из-за кроссплатформенных костылей. Тем более что аудитория ОС GNU/Linux - это прирожденные шаровики, которые за ПО никогда не платили и платить не будут. |
Сообщ.
#137
,
|
|
|
Цитата Smike @ Вот из-за того, что некоторые недопрограммеры не хотят нормально кодить на компилируемых языках, и получаются таким фтопочные продукты как OpenOffice ![]() Э-э... OOo написан на c++. Или я что-то пропустил в его исходниках?? Цитата Smike @ А можешь назвать хоть одну действительно популярную питоновскую программу? Из массово популярных -- всякие веб-приложения, в частности, MoinMoin Wiki Engine. Заметь -- идет и под виндой, и под линуксом, и под другими юниксами, и под еще чем хочешь. Цитата Smike @ Тем более что аудитория ОС GNU/Linux - это прирожденные шаровики, которые за ПО никогда не платили и платить не будут. ![]() |
Сообщ.
#138
,
|
|
|
Цитата Smike @ Ну и Delphi, хотя и меньше. Delphi не сильно популярен в больших коммандных разработках, но для разработки небольшой группой программистов качественных продуктов за небольшое время - очень даже Интересненько а в Delphi есть инструменты для коммандной разработки? cvs, rcs ? Этим удивил... Признаю не знал ![]() Цитата Smike @ А можешь назвать хоть одну действительно популярную питоновскую программу? Могу! Куча игрушек под винду которые используют Python в качестве внутреннего скриптового языка. Могу поспорить что на компе заядлого геймера если пустить поиск по "python*.dll" или "*.py" можно найти без вопросов ![]() Захожу сюда читаю Цитата NASA uses Python... Улыбнуло ну да ладно Цитата Smike @ Тем более что аудитория ОС GNU/Linux - это прирожденные шаровики, которые за ПО никогда не платили и платить не будут. ![]() |
Сообщ.
#139
,
|
|
|
Цитата mo3r @ Э-э... OOo написан на c++. Или я что-то пропустил в его исходниках?? А зачем ему жаба-машина? Цитата best_lamer @ Интересненько а в Delphi есть инструменты для коммандной разработки? cvs, rcs ? Этим удивил... Признаю не знал ![]() Есть зачатки. У Борланда для этого есть другое решение - StarTeam и в Delphi встроен клиент для StarTeam. |
Сообщ.
#140
,
|
|
|
Цитата Smike @ А зачем ему жаба-машина? Для биндингов к яве (чтобы плагины можно было писать на яве). А также во время сборки для компиляции оных (сборка у них немного глючит --- без них не собирается, но работать без них может). Цитата Smike @ Есть зачатки. У Борланда для этого есть другое решение - StarTeam и в Delphi встроен клиент для StarTeam. То есть, svn и cvs оно не держит. |
Сообщ.
#141
,
|
|
|
Цитата Smike @ это не повод переписывать серьезные проекты на Питон. Вот дела.. А мужики из Гугла и Наса не знают ![]() |
Сообщ.
#142
,
|
|
|
Цитата mo3r @ Для биндингов к яве Всего-то? И из-за этого он 100 метров памяти отжирает? Ну тогда этот продукт должен быть предан забвению, а программисты - анафеме. Цитата Мыкв @ Вот дела.. А мужики из Гугла и Наса не знают ![]() Мужики из Наса пишут на C#. See Nasa World Wind. |
Сообщ.
#143
,
|
|
|
Цитата Smike @ Мужики из Наса пишут на C#. See Nasa World Wind. http://www.python.org/about/success/usa/, соответственно. |
Сообщ.
#144
,
|
|
|
Цитата Мыкв @ http://www.python.org/about/success/usa/, соответственно. Этих приложений никто не видит и не знает. Они под конкретные задачи затачиваются. Практически то же самое, что и скрипты в VBA. А Nasa World Wind - приложение широкого пользования. Добавлено Для сравнения - Basic я тоже не люблю, но это не мешает мне писать на VBA макросы для оффиса. Можно конечно все это сделать на Delphi, но чаще удобнее сделать это в родной среде, поскольку там под них все хорошо заточено (подсказки, объекты, формы и пр.). |
Сообщ.
#145
,
|
|
|
Цитата Smike @ Этих приложений никто не видит и не знает. Они под конкретные задачи затачиваются. Практически то же самое, что и скрипты в VBA. А Nasa World Wind - приложение широкого пользования. Только вот WW не является флагманом NASA, для внутренней рутины им более другие вещи нужны (а там и Python). Ну не софтверная это компания, коробочно-публичный софт — это всего лишь побочный продукт их деятельности навроде как BRL-CAD для Армии США. Мне ли говорить, что в армии прежде всего не программированием занимаются, даже когда прокетируют танки? |
Сообщ.
#146
,
|
|
|
Цитата То есть, svn и cvs оно не держит. А, собсно, зачем? Цитата Этих приложений никто не видит и не знает. Они под конкретные задачи затачиваются. Практически то же самое, что и скрипты в VBA. А Nasa World Wind - приложение широкого пользования. Эти приложения никто не продаёт. Прибыль получают в другом месте. Цитата А так пару миллиардов на рекламу и пиар и через время покупатель будет искренне верить в то что кроме (подставить сюда название ЛЮБОГО некоробочного продукта) ему ничего и не надо. ![]() Это вообще не относится к дискуссии. 1) Кросплатформенное оно, или не кроссплатформенное - это вообще из другой оперы. Когда мне покажут писалку СДР, котроую можно было бы (пусть даже перекомилировав) запустить и в Win, и в Lin - я поверю в то, что такое ПО вообще существует. 2) Хвастаться коробками можно. Это "немножко" другой уровень программирования. Попробуй, для начала, сделать что нибудь сам. Или с маленькой командочкой. Пусть даже не коробку. Пусть это будет банальное freeware, которое захотят скачать и установить себе .. ну скажем, 1000 человек (хотя бы) из.. ну скажем, 20 разных стран мира. возьмёшся? У тебя всё "если бы да кабы", потратить пару миллиардов баков на рекламу, и т.д. ![]() |
Сообщ.
#147
,
|
|
|
Цитата BugHunter @ 1) Кросплатформенное оно, или не кроссплатформенное - это вообще из другой оперы. Когда мне покажут писалку СДР, котроую можно было бы (пусть даже перекомилировав) запустить и в Win, и в Lin - я поверю в то, что такое ПО вообще существует. Мне кажется, или cdrecord таки есть для NT? По крайней мере, был. И работал. А так, основная платформа для него вообще солярка, потом *BSD, потом аж линукс (который автору, Йоргу Шиллингу, до зубовного скрипа не нравится, кстати). mkisofs с перекомпиляцией идет подо всем, что двигается. |
Сообщ.
#148
,
|
|
|
Цитата cdrecord таки есть для NT Честно говоря, такого я пока ещё не видел (пожимает плечами). В lin использую k3b. |
Сообщ.
#149
,
|
|
|
Цитата BugHunter @ Честно говоря, такого я пока ещё не видел Есть. Если не ошибаюсь, работает под cygwin'ом. |
Сообщ.
#150
,
|
|
|
Цитата BugHunter @ Насколько я знаю, K3B это и есть frontend к cdrecord и прочему утилю типа growisofs, mkisofs, dvd+rw-format, etc. В lin использую k3b. |
Сообщ.
#151
,
|
|
|
Цитата BugHunter @ А, собсно, зачем? А есть кроссплатформенная альтернатива? Цитата BugHunter @ Это вообще не относится к дискуссии. 1) Кросплатформенное оно, или не кроссплатформенное - это вообще из другой оперы. Когда мне покажут писалку СДР, котроую можно было бы (пусть даже перекомилировав) запустить и в Win, и в Lin - я поверю в то, что такое ПО вообще существует. 2) Хвастаться коробками можно. Это "немножко" другой уровень программирования. Попробуй, для начала, сделать что нибудь сам. Или с маленькой командочкой. Пусть даже не коробку. Пусть это будет банальное freeware, которое захотят скачать и установить себе .. ну скажем, 1000 человек (хотя бы) из.. ну скажем, 20 разных стран мира. возьмёшся? 1)Мне не нравится когда к примеру о приложении написаном под .NET говорят якобы оно «кроссплатформенное» на Python реально написать кроссплатформенное приложение. Надеюсь ясно к чему? 2)«Попробуй, для начала, сделать что нибудь сам.» Пробовал и уже не раз. И так «Или с маленькой командочкой» тоже было дело. «возьмёшся?» В общем то да. Без проблем. Все зависит от того за что именно браться и собственно конечная цель всего мероприятия. IMHO коробки от не коробок отличаются только одним – на коробки тратятся деньги которые разработчик хочет получить потом с продукта отсюда реклама. Не коробки не ставят себе целью зарабатывание денег. Вот и вся разница. Как в музыке ПОП музыка (на потребителя и с огромными затратами на рекламу) и андерграунд. Цитата BugHunter @ У тебя всё "если бы да кабы", потратить пару миллиардов баков на рекламу, и т.д. . Сразу видно - идеалист и теоретик. Своих денег в дело никогда не вкладывал. Не приходилось откровенно говоря. Цитата BugHunter @ Честно говоря, такого я пока ещё не видел Собственно по сабжу в Python думаю что проблем быть не должно. |
Сообщ.
#152
,
|
|
|
Сообщ.
#153
,
|
|
|
Цитата Smike @ что еще раз подтверждает гибкость и богатство библиотеки VCL. ![]() ![]() ![]() Добавлено Кстати, скажи мне, сколько это чудо стоит? Судя по твоим высказываниям, я слабо верю в альтруизм разработчиков компонент для Delphi. А потому, прежде чем засчитывать слив чему-либо, озвуч конкретную циферьку. Дабы каждый разработчик смог бы убедиться - насколько ему по карману такое "богатство средств". Добавлено А то может получиться, что фотошоп то рулит, пока его стоимость - 100-200 руб... |
Сообщ.
#154
,
|
|
|
Данный компонент бесплатен и FullSource.
Добавлено Цитата Flex Ferrum @ Судя по твоим высказываниям, я слабо верю в альтруизм разработчиков компонент для Delphi. А кто говорит об альтруизме? Просто так же как и в случае с boost разработчики делают для саморекламы, для раскрутки сайтов, а также собственных коммерческих компонентов и программ. Принципы в общем те же, что и в opensource в принципе. Я и сам пишу бесплатные компоненты и программы на Delphi. Цитата Flex Ferrum @ А то может получиться, что фотошоп то рулит, пока его стоимость - 100-200 руб... А для питона такой за деньги купить можно? Цитата Flex Ferrum @ Дабы каждый разработчик смог бы убедиться - насколько ему по карману такое "богатство средств". Причем тут это? DevExpress - не бесплатная библиотека, но стоит недорого, если она действительно нужна и будет использоваться в серьезном коммерческом проекте. Цифры порядка $100-200. Для Python'а же ничего подобного вообще нет. И я не представляю, чего бы стоило разработать что-то подобное на чистом питоне. Здесь факториал со всеми цифрами не поможет. А VCL очень сильно упрощает труд программиста, поэтому и рождается такое множество компонентов для Delphi, платных и бесплатных. |
Сообщ.
#155
,
|
|
|
Цитата Smike @ питон шумно сольет и пойдет курить в сторонке «Шумно сливать» щаз будет Delphi. Smike как я уже говорил на Python плевое дело написать реально кросс платформенную программу (все вышеприведенные мною примеры таковыми являются!). Но кроме того я могу во время работы программы выяснить ее окружение: ось(windows or linux?); рабочий стол(KDE or Gnome or... ?). И дальше используя этот небольшой набор библиотек: Цитата kdebindings-python - Python bindings for KDE python-gnome - Python bindings for GNOME python-gtk - Python bindings for the GTK+ widget set python-opengl - OpenGL bindings for Python python-qt - Python Bindings for Qt python-tk - TkInter - Python Tk Interface рисовать визуальный интерфейс уже непосредственно теми средствами которые мне доступны. А могу вообще не использовать ГУЙёвого интерфейса (консольное приложение) или могу к примеру на ВЕБ интерфейс прикрутить. Цитата Smike @ что еще раз подтверждает гибкость и богатство библиотеки VCL...(cut) А VCL очень сильно упрощает труд программиста, поэтому и рождается такое множество компонентов для Delphi, платных и бесплатных. Delphi+VCL=Простота и быстрота разработки. Тут я с тобой полностью согласен! Но я скажу что Python слил только тогда когда увижу что Delphi осилит хотя бы этот список виджетов(см выше)... Цитата Smike @ А для питона такой за деньги купить можно? Можно! Smike только для тебя сегодня и до конца недели скидки – 20%. Продам 100% й рецепт «как к программе на Python прикрутить VCL или ваще «С»ёвое че нить. Цитата Smike @ Для Python'а же ничего подобного вообще нет. LOL! ![]() |
Сообщ.
#156
,
|
|
|
Цитата best_lamer @ Delphi+VCL=Простота и быстрота разработки. Тут я с тобой полностью согласен! Но я скажу что Python слил только тогда когда увижу что Delphi осилит хотя бы этот список виджетов(см выше)... Нет проблем. Было бы желание и необходимость. QT же прикрутили к CLX? А где-то на сорцфордже GTK+ for Delphi ![]() Цитата best_lamer @ Можно! Smike только для тебя сегодня и до конца недели скидки – 20%. Продам 100% й рецепт «как к программе на Python прикрутить VCL или ваще «С»ёвое че нить. Зачем? Чего мне не хватает в Delphi, что дал бы мне Питон? Кроссплатформенность? Если правильно писать, то можно потом компилировать и FPC или хотя бы Kylix (а многие компоненты и на него рассчитаны) скомпилировать. Цитата best_lamer @ LOL! ![]() А ты уже погуглил? Покажи мне что-нибудь подобное. Начнем хотя бы с многострочных деревьев ![]() |
Сообщ.
#157
,
|
|
|
fpc и Delphi несовместимы - это не значит что нельзя портировать... но портирование это работа! О Kylix я бы вообще помалкивал... У меня Delphi 7 под Wine замечательно себя чувствует раз туда разговор пошел.
Цитата Smike @ Покажи мне что-нибудь подобное. Начнем хотя бы с многострочных деревьев Набираю в гугле "Python GtkTreeView example" Первый в списке GtkTreeView: A short tutorial ![]() Добавлено А вообще Smike если тут чего не найдеш спрашивай. ![]() |
Сообщ.
#158
,
|
|
|
Цитата best_lamer @ fpc и Delphi несовместимы Смотря на каком уровне. Цитата best_lamer @ Набираю в гугле "Python GtkTreeView example" Первый в списке GtkTreeView: A short tutorial ![]() И где там хоть слово о многострочных деревьях? |
Сообщ.
#159
,
|
|
|
Цитата Smike @ Смотря на каком уровне. На уровне открыл examples из Delphi(fpc) в fpc(Delphi) и просто нажав на кнопку Run получил готовую программу без всяких преобразований в исходном коде. |