LINUX.ORG.RU

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

 ,


3

7

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

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

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

★★★★★

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

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

на котором я на такие грабли могу наступить?

Если два отдельных filter - то грабли _в алгоритме_, а не яп. Али считаешь по-другому?

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

Для C# незаменимая вещь. Обещают поддержку native С++ в Resharper, так что может и здесь получится заменить глючный Visual Assist на что-то более вменяемое.

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

ибо меньше разименований и локальней размещение

это называется байт***ство и нужно в считанных проектах. почему www.linux.org.ru не тормозит хотя написан без всяких value types? попробуйте задуматься

слабо взять исходник с http://github.com/maxcom/lorsource/ и за пару вечеров/пару недель переписать на ракете или что там сейчас стильно, модно, молодежно?

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

а уж если чел хочет структур по значению?

а если я мерседес или лучше, бентли, хочу? если так эти структуры нужны пусть на F# пишет, зачем ему яба? яба нужна тем кто изменяет мир, а структуры по значению нужны борщевикам-титиретикам

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

і на конвертацію тратіть много больше ресурсов :)

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

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

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

Что бы программинг был осмысленным нужно больше входных данных.

(очень) часто гляжу в документацію. Нахожу много нового в старом. IDEA мне в этом не поможет :)

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

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

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

ни разу не волнуюсь, не сомневаюсь что всё давно написано

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

Вот как раз у меня сейчас такой проект.. ОЧЕНЬ нужны массивы структур по значению. Кстати, интересно как во всех этих модных языках можно будет решить простую задачу - разместить массив в разделяемой памяти.

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

Никто не запрещает смотреть документацию :)

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

Та студия это 1% от современной IDEA. Как дети малые, ей богу.

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

На дотнете студию стали фигачить по тихоньку версии где-то начиная с 2002.

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

Если два отдельных filter - то грабли _в алгоритме_, а не яп. Али считаешь по-другому?

не, всё верно. Мне уже объяснили в чём фишка.

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

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

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

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

Ты предлагаешь использовать GC с разделяемой памятью? Ну-ну!

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

почему вы не пишете всё на ассемблере?

... по той же причине не заморачиваются массивами

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

Блин.. вот откуда берётся привычка выдавать рассуждения на неизвестные темы, при этом не спрашивая о том, как это можно сделать.

data Foo = Foo {-# UNPACK #-} !Atype 
               {-# UNPACK #-} !BType 
               {-# UNPACK #-} !CType

так можно сделать структуру данных, которая будет лежать в памяти «пордяд», если типы AType строгие и unboxed. В принципе так можно и работать со стуктурой и класть куда хочется, но вариант не самый удобный.

instance Storable Foo where ... -- описываем как стуктура лежит в памяти

import Data.Vector.Storable as V -- для неизменяемых
import Data.Vector.Storable.Mutable as MV -- для изменяемых

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

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

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

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

Тут нужно

а). чтобы GC не перемещал структуру в памяти, решается выделением pinned memory, это или ручное (не укажу сейчас модули в GHC) или как в случае ТС, через Storable/Vector.Storable.

б). чтобы GC случайно не собрал используемые в другой программе данные. Тут можно воспользоваться ресурсами или регионами (ResourceT), а освободжать ресурс при определенном сигнале, в общем-то обычное правило, кто выделяет, тот и освобождает.

в). уметь создавать структуру в языке из raw данных (Ptr ()). это тоже есть.

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

В моем посте были слова

интересно как во всех этих модных языках можно будет решить простую задачу

Это как раз и был вопрос, как это можно сделать

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

ок.

http://hackage.haskell.org/packages/archive/vector/0.10.0.1/doc/html/Data-Vec... - создание Storable MVector из ForeignPtr.

Storable - тип данных, который описывает, как он упаковывается в память.

MVector - изменяемый «вектор» данных, в случае Storable не будет перемещаться GC.

ForeignPtr - указатель на «чужую» память, содержит в себе действие, которое будет выполнено, когда ссылки на него кончились и он должен быть убран GC.

Foreign.ForeignPtr.Safe.newForeignPtr_ - создание ForeignPtr из указателя без добавления финализаторов (их можно добавить позднее).

итого:

    fp <- newForeignPtr_ ptr
    vec <- unsafeFromForeignPtr0 fp n
    -- обычная работа с vec в данном случае в IO.
    -- глупый пример.
    -- в примере бесконечная проверка банных в 0 элементе
    -- если не 0, то перемещение данных с адресами в 1 и 2 элементах
    -- пауза в 1 сек.
    forever $ do
      x <- unsafeRead vec 0
      unless (x/=0) $ do
         x <- unsafeRead vec 1
         y <- unsafeRead vec 2
         swap vec x y
      threadDealay 1e6
qnikst ★★★★★
()
Ответ на: комментарий от dizza

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

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

Думаю, что это будет ОЧЕНЬ медленно и ты не сможешь таким образом работать с атомиками. Совсем плохо будет если там окажется какое-нибудь кеширование

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

Но я молдованiн!

чукча ты. «і» != «i».

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

разместить массив в разделяемой памяти

этот массив должен быть внешней сущьностью по отношению к своим клиентам

а клиенты будут получать «ссылку» на массив.

всё как обычно.

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

Это я к тому, что раньше в русском языке буквы «i» и «и» обозначали первоначально разные звуки, как сейчас на украинском. Поэтому у меня парсер в этом топике постоянно спотыкался и ломался :)

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

проще написать с нуля

тем более.
только вангую, по итогу окажется что займет это времени больше чем заняло написание lorsource

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

Где ты увидел производительность в VB и C#?

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

В универе заставляли писать на фортране и алголе. Для кругозора, наверное.

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

матлаб очень полезный инструмент в матфизике

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

Для кругозора надо существенно разные языки, например Shell (bash/sh/tcsh), C, Scheme, Haskell и Prolog

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

Оффтоп конечно, но

...раньше в русском языке буквы «i» и «и» обозначали первоначально разные звуки, как сейчас на украинском.

раньше в русском языке буквы «i» и «и» обозначали практически идентичные звуки http://ru.wikipedia.org/wiki/І

в украинском современном «i» и «и» слышатся как русские «и» и «ы».

укр.    рус.
пиво == пыво

Украинцы меня поправят, если что. :)

habamax ★★★
()

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

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

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

По всем параметрам - C#. Под линух есть компилятор, как ты знаешь.

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

Да, всё верно. Ещё е читается как э, а є читаеться как е. Ну и г тоже надо бы вспомнить.

А вообще так забавно, когда русский человек читает украинский текст, но не знает, как читать правильно ))

nanoolinux ★★★★
()
Последнее исправление: nanoolinux (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.