LINUX.ORG.RU

Какие есть годные языки с производительностью на уровне C?

 ,


3

7

Какие есть языки, в которых производительности и потребление памяти близки к таковым для кода на C (разница не более чем в 2-3 раза, а не в десятки и сотни раз как на всяких питонах), но без извращений с ручным выделением памяти и поддержкой функций как значений переменной, оптимизации хвостовой рекурсии и тд?

Желательна строгая типизация.

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

★★★★★

Последнее исправление: Xenius (всего исправлений: 4)

Ответ на: комментарий от netcat

Rust-а еще нет.

Зато есть говноJS в виде node.js и Python в виде PyPy :)

tailgunner ★★★★★
()

Scheme

Если брать реализации, отличные от Racket, то они скорее — хитросложный кодогенератор C. Плюс хорошая стандартная библиотека, плюс сборщик мусора.

Хотя, сам никогда не пользовался. Пока только присматриваюсь.

Macil ★★★★★
()

Глянь на Haskell и OCaml. Они компилируемые (в нативный код, а не в VM), поэтому есть шанс, что могут подойти тебе.

P.S. сам ими не пользовался, поэтому это лишь предположение.

Norgat ★★★★★
()
Последнее исправление: Norgat (всего исправлений: 1)

Ocaml неоднократно показывал превосходство над си как в производительности, так и в скорости разработки.

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

А чем плох Raket?

Ничем, но он ориентирован на JIT-компиляцию. Рантайм толще. И непонятное лично мне желание стать вторым Коммон Лиспом.

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

Ocaml неоднократно показывал превосходство над си как в производительности, так и в скорости разработки.

А пруф?

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

Глянь на Haskell

На хаскель лучше вообще не глядеть... Это *очень* заразно! Кроме того, проблем озвученных ТС, он не решает.

Macil ★★★★★
()

Да Common Lisp. SBCL тот же. Память - изначально грузится достаточно большой рантайм и компилятор, но само потребление памяти вменяемое, особенно если всякую дебаг-информацию оптимизировать и докстринги.

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

На хаскель лучше вообще не глядеть... Это *очень* заразно!

Я смотрел на него. По плевался и взял F# (как первый функциональный язык, который я по настоящему выучил и стал использовать), как более практичную и понятную замену всяким монадам :)

Но у меня требований ТС не было к скорости и памяти.

Norgat ★★★★★
()

Очередной школьник, считающий, что у языков бывает производительность.

anonymous
()

попробуй ATS. заодно и расскажешь

jtootf ★★★★★
()

OCaml, Haskell. Строгая типизация, высокий уровень абстракции. Производительность так же хорошая. OCaml работает быстрее, но на Haskell удобнее писать.

Aswed ★★★★★
()

Haskell иногда даже быстрее С благодаря хитрым оптимизациям компилятора, но на нем писать можно только с мозгом, математика всетки.

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

Очередной школьник, считающий, что у языков бывает производительность.

Очевидно, что имелись ввиду существующие реализации.

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

Haskell иногда даже быстрее С

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

Xenius ★★★★★
() автор топика

Java предлогали уже?

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

Haskell иногда даже быстрее С

http://www.di.ens.fr/~pouzet/cours/systeme/bib/cacm10-sel4.pdf

Despite its ability to run real user code, the Haskell ker- nel remains a prototype, as it does not satisfy our high- performance requirement. Furthermore, Haskell requires a significant run-time environment (much bigger than our ker- nel), and thus violates our requirement of a small TCB. We therefore translated the Haskell implementation manually into high-performance C code.

так что рядом не лежал хаскель с С.

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

Да ладно, это просто тест на смекалку.

Что лишний раз показывает, что смекалка - это не умение открывать новое, а умение в новом увидеть известное. Как пример, увидеть расширение PDF.

iVS ★★★★★
()

Го, rust. У K, насколько я знаю, совсем неплохо с производительностью, но проприетарщина и для специфических целей. Хаскель, если писать на нём особым, магическим способом. Да даже тот же luajit.

quantum-troll ★★★★★
()

как правило, все компилируемые - D,Go,Pascal и много ещё

Atlant ★★★★★
()

Ололо, это же Common Lisp! Язык простой, есть GC, есть элементы «функциональщины», быстрый, но память жрет несколько (ну и шо?)

Я тут переписал часть своей библиотеки для работы с октодеревьями вокселей на C и мой рендерер (пока просто посылающий по лучу в каждую точку экрана) стал работать в 5 раз быстрее. Вывод - что быдлокодить можно на любом языке^W^W^W^W^W что производительность соизмерима вполне

HNO-Arzt_
()
Ответ на: комментарий от Xenius

А вообще у схемы вроде динамическая типизация

Человеку нужна строгая, там вроде как раз такая

HNO-Arzt_
()

haskell подходит по всем пунктам.

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

Че плеваться если не разобрался? Это никак не означает что он непрактичный

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

Я смотрел на него. По плевался и взял F# (как первый функциональный язык, который я по настоящему выучил и стал использовать), как более практичную и понятную замену всяким монадам :)

Они там тоже есть, просто их называют более мягко как «computation» или «workflow», чтобы не отпугнуть. Даже синтаксический сахарок очень хороший есть. Async - это самая настоящая монада. Seq/List/Array в F# определены как моноиды.

dave ★★★★★
()
Ответ на: комментарий от HNO-Arzt_

Математика - это не только интегралы и численные методы. Но тут у каждого свое представление о том, что называть математикой, а что нет.

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

а чего все на монады ругаются. В несовсем верном, но достаточном для понимания варианте: монада это всёго лишь перегруженный оператор ';'.

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

Не, разумеется. Ну просто средства для композиции функций, всякие отображения с помощью map итд (это то, до чего я пока дочитал). я математикой не назвал бы. Нет аксиоматики же, просто средства ЯП.

Но это либо я мало прочитал, либо может имеется в виду, что за этим ЯП стоит прям жуткая наука.

HNO-Arzt_
()
Ответ на: комментарий от HNO-Arzt_

Ну, я и говорю, что каждый математику понимает по-своему. Это зависит от образования, как и многое другое в нашем мире...

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

По плевался и взял F# (как первый функциональный язык, который я по настоящему выучил и стал использовать), как более практичную и понятную замену всяким монадам :)

В F# есть монады.

Miguel ★★★★★
()

Ocaml/Haskell. Ocaml проще для изучения, можно освоить за пару недель.

Написание производительного кода на Haskell-е вещь не очень тривиальная из-за ленивых вычислений: «For best results, use Don Stewart as your GHC backend code generator».

Ещё можешь, посмотреть на Nimrod http://nimrod-code.org/index.html

А вообще эти два требования противоречат друг-другу:

потребление памяти близки к таковым для кода на C
без извращений с ручным выделением памяти

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