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

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

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

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

Сообщение devels » 12.04.2011 17:02:33

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

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

Сообщение Шурик Сетевой » 12.04.2011 21:56:46

devels писал(а):Операционка Win XP 32.

Хеш функция у меня самая простая и максимально быстрая, быстрее сделать нереально:
По-моему в FPC тоже простая функция.


У вас используется умножение в цикле, это дорого. Функция FPHash из Contnrs, скорее всего, окажется существенно быстрее - у них там только сдвиги и вычитания.

Куда рыть в смысле оптимизации хеш-функций, я точно не скажу, не помню, где видел сравнение быстродействия и коллизионной устойчивости, но вроде бы сойдет PJW-32 (есть в Википедии), там всего одно деление (в конце вычисления), а в цикле только сдвиги и сложение. Насколько я помню, ее коллизионная стойкость примерно 1 коллизия на 30000 ключей
Шурик Сетевой
новенький
 
Сообщения: 11
Зарегистрирован: 05.03.2009 21:42:42

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

Сообщение devels » 12.04.2011 22:47:12

Шурик Сетевой писал(а):
devels писал(а):Операционка Win XP 32.

Хеш функция у меня самая простая и максимально быстрая, быстрее сделать нереально:
По-моему в FPC тоже простая функция.


У вас используется умножение в цикле, это дорого. Функция FPHash из Contnrs, скорее всего, окажется существенно быстрее - у них там только сдвиги и вычитания.

Куда рыть в смысле оптимизации хеш-функций, я точно не скажу, не помню, где видел сравнение быстродействия и коллизионной устойчивости, но вроде бы сойдет PJW-32 (есть в Википедии), там всего одно деление (в конце вычисления), а в цикле только сдвиги и сложение. Насколько я помню, ее коллизионная стойкость примерно 1 коллизия на 30000 ключей


Она там из-за AnsiString уже не так влияет на скорость - сравните - 3600 mlsec с ансистринг, и 200 mls c shortstring.

http://ru.wikipedia.org/wiki/PJW-32

По моим тестам моя хеш-функция в 2 раза быстрее этой, т.к. в ней полно левых операций. По научному моя функция называется BKDRHash.
devels
постоялец
 
Сообщения: 137
Зарегистрирован: 01.09.2010 12:14:38

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

Сообщение Шурик Сетевой » 12.04.2011 23:25:54

да, нашел сравнение в инете, вроде бы K&R вполне быстрый, по крайней мере быстрее PJW32
http://www.strchr.com/hash_functions
Шурик Сетевой
новенький
 
Сообщения: 11
Зарегистрирован: 05.03.2009 21:42:42

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

Сообщение Max Rusov » 13.04.2011 10:19:27

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

1. Скорости компиляции. В 10 раз медленнее Delphi. И ладно бы код был лучше...
2. Нормальной обработки исключений. То что сейчас есть - это тоска...
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

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

Сообщение bw » 13.04.2011 11:13:09

Может стоит вынести рассуждения о хешах в отдельную ветку?

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

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

Сообщение Сквозняк » 18.04.2011 08:40:33

В 32 битной версии компилятора до сих пор в цикле FOR нельзя использовать переменную INT64. Зравствуй goto и while, причём while велосипед :mrgreen:
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

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

Сообщение Maxizar » 18.04.2011 10:31:13

Сквозняк писал(а):Зравствуй goto и while, причём while велосипед :mrgreen:

Ну goto даже мэтры просят не использовать (Страуструп, Вирт, Кнут), хотя есть и оговорки, мол с Гото в ОЧЕНЬ редких случаях будет красивши и меньше.
Лично я всегда обхожусь одним while (без ГОТО), если это не так это ОДНОЗНАЧНО ошибка в подходе решения задачи. ИМХО.

«причём while велосипед» Почему это? Вот к сожалению не помню в какой книге, я встречал что то в этом роде: «Цикл for в таких языках, которые используют проверку переменной цикла на равенство (=), при незначительных сбоях могут перешагнуть и начать считать не правильно. По этому желательно использовать сравнения типа: <, >, >=, <=, <>, которые защитят вас от подобных недоразумений». Да я понимаю, что в современном мире такое поведение процессора почти не возможно, но истина в этом есть…
Я выше вроде отписывал, что в языках Си и С++ мне нравится именно цикл for, с возможностью задания шага приращения. Такое в языках Паскаль, можно сделать лишь при добавлении в цикл еще одной проверки If (вот это чистой воды Велосипед). Но зато эта задача решается легко в цикле while.

ИМХО:
1. Гото нужно потихоньку забывать, (если программируете на ассемблере это чистой воды jmp, но там и идеология другая, там без этого никуда). Если же перед гото стоит IF это условные переходы на асме (JB, JBE). Но там это норма, в высоких языках - ЗЛО.
2. Можно вообще программировать без цикла For, использовать только while, по этому почему: «while велосипед» я не понял. :(
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

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

Сообщение Max Rusov » 18.04.2011 11:23:34

C-шный for имеет еще одно преимущество, в том, что верхняя граница в нем, обычно, задается как: i < count, а в Pascal приходится писать: to Count - 1. Вроде мелочь, но как следствие переменные цикла должны быть знаковыми, а если Count беззнаковый, то можно нарваться на проблемы... Вообщем куча геморроя на пустом месте...
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

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

Сообщение Сквозняк » 18.04.2011 11:31:01

Ну goto даже мэтры просят не использовать (Страуструп, Вирт, Кнут)
Кнут очень спорный авторитет. Вирта больше интересовал учебный аспект паскаля, ему несложно было для отказа от гото несколько новых языков придумать. Теперь приходится придумывать, чем же они "лучше" "древнего" паскаля.

Лично я всегда обхожусь одним while (без ГОТО), если это не так это ОДНОЗНАЧНО ошибка в подходе решения задачи.
Случайно не Вольво натолкнул на такую мысль?
А куча указателей, define, деления, вещественные числа и высшая математика (дублирующая формулы компилятора) там где они не нужны это хорошо и логично.

«причём while велосипед» Почему это?
При программировании на низком уровне, есть множество задач в которых известно начало и конец диапазона вычисления - то чем занимается for. Также, важно знать текущую позицию вычисления и может понадобиться выйти раньше чем диапазон закончится. Если всё это делать внутри while, то это будет эмуляция for, а для goto это естественно, поэтому оно не велосипед.

«Цикл for в таких языках, которые используют проверку переменной цикла на равенство (=), при незначительных сбоях могут перешагнуть и начать считать не правильно. По этому желательно использовать сравнения типа: <, >, >=, <=, <>, которые защитят вас от подобных недоразумений».
Ну да, с вещественными числами сплошная лажа, последний знак после запятой может округлиться или неточно сосчитаться - целочисленные числа наше всё. Знаки < и > лучше ещё и тем, что использовать их намного спокойнее, они подстрахуют при ошибках вычисления. Пусть фаны математики переживают за дроби, им без них сложно думать.

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

Такое в языках Паскаль, можно сделать лишь при добавлении в цикл еще одной проверки If (вот это чистой воды Велосипед). Но зато эта задача решается легко в цикле while.
Это легко решается при использовании goto и при этом не надо значительно переписывать цикл рискуя налепить ошибок, которые потом придётся долго отлавливать.

1. Гото нужно потихоньку забывать, (если программируете на ассемблере это чистой воды jmp, но там и идеология другая, там без этого никуда). Если же перед гото стоит IF это условные переходы на асме (JB, JBE). Но там это норма, в высоких языках - ЗЛО.
Как удобно в тестовой программе отрубить большой кусок кода при помощи goto, это что-то :D Никакого траха с тоннами // и { }. Используя goto можно писать программы методом раскрутки прототипа без постоянных переписываний, да даже в исхолдниках fpc оно есть. А как сделать переход из цикла в нужное место да так чтобы было хорошо видно куда производится переход?

2. Можно вообще программировать без цикла For, использовать только while, по этому почему: «while велосипед» я не понял.
Можно, но неудобно и постоянно придётся ломать подвал чтобы прилепить балкон. Это задача для программ кодогенераторов. Ты просто не пользовался этим оператором, взял готовое чужое мнение и не проверил, только ли правду ли пишут в книжках.
Сквозняк
энтузиаст
 
Сообщения: 1123
Зарегистрирован: 29.06.2006 22:08:32

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

Сообщение Maxizar » 18.04.2011 14:14:34

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

Сквозняк - Спасибо, Вы мне открыли глаза.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

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

Сообщение vada » 19.04.2011 10:05:38

Как удобно в тестовой программе отрубить большой кусок кода при помощи goto, это что-то Никакого траха с тоннами // и { }. Используя goto можно писать программы методом раскрутки прототипа без постоянных переписываний, да даже в исхолдниках fpc оно есть. А как сделать переход из цикла в нужное место да так чтобы было хорошо видно куда производится переход?


Любителям GOTO курить FORTRAN IV. Вот там стастье то!!!!! Чего только стоят вычисляемые GOTO. Типа GOTO (A+B*C)*D/16.
Уважаемый, Сквозняк, текст программы пишут для человеков а не для компьютеров. Если человек читающий ваш код не понимает что вы там наворотили, грош цена вашему коду. Место его на помойке, даже если он выполняется быстрее скорости света.

ЗЫ. Помница, где-то читал, программистам дали задание реализовать такой алгоритм - если на вход блока подается 1, то выходить должно 2, и на оборот - если прихродит 2 выходить должно 1. Просто? Однако вариантов реализации десятки. Самый чумовой A := 3 - A; А чего! Задание выполнено. Только вот понять никто не может что тут имелось в виду.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

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

Сообщение Nik » 19.04.2011 11:22:40

текст программы пишут для человеков а не для компьютеров.

И пофиг на синтаксис, главное, чтобы красиво было!

Правильнее сказать так: текст программы пишут не только для компьютеров, но и для людей.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

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

Сообщение debi12345 » 19.04.2011 12:12:40

И пофиг на синтаксис, главное, чтобы красиво было!

Ага :) Смотрел С++ код Blender-а - сказка !
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

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

Сообщение Vadim » 19.04.2011 14:21:29

debi12345 писал(а):Ага :) Смотрел С++ код Blender-а - сказка !

Страшная... :D
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Пред.След.

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

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

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

Рейтинг@Mail.ru