Под этим я имел в виду: когда вы создаете свои побочные эффекты приложения и т. Д., Будет ли F # -код автоматически распределяться по всем ядрам?Предоставляет ли F # вам автоматический параллелизм?
ответ
Нет, я боюсь, что нет. Учитывая, что F # не является чистым функциональным языком (в строгом смысле слова), было бы довольно сложно сделать это, я верю. Основным способом использования параллелизма в F # является использование Async Workflows (в основном, через модуль Async, я считаю). TPL (параллельная библиотека задач), которая внедряется с .NET 4.0, будет выполнять аналогичную роль в F # (хотя, в частности, ее можно использовать на всех языках .NET одинаково хорошо), хотя я не могу сказать, m точно, как он собирается интегрироваться с существующей инфраструктурой async. Возможно, Microsoft просто посоветует использовать TPL для всего, или, может быть, они оставят оба в качестве опции, и в конечном итоге они станут стандартом де-факто ...
В любом случае, вот несколько статей по асинхронному программированию/рабочим процессам в F #, чтобы вы начали.
Нет, это не так. Вы все равно должны явно перенаправлять вызовы на другие потоки через один из многих механизмов, поддерживаемых F #.
Нет, я уверен, что это не будет автоматически Параллельно для вас. Было бы знать, что ваш код был побочным эффектом, что может быть трудно доказать, с одной стороны.
Конечно, F # может сделать это проще для параллелизации вашего кода, особенно если у вас нет побочных эффектов ... но это другое дело.
Не существует ли система типов F # между чистыми и нечистыми функциями? Поэтому не должно быть так сложно знать, что операция была свободна от побочных эффектов. –
Спасибо, Джон. Подтверждая, что вы имеете в виду, вы должны использовать такие вещи, как Контракты? –
Я не знаю этого различия, но это далеко от того, чтобы сказать, что его нет. По-видимому, это исключает любое взаимодействие с каркасом, хотя и как насчет исключений? –
Мое понимание состоит в том, что это не будет Parallel Extensions is being modified, чтобы сделать его потребляемым с помощью F #. Который не сделает его автоматически многопоточным, должен сделать его очень простым.
Хороший улов Ричард ... бег в низком сне, не могу поверить, что я написал это – JoshBerke
Как и многие другие, F # не будет автоматически масштабировать по всем ядрам и по-прежнему будет нуждаться в каркасе, таком как порт ParallelFX, о котором упоминал Джош.
F # обычно ассоциируется с возможностью параллельной обработки, поскольку по умолчанию объекты неизменяемы, устраняя необходимость блокировки для многих сценариев.
Ну, у вас есть свой ответ, но я просто хотел бы добавить, что я думаю, что это самое значительное ограничение F #, вытекающее из того, что это гибрид императив/функциональный язык.
Я хотел бы видеть некоторое расширение до F #, которое объявляет функцию чистой. То есть, он не имеет побочных эффектов, которые не обозначаются типом функции. Идея заключалась бы в том, что функция чиста, только если она ссылается на другие «известные-чистые» функции. Конечно, это было бы полезно, только если бы тогда можно было потребовать, чтобы делегат, переданный как параметр функции, ссылался на чистую функцию.
Спасибо Даниэлю. Я думал, что у F # есть «чистое» ключевое слово. Это не так? –
F # не делает его автоматическим, он просто упрощает процесс.
Еще один шанс для ссылки на Luca's PDC talk. Восемь минут, начиная с 52:20, представляют собой потрясающую демонстрацию рабочих процессов F # async. Это круто!
Я проверю это, спасибо. –
По аннотациям чистоты: Code Contracts имеют атрибут Pure. Я помню, что некоторые части BCL уже используют это. Потенциально, этот атрибут может быть использован и в рамках параллелизма, но я не знаю о такой работе на данный момент. Кроме того, я даже не знаю, насколько хорошо контакты кода могут использоваться внутри F #, поэтому здесь много неизвестных.
Тем не менее, будет интересно посмотреть, как все это происходит вместе.
Думаю, что я видел что-то в BCL в рефлекторе. –
- 1. Автоматический параллелизм в Haskell
- 2. Автоматический перевод F # на C#
- 3. Поддерживает ли Node.js параллелизм?
- 4. ли Параллелизм управления переопределение
- 5. Предоставляет ли reinterpret_cast неопределенное поведение?
- 6. Есть ли функция в xcode, которая предоставляет вам, как долго приложение работает?
- 7. Параллелизм не параллелизм?
- 8. Предоставляет ли ANTLR семантику
- 9. Предоставляет ли cfldap cfqueryparam?
- 10. Предоставляет ли minitest «тест»?
- 11. Предоставляет ли C++ CTFE?
- 12. Поддерживает ли ServiceStack.OrmLite Оптимистичный параллелизм
- 13. Может ли параллелизм улучшить производительность?
- 14. Обнаруживает, стоит ли вам стоять или сидит
- 15. Будет ли автоматический литье полезным?
- 16. Есть ли автоматический спецификатор noexcept?
- 17. ли автоматический таймер остановки?
- 18. семафор-параллелизм
- 19. Можно ли выполнить автоматический запуск хромированного фрагмента?
- 20. Предоставляет ли MapKit данные о высоте?
- 21. Предоставляет ли DirX код изменений для запросов?
- 22. Спящий режим и параллелизм
- 23. Предоставляет ли Javascript блокировку стека
- 24. Предоставляет ли Neo4j функциональные индексы
- 25. Предоставляет ли прокси/заглушка интерфейс?
- 26. Предоставляет ли Facebook заголовки CORS?
- 27. Предоставляет ли компилятор адресный оператор?
- 28. Предоставляет ли Zerobrane механизм «включения»?
- 29. Предоставляет ли clang реализацию unlink?
- 30. Предоставляет ли kineticjs атрибут Selector?
«Учитывая, что F # чистый функциональный язык ». Собственно, чистота не имеет значения. –
@Jon: Вот где вы ошибаетесь. Это очень актуально. Компилятор не может сделать необходимые предположения таким образом. – Noldorin
У нас были векторизаторы компиляторов для императивных языков, таких как Fortran на протяжении десятилетий. Я имел в виду, что они оказались практически бесполезными, как чистота в контексте многоядерного параллелизма. –