Чего мне не хватает в FreePascal

Любые обсуждения, не нарушающие правил форума.

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

Re: Чего мне не хватает в FreePascal

Сообщение Шурик Сетевой » 10.04.2011 13:33:23

Насчет хешей (ака ассоциативных массивов): если кому надо, гляньте модуль Containers (Uses contnrs), там должна быть рабочая реализация.

http://www.freepascal.org/docs-html/fcl ... dex-4.html
Шурик Сетевой
новенький
 
Сообщения: 11
Зарегистрирован: 05.03.2009 21:42:42

Re: Чего мне не хватает в FreePascal

Сообщение stikriz » 10.04.2011 20:09:48

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

Послушаешь вот таких дерзких хлопчиков, и ощущение, будто на паскале как не выделывайся, только картину чудную можно написать.
Вообще, не все же пишут класику. Кто-то среди нас и Пикасо. Если мне надо малевать, то я должен иметь возможность.
Хотя, я не думаю, что из-за того, что любая операция возвращает значение есть проблемы с пониманием кода.
Нет! Этой бесовщины не надо!Такие конструкции тоже запрещают, когда пишут софт для авиационного прибора!

Да, прекрасно, что запрещают для авиационного прибора. И если это будет в паскале, то будут и дальше запрещать. Потом, какое мне, да и 99.999999% программистов дело до авиационного прибора? Не, ну правда?
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Чего мне не хватает в FreePascal

Сообщение devels » 11.04.2011 09:12:14

Шурик Сетевой писал(а):Насчет хешей (ака ассоциативных массивов): если кому надо, гляньте модуль Containers (Uses contnrs), там должна быть рабочая реализация.

http://www.freepascal.org/docs-html/fcl ... dex-4.html


Реализация хеш таблиц там медленная, хотя и не самая медленная из тех что я видел.

Для меня в хеш таблице главное:

1. Поиск должен быть максимально быстрым, даже в ущерб памяти и другим операциям
2. Операция добавления также должна быть максимально быстрой
3. Хеш таблица должна быть динамический
4. Операция очищения хеш таблицы от значений также должна быть довольно быстрой
5. У хеш таблицы должен быть метод ее клонирования
devels
постоялец
 
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

Re: Чего мне не хватает в FreePascal

Сообщение vada » 11.04.2011 10:03:43

c := a := b;

Точно бесовская конструкция.

А против множеств значит возражений нет? Никто не попинал даже :)
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Чего мне не хватает в FreePascal

Сообщение Max Rusov » 11.04.2011 10:26:00

vada писал(а):А против множеств значит возражений нет? Никто не попинал даже :)

Ну а как ты представляешь себе реализацию?

SizeOf(set of char) = 32.

Для word должно быть:

SizeOf(set of word) = 8K

Про Integer вообще помолчим...
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Чего мне не хватает в FreePascal

Сообщение files32 » 11.04.2011 12:56:23

Да, ассоциативных массивов по примеру PHP действительно не хватает, типа
Код: Выделить всё
$data = array ('n1' => array('name' => 'main_base', 'pass'=>'123', 'n2' => array('name' => 'second_base', 'pass'=>'678'));

Насчет хешей (ака ассоциативных массивов): если кому надо, гляньте модуль Containers (Uses contnrs), там должна быть рабочая реализация.

http://www.freepascal.org/docs-html/fcl ... dex-4.html

Это немного не то.
files32
новенький
 
Сообщения: 24
Зарегистрирован: 27.10.2007 13:42:41

Re: Чего мне не хватает в FreePascal

Сообщение v-t-l » 11.04.2011 13:30:23

v-t-l
энтузиаст
 
Сообщения: 734
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Чего мне не хватает в FreePascal

Сообщение devels » 11.04.2011 16:20:05



Это не хеш таблица, по исходникам видно, ведь весь профит хеш таблиц в мгновенном поиске ключей, даже если у вас будет 1 млн элементов. Если будете искать ключ перебором, медленнее будет примерно в 1000-10000 раз по-сравнению с хеш таблицей, бинарный поиск будет быстрее обычного перебора, но ему все равно очень далеко до хеш-таблиц. И если вы возьмете тот класс и хеш-массив из пхп и сравните их скорость, то увидите что в пхп ассоциативный массив будет работать нааааамного быстрее TArray < .. >, единственное потребление памяти будет меньше у TArray.
devels
постоялец
 
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

Re: Чего мне не хватает в FreePascal

Сообщение Max Rusov » 11.04.2011 17:20:45

devels
Что то я сильно сомневаюсь, что ассоциативный массив на PHP покажет более высокую скорость чем двоичная коллекция на Delphi. Вы производили замеры? Позвольте поинтересоваться цифрами.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Чего мне не хватает в FreePascal

Сообщение devels » 11.04.2011 17:50:15

Max Rusov писал(а):devels
Что то я сильно сомневаюсь, что ассоциативный массив на PHP покажет более высокую скорость чем двоичная коллекция на Delphi. Вы производили замеры? Позвольте поинтересоваться цифрами.


Я делал замеры, и еще не находил ни одну хеш-таблицу реализованную на fpc/delphi, которая бы работала быстрее чем в пхп (в плане добавления и поиска). Если делать дерево, тогда операция добавления/удаления будет намного медленнее чем у хеш-таблиц, но в пхп не дерево, да и в Java и других языках есть классы для хеш-таблиц, именно для хеш-таблиц. В java скорость хеш-таблиц я думаю вообще космическая, дело тут еще и в умном менеджере памяти, т.к. на выделение памяти для элементов хеш-таблицы тратится достаточно времени.
devels
постоялец
 
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

Re: Чего мне не хватает в FreePascal

Сообщение Max Rusov » 11.04.2011 18:03:53

devels

Можно увидеть цифры? А в идеале - тесты?
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Чего мне не хватает в FreePascal

Сообщение devels » 11.04.2011 18:20:57

Max Rusov писал(а):devels

Можно увидеть цифры? А в идеале - тесты?


Стандартная хеш-таблица из fpc, старался свести к минимуму лишние операции (IntToStr например).
Код: Выделить всё
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes,
  SysUtils,
  Windows,
  contnrs
  { you can add units after this };

{$R *.res}

  var
     HashT: TFPStringHashTable;
     I, J, t: Integer;
     Val: AnsiString;
     SAVE_INTS: Array of String[4];

begin
    HashT := TFPStringHashTable.Create;
    SetLength(SAVE_INTS, 1000);
    for i := 0 to 1000 do
          SAVE_INTS[ i ] := IntToStr(i);

    t := GetTickCount;
    for j := 0 to 1000 do
    begin
       HashT.Clear;

       for i := 0 to 1000 do
          HashT.Add(SAVE_INTS[i]+'x', 'x');

       for i := 0 to 1000 do
          val := HashT.Items[SAVE_INTS[i]+'x'];
    end;
    WriteLn(GetTickCount - t);
end.


Теперь код на php:
Код: Выделить всё
$t = microtime(1);
$j = 0;
while ($j++ < 1000){
    $i = 0;
    $arr = array();
    while ($i++ < 1000)
        $arr[$i.'x'] = 'x';
   
    $i = 0;
    while ($i++ < 1000)
        $val = $arr[$i.'x'];
}

echo (microtime(1)-$t)*1000;



Результаты:
PHP 5.3 - 1650 mlsec
FPC 2.4.2 - 3650 mlsec (максимальные оптимизации, без дебага).

Это еще учесть что в PHP байт-код, интерпретация и т.п, т.е. доп-расходы на конкатенацию, циклы и т.п., можно отнять еще -500 mlsec.
devels
постоялец
 
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

Re: Чего мне не хватает в FreePascal

Сообщение Sergei I. Gorelkin » 11.04.2011 19:36:59

А если SAVE_INTS объявить как array of ansistring?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Чего мне не хватает в FreePascal

Сообщение devels » 11.04.2011 20:22:20

Sergei I. Gorelkin писал(а):А если SAVE_INTS объявить как array of ansistring?


Наоборот, так меньше памяти тратится и быстрее, но там на конвертацию тратится ну максимум 5% (IntToStr).
devels
постоялец
 
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

Re: Чего мне не хватает в FreePascal

Сообщение Sergei I. Gorelkin » 11.04.2011 20:41:19

Если SAVE_INTS - массив shortstring (а string[4] - это shortstring), то в они в цикле преобразуются в ansistring, причем два раза - один при добавлении, другой при чтении...
Но вообще 3.5 секунды на, грубо говоря, цикл из 2000 итераций - это какая-то совсем уж хрень. Тут нужно разбираться.

Кстати, в менеджере памяти удалось найти, хм, недоработку, из-за которой при определенных обстоятельствах его скорость падает практически в 10 раз. И очень может быть, что этот глюк проявляется и в этом тесте...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Пред.След.

Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru