Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему так не любят Delphi? 
:(
    Опции темы
Zloxa
Дата 17.4.2013, 23:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



Цитата(diadiavova @  18.4.2013,  00:20 Найти цитируемый пост)
 надо ли что-то еще объяснять

Надо, мне было интересно почитать. Спасибо. smile

Но, на сколько я понял скупые сентенции твоего оппонента, он пытался донести мысль, что ты пользуешься убогим инструментарием, а ты эту мысль, в общем, скорее обосновал, наглядно показав, что шарп не оптимизирует хвостовую рекурсию, но сделал это так шикарно, что если бы я действительно не понял о чем ты говоришь, я бы подумал что Д'Артаньян в самом деле - не LSD.  smile 

Это сообщение отредактировал(а) Zloxa - 17.4.2013, 23:31


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
SKrivosein
Дата 17.4.2013, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


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

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



Цитата(SKrivosein @ 17.4.2013,  22:29)
я впечатлён тем что у daidaivova нашлось желание разобратся в F#

Я например никак не могу научится думать функционально. Например на С, С#, JavaScript и т.д. у меня получается думать на несколько строк вперёд  smile 
А вот на F#, да и LISP я пробовал, так не могу. Быстро теряю интузазиммм и впадаю в уныниёёё....
И вот никак не понять если это моя тупость, или я просто ещё не нашел правильную задачу в правильное время  smile 

P.S. Как то все отошли от главной темы, да и слава богу  smile 

Это сообщение отредактировал(а) SKrivosein - 18.4.2013, 03:14


--------------------
Оптимист - это плохо информированный человек.
user posted image

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


Опытный
**


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

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



Цитата(diadiavova @  17.4.2013,  23:20 Найти цитируемый пост)
К тому, что до этого я упомянул хвостовую рекурсию и в ответ получил два поста, из которых следовало, что меня просто не поняли.

Не, я в основном подумал, что serger меня неправильно понял. =)

Добавлено через 2 минуты и 36 секунд
Цитата(SKrivosein @  17.4.2013,  23:32 Найти цитируемый пост)
А вот на F#, да и LISP я пробовал, так не могу.

Попробуй Haskell по этому. =)


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
serger
Дата 18.4.2013, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да в общем-то я пытался всего лишь написать, ну пусть будет так: 

Раз Delphi не может оптимизировать хвостовую рекурсию, то он так себе язычок. Ведь работать в функциональном стиле гораздо интереснее... ;) Ну и C# - тоже.  smile 

Ну и за содержательный ответ, diadiavova, спасибо. Лови +.

Добавлено через 14 минут и 41 секунду
Ну и вот:
http://geeknizer.com/java-8-java-9-features-preview/

А вообще и без них всё равно красиво:
Код

int sumOfWeight = 
        shapes.parallel().filter(s → s.getColor() == BLUE)
                .map(Shape::getWeight)
                .sum();



--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
SKrivosein
Дата 18.4.2013, 09:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


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

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



Цитата(k0rvin @ 18.4.2013,  06:06)
Попробуй Haskell по этому. =)

Ага! Вот вы как, функциональщики, детей в свои сети ловите.  smile 


--------------------
Оптимист - это плохо информированный человек.
user posted image

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


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



Цитата(SKrivosein @ 18.4.2013,  10:00)
Цитата(k0rvin @ 18.4.2013,  06:06)
Попробуй Haskell по этому. =)

Ага! Вот вы как, функциональщики, детей в свои сети ловите.  smile

Да, стиль оформления иллиюстраций навевает мысли о целевой аудитории smile
user posted image


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
k0rvin
Дата 18.4.2013, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Zloxa @  18.4.2013,  09:17 Найти цитируемый пост)
Да, стиль оформления иллиюстраций навевает мысли о целевой аудитории 

Да, вынужденная мера, в виду того, что многие императивщики остались на том самом уровне. =)


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
SKrivosein
Дата 18.4.2013, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


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

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



Я, как дотнетчик скорее хотел бы F# победить. Но никак не соберусь духом пуститься до чего либо серьёзного. А без этого простые примеры с книжек испаряются с мозга  smile 
Работать всё таки приходится с C#... Ну это мои личные проблемы.


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
diadiavova
Дата 18.4.2013, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Zloxa @  18.4.2013,  00:31 Найти цитируемый пост)
что ты пользуешься убогим инструментарием

Цитата(serger @  18.4.2013,  07:38 Найти цитируемый пост)
Раз Delphi не может оптимизировать хвостовую рекурсию, то он так себе язычок. Ведь работать в функциональном стиле гораздо интереснее... ;) Ну и C# - тоже.

Ну я уже сказал, что работать в функциональном стиле - совсем не значит, что надо все циклы рекурсией заменять. На самом деле в функциональных языках есть много готовых удобных функций для обработки коллекций. В C#, VB.Net да и других языках тоже есть LINQ и это дает возможность обрабатываеть коллекции именно в функциональном стиле. 
Цитата(serger @  18.4.2013,  07:38 Найти цитируемый пост)
А вообще и без них всё равно красиво:
Код

int sumOfWeight = 
        shapes.parallel().filter(s → s.getColor() == BLUE)
                .map(Shape::getWeight)
                .sum();

Вот линк - примерно то же самое, только еще есть поддержка на уровне языка, и помимо синтаксиса подобного приведенному можно еще сделать и так
Код

var pers = from p in persons.AsParallel()
                       where p.LastName.StartsWith("А")
                       orderby p.Name
                       group p by p.BirthDate into persgroup
                       select persgroup;

Что до оптимизации хвостовой рекурсии, то в функциональных языках это необходимость, в чистых функциональных языках это вообще критично, поскольку кроме рекурисии там вообще нет способов выполнить повторяющиеся действия (если не считать готовых функций), а в императивном языке это не очень-то и нужно. В конце концов, хвостовая рекурсия выглядит совсем не так уже и красиво. Кроме того, в тех  ситуациях, когда есть смысл вообще использовать рекурсию, она либо в принципе не может быть приведена к хвостовому виду, либо приобретает форму настолько сложную, что ну ее нафиг. Видел я вариант с приведением к хвостовому виду рекурсивной обработки бинарного дерева. Монстр. Учитывая, что любое дерево можно представить в виде бинарного, наверно можно и обработку обычного дерева привести к хвостовому виду, но думаю, что это будет еще более жуткий монстр и выгода от такого преобразования более чем сомнительна. Поэтому я не считаю, что отсутствие оптимизации хвостовой рекурсии приносит серьезные неудобства и даже если ее в будущем реализуют в том же шарпе, то я подозреваю, что польлзоваться ей будут мало.


Цитата(SKrivosein @  18.4.2013,  00:32 Найти цитируемый пост)
я впечатлён тем что у daidaivova нашлось желание разобратся в F#

Если я написал несколько строк на этом языке, это еще не  делает меня знатоком оного smile 
Цитата(k0rvin @  18.4.2013,  07:06 Найти цитируемый пост)
Попробуй Haskell по этому. =)


Не думаю, что это хороший совет, тем более для дотнетчика. У F# есть явные преимущества перед другими функциональными языками, а тем более чистыми. Во-первых это среда разработки, несмотря на то, что поддержка языка там не такая крутая как для вб или до-диеза, тем не менее поддержка неплохая и главное - есть перспектива развития. Во-вторых, совместимость с другими языками платформы, это и компиляция в те же ил-коды, и совместимость типов, и энергичные вычисления по умолчанию, и поддержка ооп. Ну и в-третьих, есть возможность писать императивный код, когда это более удобно как с точки зрения понятности кода, так и с точки зрения производительность. Кроме того есть возможность пользоваться привычными библиотеками, а для дотнетчика это тоже плюс. Литература, документация тоже присутствуют и в большом количестве.
Например тот же подсчет элементов коллекции можно реализовать и так
Код

let impsum (nl:int list) = 
    let mutable acc = 0
    for i = 0 to nl.Length - 1 do acc <- nl.[i] + acc
    acc


Добавлено через 4 минуты и 5 секунд
Цитата(SKrivosein @  18.4.2013,  00:32 Найти цитируемый пост)
Как то все отошли от главной темы, да и слава богу

Подожди, сейчас главный дельфист выйдет из бана, он вам всем покажет smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Zloxa
Дата 18.4.2013, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



Цитата(diadiavova @  18.4.2013,  11:19 Найти цитируемый пост)
это не очень-то и нужно.

 smile 
Да, выглядит как сопелка, которая может позволить сэкономить 1e-3% Злохиного времени  smile 


Попробовал нагрузить оракл рекурсией.
фигзнает, толи стек у pl/sql в куче, толи фиг его знает что, но быстро не падает, падла

Код

declare 
  v_cnt number := 0;
  v_last_refresh_date date := sysdate;
  
  procedure bar
  is
  begin
    -- делаем что-нибудь, чтобы оптимизатор не оптимизировал
    dbms_output.put_line('Oops');
  end;

  procedure foo(p_foo varchar2)
  is
  begin
    if length(p_foo) = 1 -- условие не выполнится никогда, 
                         -- используем параметр, чтобы отпимизматор не оптимизировал
    then
      dbms_output.put_line(p_foo);
    end if;
    
    v_cnt := v_cnt + 1;
    if v_last_refresh_date != sysdate 
    then
      dbms_application_info.set_action(v_cnt);
      v_last_refresh_date := sysdate;
    end if;
    foo(dbms_random.string(opt => 'x' --'x','X'  :  any alpha-numeric characters (upper)
                          ,len => 32*1024
                           )
       );                           
    bar;       
  end;
begin
  dbms_application_info.set_module(module_name => 'recurse depth test'
                                  ,action_name => null
                                  );
  foo(dbms_random.string(opt => 'x' --'x','X'  :  any alpha-numeric characters (upper)
                        ,len => 32*1024 
                         )
     );
exception
  when others then
    dbms_output.put_line(v_cnt);  
    raise;
end;

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


мониторинг
Код

SQL> select to_char(sysdate,'HH24:MI:SS') time
  2         ,s.action
  3         ,p.pga_used_mem
  4  from gv$session s
  5       ,gv$process p
  6  where
  7    s.inst_id = p.inst_id
  8    and s.paddr = p.addr
  9    and s.module = 'recurse depth test'
 10  /
TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
10:50:45 53393                                                               328739388

SQL> /
TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
10:51:15 59543                                                               366194876

SQL> /
TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
10:52:06 70168                                                               431131196

SQL> /
TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
10:52:58 81012                                                               497018244

SQL> /
TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
10:55:17 108970                                                              667272324

SQL> /
TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
10:57:25 135694                                                              830002604

SQL> /
TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
10:58:45 152274                                                              930550212

SQL> /
TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
11:09:17 281488                                                             1718490676

SQL> /
TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
11:31:32 554655                                                             3382854820

SQL> /
TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
11:35:55 606960                                                             3701487980

Дальше ждать эксепшна - не досуг, рублю сессию

Добавлено @ 10:52
Цитата(Zloxa @  18.4.2013,  11:38 Найти цитируемый пост)
не падает, падла

Зато залипает, падла  smile 
Код

SQL> /
TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
11:43:13 691210                                                             4215114956

TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
11:44:32 691210                                                             4215114956

SQL> /
TIME     ACTION                                                           PGA_USED_MEM
-------- ---------------------------------------------------------------- ------------
11:45:46 691210                                                             4215114956



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

SQL> set timing on
SQL> select to_char(sysdate,'HH24:MI:SS') time
  2         ,s.action
  3         ,s.status
  4         ,p.pga_used_mem
  5  from gv$session s
  6       ,gv$process p
  7  where
  8    s.inst_id = p.inst_id
  9    and s.paddr = p.addr
 10    and s.module = 'recurse depth test'
 11  /
TIME     ACTION                                                           STATUS   PGA_USED_MEM
-------- ---------------------------------------------------------------- -------- ------------
11:53:12 691210                                                           ACTIVE     4215114956
Executed in 2.641 seconds


Ах, хорошо - что в последний момент интуиция удержала меня от запуска этого кейса на продуктивном окружении  smile 

Это сообщение отредактировал(а) Zloxa - 18.4.2013, 11:03


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Zloxa
Дата 18.4.2013, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



Ну и в конце концов, я таки получил
Код

ORA-03113: end-of-file on communication channel
Process ID: 911
Session ID: 19 Serial number: 39083

Т.е он просто тупо провал сессию, выкинуть сколь нибудь осмысленный эксепшн, походу не смог  smile

Добавлено через 5 минут
Здесь, если исходить из моего понимания логики наших коллег-функциональщиков, я должен бы сделать вывод, что Oracle - гoвно, но PL/SQL таки лучше C#  smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
diadiavova
Дата 18.4.2013, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Zloxa @  18.4.2013,  11:38 Найти цитируемый пост)
Да, выглядит как сопелка, которая может позволить сэкономить 1e-3% Злохиного времени  smile 

Скорей всего не сэкономит вообще. Обычно такой код надо лучше продумывать, в результате может и компактнее получается, но труда в него приходится вкладывать даже больше. Может в моем случае это результат того, что я неуверенно себя чувствую в языке, но вообще спецы пишут то же самое.
Цитата(Zloxa @  18.4.2013,  11:38 Найти цитируемый пост)
Попробовал нагрузить оракл рекурсией.

А что ты хотел выяснить? smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Zloxa
Дата 18.4.2013, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



Цитата(diadiavova @  18.4.2013,  12:05 Найти цитируемый пост)
А что ты хотел выяснить?

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


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
serger
Дата 18.4.2013, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(diadiavova @  18.4.2013,  11:19 Найти цитируемый пост)
Вот линк - примерно то же самое

diadiavova, да на всех языках что-то близкое получается )



--------------------
упс!
PM MAIL WWW Skype GTalk Jabber   Вверх
Akella
Дата 18.4.2013, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Цитата(Alexeis @ 15.4.2013,  22:26)
Цитата(serger @  15.4.2013,  15:31 Найти цитируемый пост)
7 версия хуже notepad++ была ;) 

Версия 7 была в 2001м году, когда notepad++ еще в мыслях не было!

Тем не менее для Delphi сейчас есть неплохой выбор экспертов (настроек) в том числе и бесплатных.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

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


 




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


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

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