Функциональное программирование предоставляет разработчикам более удачный подход к созданию программ для многоядерных процессоров, чем потоки команд, развивающие традиционную парадигму процедурного программирования, убежден соавтор языка разметки XML Тим Брэй.
Программирование для многоядерных процессоров подразумевает параллельное исполнение, с которым сопряжены принципиальные сложности, напомнил Брэй, выступая в июле на конференции O'Reilly Open Source Convention (OSCON 2010).
«Параллелизм - это трудно. С ним связано множество проблем, сложных для понимания, — заявил Брэй. — Игнорирование особенностей параллельного исполнения приводит к ошибкам и появлению узких мест производительности».
Однако функциональное программирование, реализуемое языками наподобие Erlang и Clojure, предосталяет способы справиться с параллелизмом, утверждает он.
«Идея функционального программирования строится на том, что данные незыблемы. Их нельзя использовать совместно, — указал Брэй. — А когда данными нельзя пользоваться совместно, разработчикам не надо заботиться о возможности одновременного изменения данных двумя разными процессами. Принцип незыблемости дает возможность пользоваться указателями вместо реальных данных».
Erlang, по утверждению Брэя, является «пуленепробиваемым» и довольно высокопроизводительным. Изначально он был создан для программирования крупных телефонных коммутаторов с сотнями тысяч процессоров. В Erlang нет классов, объектов и переменных, и обработка файлов реализована на примитивном уровне, но у него все же есть масса преимуществ.
Clojure, как объяснил Брэй, представляет собой диалект Lisp, который работает на виртуальных машинах Java и компилируется в байткод Java, что делает язык чрезвычайно быстрым.
«Это на редкость высокопроизводительный язык», — утверждает Брэй.
Исторически считалось, что программировать для параллельных процессоров необходимо с использованием потоков, однако потоки допускают множественный доступ к данным и возможность их изменения, а, как уверен Брэй, «разработчики приложений не умеют программировать потоки, не понимают, как это делать, и никогда не поймут».
Брэй подчеркнул, что его презентация относится к деятельности, которой он занимался до перехода в Google, где сейчас он работает над мобильной платформой Android. В Google Брэй устроился в этом году, а до того работал в Sun Microsystems в должности директора по технологиям Web.