LINUX.ORG.RU
Ответ на: комментарий от Bad_ptr

О Боги, они привнесли немного perl/php в Си.

Но в целом, надо потестить, что да как. А то по тестам, приведение типов обычно затармаживает синтетический тест в 4 раза независимо от языка (проверял с perl и php), по сравнению с чистыми сями. Может эта библиотека покажет лучшие результаты.

nickleiten ★★★
()
Ответ на: комментарий от nickleiten

О Боги, они привнесли немного perl/php в Си.

Скорее Python/Haskell.

theNamelessOne ★★★★★
()
Ответ на: комментарий от Oxdeadbeef

А можно увидеть эти «сложные программы» на комонлиспе? Вот на си я вижу - всё написано на си, никаких лиспов я там не вижу. А вот на лиспах я ничего не вижу.

При этом реализация комонлиспа - является тотальным убожеством в терминальной стадии, которое никак не может быть сравнено с тем реализация, что есть в программах на си(которые как-бэ по «мнению» балабола заново реализуются), а вот комонлисп как был в говне там в нём и остался.

Балаболы балаболят, а реализации лиспа как были школьными поделками, так и остаются.

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

registrant27492
()
Ответ на: комментарий от nickleiten

А то по тестам, приведение типов обычно затармаживает синтетический тест в 4 раза независимо от языка

А разве приведение типов это то же самое, что динамическая типизация? Ведь речь тут о ней вроде?

filequest
()
Ответ на: комментарий от registrant27492

лисп потерпел фиаско

Это правда.

но и пример невероятно слабого, как и самого языка, так и его рантайма

Наглая ложь.

сливает жабаскрипту, что показательно

А теперь представь сколько человекочасов было вложено в тот же V8.

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

Наглая ложь.

Нет. Лисп изначально имеет такую природу, что он примитивен в своей убогости. Т.е. язык как бэ создавался не оглядываясь на его потребительские качества, а на низкую квалификацию тех, кто создавал его реализации, при этом являясь плодом больной фантазии.

До сих пор в мире существует две довольно логичных концепции - «удобство ваяние» и «качество реализации», ну и всякие С++ как нечто среднее, ибо 2в1. Но лисп - это не просто нечто - это нечто за рамками всего. Оно примитивнореализуемое, но не удобноваяемое, при этом качество реализации быть не может по определению. Это нечто из параллельной вселенной, где есть какие-то иные походы к логике, не такие, как в этом мире. Т.е. оно обладает одними минусами, ну в реальном мире, а не в мире коллективной шизофрении его адептов.

Единственная причина по которой кто-то знает и хайпит вокруг лиспа - это воровство концепций. Т.е. в бородатые годы, т.к. лисп намного старше всего(и как бэ первый), а так же является чисто бесполезной академической поделкой - ему было приписаны все концепции, которые были смешаны с шизофренией, приватизированы и названы ФП.

Естественно такие языки и подходы, которые не работали, были не юзабельны мало интересовали создателей/пользователей языков и концепций, которые должны были применяться.

Сейчас происходит точно так же - чем более убогий, неюзабельный, сырой и примитивный язык - тем больше в нём фич и всякой эзотерики. Ничего не поменялось. И точно так же, обратной этой помойке существуют реально используемые языки в серьёзном мире, где такой подход до сих пор не работает. И привносятся уже обкатанные, вменяемое реализованные «технологии».

А теперь представь сколько человекочасов было вложено в тот же V8.

Это не важно - по логике балаболов должна содержать минимум 50% реализации комонлиспа, при этом реализация должна быть слабее. А это полное враньё.

Ну и про «много потрачено» - это неправда. Потрачено там основное время не на какие-то базовые вещи, а на заморочки жабаскрипта, нюансов его использования и прочее. Ибо веб и жабаскрипт - это просто неюзабельная параша. Да и качество реализации v8 сильно преувеличено + давно не развиваетсяи не так чтобы(за рамками а+б) сильнее какого-нибудь нового куллязыка. Там просто сильный рантайм, ну по меркам куллязочков.

Я сейчас как раз ваяю на жабаскрипте волею судеб, ибо альтернативы нет. И каждый раз я мечтаю о чём угодно, даже о паскале - лишь-бы не соприкасаться с этим непотребством.

Хотя да, если сравнить с пхп - наверное будет посильнее - только сравнивается не с пхп, а со всеми, а вернее с си. А эти отмазончики выглядят так мило. «v8 стоит много».

registrant27492
()
Ответ на: комментарий от mix_mix

А теперь представь сколько человекочасов было вложено в тот же V8.

На самом деле, когда говорили о мощности лиспа, имелась в виду не производительность, а выразительность. Последняя, в свою очередь, была обусловлена простыми вещами: рефлексивностью и динамическим связыванием. По сути, это позволяло писать ООП в то время, когда этого понятия еще не было (и именно лисповские fexpr'ы, типа ulambda) были взяты Аланом Кеем в качестве концептуальной основы первого смоллтока), причем писать очень легко и прозрачно. Кроме всего прочего, это позволяло программе переписывать свой исходный код прямо в рантайме. Современные лиспы могут это делать, но не так, а только с помощью костылей в виде eval/quote, что могут и другие языки. Остался только препроцессор(макросы), который может быть так же добавлен в любой другой язык. Поэтому, в настоящее время, лиспы конечно превосходят чисто компилируемые языки, но в принципе, не имеют серьезных преимуществ перед другими интерпретируемыми (компилируемыми по принципу JIT), кроме субъективного удобства парсинга структурного кода (тоесть скобки помогают парсить код и все).

filequest
()
Ответ на: комментарий от mix_mix

сливает жабаскрипту, что показательно

А теперь представь сколько человекочасов было вложено в тот же V8.

А вот тут пишут, что жабоскрипт в разы тормознутее

http://benchmarksgame.alioth.debian.org/u64/compare.php?lang=sbcl&lang2=v8

Врут нехристи?

ugoday ★★★★★
()
Ответ на: комментарий от registrant27492

Не знаю нащёт цл, но ракет вполне решает реальные задачи. В чём твоя проблема?

anonymous
()
Ответ на: комментарий от ugoday

Ну, я не спец по JS, но там такого нет (по крайней мере, в глаза не бросается). А у CL - ад кромешный, посмотри исходники первого бенчмарка.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от registrant27492

Ало свинья сможет в копыто?

anonymous
()
Ответ на: комментарий от tailgunner

Но вроде конкретно его «неидиоматичный код» исключили из конкурса

Наоборот. Человек написал абсолютно идиоматичный код на CL. А его исключили, так как «надо писать так как на Java/C». Хотя, тогда, например http://benchmarksgame.alioth.debian.org/u64q/program.php?test=fasta&lang=... — тоже надо выкидывать. C++ templates есть только в C++.

Вот и приходится писать кальку с Си, а то не принимают.

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от monk

Наоборот. Человек написал абсолютно идиоматичный код на CL. А его исключили, так как «надо писать так как на Java/C».

Скорее там была тонна портянок, либо ещё что-то - мы этого знать не можем, ибо кода нет.

Хотя, тогда, например http://benchmarksgame.alioth.debian.org/u64q/program.php?test=fasta&lang=... — тоже надо выкидывать. C++ templates есть только в C++.

Эта реализация не далеко ушла от лиспа, кстати - типичный пример - где реальное место лиспу. Да и шаблоны там никак не используются - просто форфан.

Ну и да:

while (< i n)

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

Хотя ладно - может хоть ты мне покажешь - как запустить эту портянку? Я создал эти файлы - оно не может.

registrant27492
()
Ответ на: комментарий от monk

Вот и приходится писать кальку с Си, а то не принимают.

Враньё. Калька с си пишется лишь потому, что не калька сливает в хлам. Да и это не си - это дерьмо. Там реализация на си помойке подобна.

Но ты можешь защитить лисп - напиши это на лиспе, вон ту же fasta. Я даже не прошу тебя побеждать тебя мою fasta, которую как раз туда точно не примут, но которая в 10-20раз быстрее самый быстрой той, что есть там.

registrant27492
()
Ответ на: комментарий от monk

Ссылку?

На что?

На идиоматичный код, который убрали.

tailgunner ★★★★★
()
Ответ на: комментарий от registrant27492

которая в 10-20раз быстрее самый быстрой той, что есть там

Там fasta и так 3 секунды выполняется. Кодогенерация осмысленна, если задача выполняется хотя бы секунд 10. На выходных попробую сделать http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=knucleotide — там для SBCL неожиданно медленная версия.

monk ★★★★★
()
Ответ на: комментарий от monk

Ну там 3секунду у си - это не твои три секунды. Да и без разницы - какая тебе разница - хочешь 10 - бенчи на миллиардах n. Я принимаю все условия, если они вменяемые, а не оправдания.

На выходных попробую сделать

Можешь не торопиться - меня не будет в ближайшею неделю.

http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=knucleotide — там для SBCL неожиданно медленная версия.

Задача диктует условия реализации, да и не является вычислительной - т.е. бенчит железяку, а не код.

Хотя ладно - делай. Я то же сделаю как появлюсь, правда я конечно срал на все условия и соблюдать их не буду.

registrant27492
()
Ответ на: комментарий от registrant27492

Ну там 3секунду у си - это не твои три секунды.

Интересно, беру http://benchmarksgame.alioth.debian.org/u64q/program.php?test=fasta&lang=... и http://benchmarksgame.alioth.debian.org/u64q/program.php?test=fasta&lang=...

Проверяю на своём компе.

monk@serverlinux:~/test$ gcc -pipe -Wall -O3 -fomit-frame-pointer -march=native -std=c99 -mfpmath=sse -msse3 -fopenmp fasta.c
monk@serverlinux:~/test$ time ./a.out 25000000 > /dev/null                      

real    0m5.995s
user    0m11.800s
sys     0m0.064s
monk@serverlinux:~/test$ time ./a.out 25000000 > /dev/null

real    0m7.555s
user    0m12.848s
sys     0m0.044s
monk@serverlinux:~/test$ time ./a.out 25000000 > /dev/null

real    0m7.139s
user    0m12.112s
sys     0m0.060s

monk@serverlinux:~/test$ sbcl --eval '(compile-file "fasta")' --quit 2> /dev/null > /dev/null
monk@serverlinux:~/test$ time sbcl --noinform --load fasta.fasl --eval '(main)' --quit 25000000 > /dev/null

real    0m10.039s
user    0m9.996s
sys     0m0.040s
monk@serverlinux:~/test$ time sbcl --noinform --load fasta.fasl --eval '(main)' --quit 25000000 > /dev/null

real    0m10.042s
user    0m10.008s
sys     0m0.032s
monk@serverlinux:~/test$ time sbcl --noinform --load fasta.fasl --eval '(main)' --quit 25000000 > /dev/null

real    0m10.035s
user    0m9.988s
sys     0m0.044s

monk@serverlinux:~/test$ uname -a
Linux serverlinux.sges.ru 3.16.0-4-686-pae #1 SMP Debian 3.16.7-ckt4-3 (2015-02-03) i686 GNU/Linux
monk@serverlinux:~/test$ gcc --version
gcc (Debian 4.9.1-19) 4.9.1
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

monk@serverlinux:~/test$ sbcl --version
SBCL 1.2.4.debian

monk@serverlinux:~/test$ cat /proc/cpuinfo | grep name
model name      : Intel(R) Pentium(R) 4 CPU 3.06GHz
model name      : Intel(R) Pentium(R) 4 CPU 3.06GHz

Получается, что Си и SBCL идут почти вровень.

monk ★★★★★
()
Ответ на: комментарий от monk

Я не знаю как ты там и чего намерил:

$ gcc fasta.c -std=gnu11 -Ofast -march=native -fwhole-program  -fopenmp -o fasta
$ time ./fasta 25000000 > /dev/null

real    0m0.860s
user    0m2.530s
sys     0m0.000s
$ time sbcl --noinform --load fasta.fasl --eval '(main)' --quit 25000000 > /dev/null

real    0m15.347s
user    0m15.340s
sys     0m0.000s

gcc версия 6.0.0-alpha20160306 20160306 (experimental) (Gentoo 6.0.0_alpha20160306) 
SBCL 1.3.4

//Зная что куллязычки умеют только деградировать с развитие - я собрал самый ранний sbcl в портеже - 1.1.18

//и о чудо
$ time sbcl --noinform --load fasta.fasl --eval '(main)' --quit 25000000 > /dev/null

real    0m4.601s
user    0m4.570s
sys     0m0.030s

$ time ./fasta 25000000 > /dev/null//без опенмп

real    0m2.071s
user    0m2.070s
sys     0m0.000s

Т.е. сишка быстрее овер в 5раз, но делая скидку на то, что лисп юзает одно ведро и предположим - он сможет в больше, то 2+раза.

Получается, что Си и SBCL идут почти вровень.

Нет. Этот код на си дерьмо, т.е. то, что это си - это чисто формально. Реализация дерьмо.

Далее - этот бенчмарк бенчит только одну функцию - функцию-гпсч - т.е. эти 0.9сек - это время исполнения ТОЛЬКО одной это функции.

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

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

Да и остальное то же не требует ничего - обход массива и запись строки. Любая реализация языка от первокурсника справится с этим на ура. Почему ваши куллязыки этого не могу - это проблема.

Кстати - жабаскрипт показывает те же 5секунд, это кстати.

Ну и да - спасибо что научил запускать эту фигню.

Ну и да, почему в лиспе форы? Где функциональщина - где ркурсия? Где «компактность»/красота/выразительность? Почему портяка километровая и не читаемая?

registrant27492
()
Ответ на: комментарий от registrant27492

Далее - этот бенчмарк бенчит только одну функцию - функцию-гпсч - т.е. эти 0.9сек - это время исполнения ТОЛЬКО одной это функции.

В лиспе оптимизируется. Можно весь ГПСЧ заинлайнить при компиляции. У меня вместо 10 секунд получается тогда 8.

Замени

(let ((r 42)
      (ia 3877)
      (ic 29573))
  (declare (type fixnum r ia ic))
  (defun reset-random () (setf r (the fixnum 42)))
  (declaim (inline next-random))
  (defun next-random ()
    (declare (values fixnum))
    (setf r (mod (+ (the (integer 0 542655936) (* r ia)) ic) +im+))))

на

(eval-when (:compile-toplevel :load-toplevel :execute)
  (let ((ia 3877)
        (ic 29573))
    (defun make-seeds (r l &optional acc)
      (if (> l 0)
          (make-seeds (mod (+ (* r ia) ic) +im+) (- l 1) (cons r acc))
          (nreverse acc)))))

(defmacro seeds ()
  (let ((all (make-seeds 42 +im+)))
    (setf (cdr (last all)) all)
    `(quote ,all)))

(defconstant +seeds+ (seeds))

(let ((seed +seeds+))
  (defun reset-random () (setf seed +seeds+))
  (declaim (inline next-random))
  (defun next-random ()
    (declare (values fixnum))
    (setf seed (cdr seed))
    (car seed)))

Ну и да, почему в лиспе форы?

Потому что это CL. Это в Racket реализация обработки списка с хвостовой рекурсией + reverse и через стек дают одинаковое потребление памяти и времени.

Можно сделать лапшу из рекурсивных вызовов, но будет (ещё) менее читабельно.

Где функциональщина - где ркурсия? Где «компактность»/красота/выразительность? Почему портяка километровая и не читаемая?

Не путай с Хаскелем.

P.S. Деградация производительности в SBCL 1.3.4 какая-то запредельная. не ожидал.

monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.