Строки комментариев / Строки кода
value > 1 -> bad (too many comments)
value < 0.1 -> bad (not enough comments)
Корректируют числовые значения согласно Вашему собственному опыту;-)
Я рад сообщить вам, что вы правы и что F #, основанный на CLR, вообще не страдает от этого ограничения, а вместо этого получает преимущества от определенных функций многопоточности, включая асинхронные рабочие процессы , процессор почтовых ящиков и замечательная будущая параллельная библиотека задач (.NET 4.0).
Есть несколько хороших реализаций. В настоящий момент люди, работающие с Haskell, похоже, получают наилучшие результаты (см. документ ICFP 2009 Саймона Марлоу и других , а также доклад Донни Джонса и других на симпозиуме Haskell 2009)). Erlang довольно близко отстает, особенно если вы хотите распространять.
Через шесть-двенадцать месяцев ответы могут измениться: -)
Haskell поддерживает параллельные потоки через Data Parallel Haskell
И Scala, и Clojure работают на JVM, что обеспечивает реальный параллелизм без единой точки узких мест.
Erlang реализует свои собственные процессы и расписание процессов и позволяет выполнять тысячи, десятки тысяч и даже миллионы процессов Erlang (внутри одного процесса операционной системы).
В SMP и многоядерных машинах Виртуальная машина Erlang будет выделять столько же потоков ОС и процессов ОС своему планировщику процессов и очереди процессов, чтобы максимально использовать лежащие в основе параллельные операции в аппаратной архитектуре.
Парадигма параллелизма, открытая для приложений, конечно, остается той же.
В дополнение к Haskell вы можете одновременно запускать процессы в Erlang (программирование, ориентированное на параллелизм) и вы также можете сделать это в F #, используя .NET Parallel Extensions и Асинхронные рабочие процессы .
python не является особенно функциональным языком, и с GIL он тоже не очень параллелен, но в сочетании с модулем multiprocessing (стандартным с версии 2.6) вы получаете и то и другое, но это не так элегантно, как чисто функциональные языки.
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
pool = Pool(processes=4) # start 4 worker processes
result = pool.apply_async(f, [10]) # evaluate "f(10)" asynchronously
print result.get(timeout=1) # prints "100" unless your computer is *very* slow
print pool.map(f, range(10)) # prints "[0, 1, 4,..., 81]"