F# будет работать хорошо при записи математических функций для программы C#?

7
задан Community 23 May 2017 в 12:26
поделиться

7 ответов

Да, F# будет работать лучше.

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

C#:

10^7 iterations using Sigmoid1() took 3899,1979 ms
10^7 iterations using Sigmoid2() took 411,4441 ms

Чистый C:

10^7 iterations using sigmoid1: 628 ms
10^7 iterations using sigmoid2: 157 ms

F#:

10^7 iterations using sigmoid1: 588.843700 ms
10^7 iterations using sigmoid2: 156.626700 ms

[еще 113] детали

7
ответ дан 6 December 2019 в 23:14
поделиться

F# будет вести себя то же как C# для вычислений (так как это - все просто IL). Просто убедившись представить Ваш вектор как структуру - так как Вы будете создавать многие из тех объектов, которые являются недолгими.

Единицы измерения оказывают нулевое влияние на производительность, на самом деле во время компиляции информация о единицах измерения удалена полностью. Таким образом, Вы на самом деле не можете сказать, что Ваш код F# имеет единицы измерения на нем.

2
ответ дан 6 December 2019 в 23:14
поделиться

Производительность F# о том же как C#, они и компилируются в IL, который является важным фактором (в отличие от IronPython и IronRuby, которые интерпретируются и поэтому намного медленнее). Производительность алгоритма зависит намного больше от, он - реализация, чем на выборе F# или C#, поскольку F# помог бы реализовать его в немногих строках кода, у Вас есть намного лучший шанс определения оптимизаций в F#, чем в C#.

Также эта статья имеет подобное взятие по проблеме перфекта: http://diditwith.net/2008/04/03/ApplesAndOranges.aspx

1
ответ дан 6 December 2019 в 23:14
поделиться

Возможно, Вы уже знаете, но возможно нет.

Google на имени "Luke Hoban", он сделал трассировщик лучей с C# 3.0 и теперь работает в команде Microsofts F#.

См. также: http://blogs.msdn.com/lukeh/ и http://blogs.msdn.com/lukeh/archive/2007/04/03/a-ray-tracer-in-c-3-0.aspx .

Он должен знать.

1
ответ дан 6 December 2019 в 23:14
поделиться

На самом деле, в теории, x86 машина может только выполнить x86 блок, который имеет обязательную природу, поэтому, теоретически возможно достигнуть производительности функционального языка обязательно. Таким образом, можно записать программы C#, которые равны или лучше, чем их дубликаты F#. Ключевое слово здесь , может . Это не означает, что все программы C# лучше, чем программы F# или что-либо как этот. Обычно производительность F# очень приемлема в большинстве проблем. Существуют некоторые случаи, где производительность F# отстает слишком много позади C#, но обычно, это хорошо для большинства приложений. Однако, если Вы хотите иметь мелкомодульный контроль на том, что на самом деле делает Ваш код, функциональные языки не для Вас. У Вас есть больше возможности оптимизации в C#, чем Вы имеете в F#. Между прочим, F# я не означаю писать обязательный код, но нормальный функциональный подход (если Вы хотите написать код обязательно, я не думаю, что F# имеет много смысла).

0
ответ дан 6 December 2019 в 23:14
поделиться

Моя первоначальная реакция - то, что производительность будет тем же и из-за C# и из-за F#, производящего MSIL. Но структуры, которые Вы используете, могли бы оказаться другим IL. Тема была обсуждена подробно в ссылках здесь на ТАК .

0
ответ дан 6 December 2019 в 23:14
поделиться

F# лучше подходит для параллельного программирования. Так out-of-the поле это может быть быстрее как C# (на мультиядрах/CPU).

, Но с другой стороны, можно оптимизировать C# для использования этого в качестве wel, но это будет намного больше работы.

0
ответ дан 6 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: