Какой язык программирования изучать на перспективу
Меня тут недавно спросили — какой язык программирования следует изучить на перспективу. Я ответил в том духе, что никаких формальных признаков того, что язык будет перспективен лет через пять, не существует и до сих пор думаю, что прав. В самом деле, если взять «моду» на языки за последние десять лет, видно, что их успех определяется подводными течениями, которые со стороны увидеть трудно, компании неисповедимы, могут «выстрелить»
Правда потом, по пути домой я задумался над этим более глубоко и теперь считаю, что популярность должны набирать языки, в которых легко, на уровне языка, делается параллелизация. Дома у меня меня ремонт сейчас
Над цифрами выше трудятся уже только оверклокеры, заливая штаны жидким азотом. Гонка частот уже, кажется, остановлена, началась гонка за количество ядер. Недавно был выпущен первый смартфон с четырьмя процессорами, а рабочая станция «Мак Про» поставляется в топовой конфигурацией с 12 процессорами. Сегодня на «Хабре» появилась новость о процессоре GA144, который будет продаваться за шестьсот рублей. У него 144 ядра.
Не говоря уже о GPU, у которых количество ядер приближается к тысячам.
Если взять
Причём «легко» не обязательно даже так, как это сделано в «Гоу» (хотя и желательно) — отдельной конструкцией языка (go), нет нужды сводить к этому всю идеологию языка, как в «Эрланге», просто чтобы это делалось, в тривиальных случаях,
Например, на «Пайтоне»
@fork
def sort(arr):
arr.sort()
return arr
# тут функция начала фоном работать
result = sort(somearray)
… много кода …
# а тут уже доступны результаты, если недоступны, то будем ждать
print([el for el in result if el])Да, это не особо эффективно, нас уже приучили разбрасываться памятью, но ещё не приучили с лёгкостью разбрасываться ядрами, ничего привыкнем, когда их станет, как грязи.
Пока, наверное, верится с трудом. Но мой первый
Комментарии 9
Оно конечно заточено под достаточно узкие задачи — и задачи видимо не ваши — но просто интересно мнение профессионала.
Паралеллизация там, кстати, вполне естественным образом получается.
Нет, не приходилось. Читал и смотрел на эту тему немного, попробую найти время и взглянуть.
Это очень специфичные штуки, я про мейнстрим говорю.
Erlang и Haskell
Мне лиспоподобный синтаксис (я его ещё в Университете изучал) кажется неэстетичным. (Скобки (эти (все))
Ну, не знаю… я довольно быстро перестаю их замечать :)
К тому же в Clojure есть некоторое количество синтаксического сахара позволяющего писать компактнее
Я
(defn run [nvecs nitems nthreads niters]
(let
(partition nitems (range (* nvecs nitems)))))
swap #(let [v1
v2
i1
i2
(dosync
(let [temp (nth
(alter
(alter
report #(do
(prn (map deref
(println «Distinct:»
(count (distinct (apply concat (map deref
(report)
(dorun (apply pcalls (repeat nthreads #(dotimes [_ niters] (swap)))))
(report)))
(run 100 10 10 100000)