How to make Lisp go faster than C
От: Turtle.BAZON.Group  
Дата: 08.07.09 04:33
Оценка:
Обычно существует мнение, что Lisp язык интерпретируемый, поэтому он по определению медленне, чем C. Тем не менее, современный Lisp, а именно Common Lisp закрепляет стандартом возможность компилирования не только в байт-код, но и в нативный код целевой машины. Естественно, просто так всё не происходит, поэтому в статье описываются возможности повышения производительности путём декларации типов и статической компиляции.
Re: How to make Lisp go faster than C
От: Аноним  
Дата: 08.07.09 06:26
Оценка: +1
Здравствуйте, Turtle.BAZON.Group, Вы писали:

TBG>Обычно существует мнение, что Lisp язык интерпретируемый, поэтому он по определению медленне, чем C. Тем не менее, современный Lisp, а именно Common Lisp закрепляет стандартом возможность компилирования не только в байт-код, но и в нативный код целевой машины. Естественно, просто так всё не происходит, поэтому в статье описываются возможности повышения производительности путём декларации типов и статической компиляции.


http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&lang=all&d=ndata&calc=calculate&xfullcpu=1&xmem=0&xloc=0&binarytrees=1&chameneosredux=1&fannkuch=1&fasta=1&knucleotide=1&mandelbrot=1&meteor=0&nbody=1&nsieve=1&nsievebits=1&partialsums=1&pidigits=1&recursive=1&regexdna=1&revcomp=1&spectralnorm=1&hello=0&sumcol=1&threadring=0

что удивительно, если объеденить "С\С++", получается

1. С\С++
2. Lisaac
3. Free Pascal
4. Clean
5. D
6. Haskell !
...

1.0 C++ Intel 1.20 3
1.0 C Intel 1.26 2
1.1 C GNU gcc 1.32 2
1.1 C++ GNU g++ 1.33
1.1 Lisaac 1.36 4
1.2 Pascal Free Pascal 1.42 2
1.3 Clean 1.57 3
1.5 D Digital Mars 1.80
1.6 Haskell GHC 1.97 1
1.7 Eiffel SmartEiffel 1.99 3
1.7 Oberon-2 OO2C 2.02 7
1.7 Fortran Intel 2.10 4
1.9 Ada 2005 GNAT 2.22 1
1.9 SML MLton 2.25 3
1.9 OCaml 2.26 4
2.0 BASIC FreeBASIC 2.35 2
2.0 Java 6 -Xms64m 2.46
2.1 Java 6 -server 2.56
2.4 Java 6 -client 2.84
2.9 Lisp SBCL 3.43 3

Так шо SBCL на почетном 20 месте
Re: How to make Lisp go faster than C
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 11.07.09 09:25
Оценка: +1
Ага, веселая статья.
"возьмем простой микробенчмарк. вот код на С из 3 строк с 1 ошибкой. Вот аналогичный код на лиспе, он в 60 раз медленнее. Раздуем его в два раза ужасно длинными аннотациями типов. Получим на ряде тестов скорость такую же, на одном в 3 раза хуже и на одном на 10% лучше. Ура!"
Re: How to make Lisp go faster than C
От: Аноним  
Дата: 13.07.09 08:45
Оценка:
Здравствуйте, Turtle.BAZON.Group, Вы писали:

TBG>Обычно существует мнение, что Lisp язык интерпретируемый, поэтому он по определению медленне, чем C. Тем не менее, современный Lisp, а именно Common Lisp закрепляет стандартом возможность компилирования не только в байт-код, но и в нативный код целевой машины. Естественно, просто так всё не происходит, поэтому в статье описываются возможности повышения производительности путём декларации типов и статической компиляции.


Мне не нравится то что информацию о типах надо задавать в декларации функции:
(defun add (to from val)
  (declare (type (simple−array single−float (*))
            to from ))


Гораздо удобнее когда алгоритм составлен один раз:
(defun add (to from val)
  (let ((size (array−dimension to 0)))
    (dotimes (i size)
      (set f (aref to i) (+ (aref from i) val)))))


и компилятор сам принимает решение какую оптимизацию выполнять в зависимости от типа данных: если получен голый массив, то генерится самый быстрый алгоритм(как в статье), если получен сложный список, то соответственно медленный универсальный алгоритм. Возможно ли это в лиспе?
Re[2]: How to make Lisp go faster than C
От: Turtle.BAZON.Group  
Дата: 15.07.09 07:39
Оценка:
Здравствуйте, Аноним, Вы писали:

А>и компилятор сам принимает решение какую оптимизацию выполнять в зависимости от типа данных: если получен голый массив, то генерится самый быстрый алгоритм(как в статье), если получен сложный список, то соответственно медленный универсальный алгоритм. Возможно ли это в лиспе?


SBCL умеет простенько выводить типы и принимать решение об оптимизации. К сожалению, вывод типов там пока сильно простенький, поэтому иногда приходится декларировать типы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.