Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Зарядить писькОметры!!! ;-) 28.08.07 18:11 Число просмотров: 5401
Автор: HandleX <Александр М.> Статус: The Elderman
|
> Скорость работы программы и скорость ее написания связаны > обратнопропорциональной зависимостью, чем то похожую на > гиперболу. Не люблю программы, написанные за минуту, > которые целый час считают, в то время как они могут > считаться за минуту. Пойми, чаще всего это происходит из-за кривой алгоритмики, а не из-за накладных расходов ООО среды. В случае жабобыдлокодерства ещё и из-за монструозности самой среды (долго стартует) и ненативного гуя, ах видел бы ты как летает смоллток с нативным гуём в вендах! Особенно берёт оторопь от того, что сама среда, всё что ты видишь на экране и что «под капотом» — всё смаллток, до любого объекта можно «достучаться» из эвалюатора и сделать с ним что хошь... В том числе классы и методы это такие же объекты как и всё в смаллток, создание классов/добавление к ним методов — динамический процесс ;-)
> Хоть отслеживание образования фракций и ложится на > внутреннюю реализацию языка, все равно от накладных > расходов при вычислениях не уйти. Они незначительны. Правда! ;-)
> > вычислениях, и меня это НЕ ЗАБОТИТ, всё летает и прыгает и > > выводится без геморроя. > > То же самое при расчёте (1073741823 + 1) / 2 не улечу с > > потерей знака, поскольку я знаю, что у меня целочисленные > > вычисления имеют неограниченную разрядность. > Эначит этот язык годится только 2Х2 считать. Писькометры ниже отпишу.
> Дело в том, что реализация 64битных операций утяжеляет > вычисления на 32 разрядной машине на сложении в два (!) > раза, а на умножении в десятки! Блин. Иерархия арифметических классов + примитивы VM придуманы так, что без особого геморроя ты получаешь результат. Быстро. Со скоростью целочисленной арифметики, оптимальной для данного типа процессора. На 32-битном проце получишь 100%. На 64-битном получишь 200% без изменения хоть одной строчки кода. Те же Fractions тебя засмущали? Всё там хорошо, поскольку сплошная целочисленная арифметика — целочисленные числитель и знаменатель ;-)
А вот с флоат я должен держать в голове 3 вещи сразу — какой тип Float выбрать (single, double, extended), у меня могут там быть переполнения/исчезания порядка и могут быть такие вещи как (a * b / b) <> a.
> Ну и склько времени будет вычисляться 80000!? У меня > виндовый калькулятор считает за минуту. Давай возьмём пример в два раза меньше, у меня машина слабая сейчас, Cel 600 MHz. Итак, Subj!!! Пли!!! ;-)
Итого. MS калькулятор посчитал ~60 сек
2,0916924222121323633204552567643e+166713
Что я вижу? Да, я вижу, это число, в котором 166714 цифр.
Какая цифра у этого числа в позиции 56000? Сколько нулей реально в конце у этого числа? ;-)
Выражение
Time millisecondsToRun: [40000 factorial]
Dolphin Smalltalk посчитал за 38067 миллисекунд. К сожалению, вывод на экран занимает гораздо больше, но сопоставимо, поскольку я оперирую именно целым числом, а не его кастратом в нормализованном виде.
Вывод на экран «поэмы» из 166714 цифр занимает около 4 минут. Я думаю не слабо для динамики, если учесть то, что строковый вывод LargeInteger в Смаллтоке реализован на нём самом же. Математика всегда была штукой с высокой степенью полиморфизма, и это хорошо, если система представляет внутри себя вещи такими, какие они есть на самом деле.
Ну и это... Класс Float никто не запрещал даже в Smalltalk ;-)
Ещё раз — в больших системах динамика выглядит не хуже статики, а удобнее в разы.
|
|
|