stdray: (Default)
[personal profile] stdray
Регулярно можно видеть рассуждения, мол напишем за 20 минут наш проект на фичастом языке сверхвысокого уровня H, а критические по производительности участки кода сделаем на быстром низкоуровневом языке C. Что-то у меня ощущение, что об этом чаще говорят, чем применяют. Я поспрашивал знакомых программистов, тех что поближе, - подобным не занимаются. Один, говорит, пытался, а потом просто стал писать на плюсах. Даже в интернетах, читал о подобном только в исполнении [profile] levgem и [personal profile] lionet. В связи с чем пара вопросов:

1) Переписываете ли вы куски кода на низкоуровневом языке в угоду производительности?
2) Какой язык вы для этого используете?

Я ведь правильно понимаю, что нет других низкоуровневых языков кроме сишечки? Биндинги ведь только к ней делаются.

(no subject)

Date: 2012-09-29 03:05 pm (UTC)
From: (Anonymous)
FreeArc так сделан, например. Hackell + С. Сейчас вот в этот самый момент решаю эту проблему. Весь проект на Немерле, небольшая горячая часть на С++. Сценарий примерно такой - подготовка(генерация) сложных структур данных(деревья, автоматы) на Nemerle. Затем все эти структуры данных перемещаются в фиксированную память (System.Runtime.InteropServices.Marshal.AllocHGlobal, System.Runtime.InteropServices.Marshal.StructureToPtr). После в С++ кидается указатель на все это безобразие и он может ходить по этим структурам данным как по своим. Проблема в поддержке описания одних и тех же структур данных на обоих языках. Меняем в одном месте, нужно менять в другом месте. Нужно строго следить за выравниванием и порядком следования полей. Да что там, просто чтобы константу расшарить между двумя языками - уже проблема. Короче мне все это надоело и я написал (на Nemerle, естественно) небольшую утилиту, которая воспринимает описание структур данных на С-образном языке и выдает текст с описанием этих структур данных на С++, Nemerle и богомерзком C# (Ну потому, что в Немерле пока нет полноценной поддержки указателей. Указатель на int уже можно описать, а указатель на структуру еще нельзя.) Далее все это можно подключать как в .NET, так и в C++. Сейчас поддерживаются неймспейсы, структуры, шаблоны С++, енумы, тайпдефы. Про шаблоны... Например - у нас есть описание шаблонов:
LinkedListNode
{
T value;
LinkedListNode* next;
}

class LinkedList
{
LinkedListNode* root;
...
}
typedef LinkedList MyList;
typedef LinkedList HisList;
В С++ это передается как есть, для Шарпа генерируется следующие структуры LinkedListNode_instantation_int, LinkedList_instantation_int, LinkedListNode_instantation_SomeStruct, LinkedList_instantation_SomeStruct:
LinkedListNode_instantation_int
{
int value;
LinkedListNode* next;
}

class LinkedList_instantation_int
{
LinkedListNode_instantation_int *root
}
Для HisList тоже самое. Что-то типа инстанцирования шаблонов. Все это с поддержкой области видимости. LinkedList < SomeTemplate < SomeOtherTemplate < int > > > то же поддерживается. Вопрос - не велосипед ли я изобретаю?
P.S.: Перед тем, как прочел этот пост, сидел отлаживал описанную выше утилиту.

(no subject)

Date: 2012-09-29 03:27 pm (UTC)
From: [identity profile] stdray.livejournal.com
>Весь проект на Немерле, небольшая горячая часть на С++... подготовка(генерация) сложных структур данных(деревья, автоматы) на Nemerle... С++ кидается указатель на все это безобразие и он может ходить по этим структурам данным как по своим.

Если структуры действительно сложные, то писать обходчики на С++ - это адский ад. Какие преимущества дает цепепе? Какие преимущества перед unsafe C#, который достаточно быстр (http://stdray.livejournal.com/73674.html?thread=377546#t377546) и может простым и прозрачным образом общаться со структурами данных, описанными на Nemerle?

(no subject)

Date: 2012-09-29 04:12 pm (UTC)
From: (Anonymous)
Обходчики - не ад. Вот генерация всех этих деревьев, конечных автоматов - вот это реально ад (алгоритмы на строках сейчас мой фокус). Писать все это на С++ - застрелиться легче.

Я не знаю насколько ансейф С# быстрый в реальности, а не на тестах. В С++ я почти уверен, в С# не уверен. Тем более на плюсах у меня есть немалый опыт, на С# опыта нет, я сразу начал писать на Немерле. Шаблоны опять же. OpenMP опять же. Куча нативных библиотек опять же. И т.д.

(no subject)

Date: 2012-09-29 04:25 pm (UTC)
From: [identity profile] stdray.livejournal.com
>Тем более на плюсах у меня есть немалый опыт, на С# опыта нет, я сразу начал писать на Немерле.

Если из Nemerle убрать паттерн-матчинг, макросы и TCO, то получится Сишарп. Что касается обхода структур, то я не понимаю, на чем там можно в плюсах сэкономить. Адресная арифметика здесь мало применима, а для распараллеливания есть PLINQ, async/await (в C#5 и Немерле) и Async монада для Nemerle.

(no subject)

Date: 2012-09-29 04:20 pm (UTC)
From: (Anonymous)
Обходчики - не ад, генерация - ад. Деревья, конечные автоматы(алгоритмы на строках сейчас мой фокус) - писать генерацию всего этого на С++ - застрелиться легче.

В С++ я почти уверен, в С# не уверен. На С++ у меня большой опыт, на шарпе опыта нет почти. Темплейты опять же, куча нативных библиотек, OpenMp, и т.д.

December 2019

S M T W T F S
1234567
891011121314
15161718192021
222324252627 28
293031    

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags