LINUX.ORG.RU

Подскажите ЯП со встроенной загрузкой HTTP, потоками, распределённостью.


0

2

Представьте псевдокод:

http_load("http://google.com/", func);
http_load("http://mail.ru/", func);
http_load("http://linux.org.ru/", func);
http_load("http://membrana.ru/", func);
http_load("http://gazeta.ru/", func);
...
func(x)
{
   html_process(x);
   ...
}

Семантика - загружается страница, отдаётся функции func, где с ней что-нибудь делается.

Вопрос - существует ли язык, в котором нужно:

1. Автоматическая параллелизация на потоки, которые возможно запускаются на различных машинах. Что-то типа erlang. Есть некая абстрактная среда исполнения программы, которая может быть растянута на 1000 физических машин. И когда я пишу 100 строк, загружающих страницы, у меня рождается 100 потоков (или N, если в настройках есть ограничение), выполняющихся на, возможно, физически разных машинах, загружающих эти ссылки.

2. Минимум действий для загрузки страницы. Наличие таких понятий как «открыть/закрыть поток (сокет)» - уже минус. Я хочу просто загрузить страницу, мне пофигу на то, что там надо открывать и закрывать - пусть среда/интерпретатор/VM само решает.

Erlang.

</thread>

anonymous
()

Пользовательские функции? О нет, это не для повседневного использования. Кто захочет определять свои функции? Пусть разработчики языка этим занимаются.

anonymous
()

erlang сам ничего по машинам не растаскивает.

anonymous
()

У тебя же написан этот волшебный язык «C++, templates»

Karapuz ★★★★★
()

Ruby!

require 'net/http'

def func(x)
# html process
end

func Net::HTTP.get('stackoverflow.com', '/index.html')
func Net::HTTP.get('stackoverflow.com', '/index.html')
func Net::HTTP.get('stackoverflow.com', '/index.html')
func Net::HTTP.get('stackoverflow.com', '/index.html')
func Net::HTTP.get('stackoverflow.com', '/index.html')

ur
()

Наличие таких понятий как «открыть/закрыть поток (сокет)» - уже минус. Я хочу просто загрузить страницу, мне пофигу на то, что там надо открывать и закрывать - пусть среда/интерпретатор/VM само решает.

Если ты знаешь такие слова, то явно можешь сам набросать обертку для функций загрузки http из стандартной библиотеки любого высокоуровнего языка.

Есть некая абстрактная среда исполнения программы, которая может быть растянута на 1000 физических машин. И когда я пишу 100 строк, загружающих страницы, у меня рождается 100 потоков (или N, если в настройках есть ограничение), выполняющихся на, возможно, физически разных машинах, загружающих эти ссылки.

Будут советовать MPI. Или тот же Erlang. Специализированная задача, придется, все-таки, немного логики самому написать.

note173 ★★★★★
()

По теме: практически любой.

baverman ★★★
()
#lang racket
(require net/url
         syntax/parse/define)

(define-simple-macro (http_load [f str] ...+)
  (map place-channel-get (list (place ch (place-channel-put ch (f (get-pure-port (string->url str))))) ...)))

(define (f x)
  (html_process x)
  ...)

(http_load
 [f "http://google.com/"]
 [f "http://mail.ru/"]
 [f "http://linux.org.ru/"]
 [f "http://membrana.ru/"]
 [f "http://gazeta.ru/"])
anonymous
()

Второе — вопрос библиотеки, а не языка.

Miguel ★★★★★
()

Кстати, загрузить html - наименьшая из всех бед. Его же еще и «распарсить» надо.

Eddy_Em ☆☆☆☆☆
()

Минимум действий для загрузки страницы. Наличие таких понятий как «открыть/закрыть поток (сокет)» - уже минус.

Питон.

Пример - http://lorcode.org/forum/viewtopic.php?f=31&t=320

Zhbert ★★★★★
()
Ответ на: комментарий от Eddy_Em

Неужели в какой-нибудь плюсовщине

Должно быть. На нем совсем низменной прикладухи много пишут. Тот же Qt.

Но утверждать не буду. С++ для меня — бесполезный язык. Мир на нем клином не сошелся, хе-хе.

baverman ★★★
()
Ответ на: комментарий от baverman

Ну, языков-то много, только удобных - раз, два - и обчелся. А всякая там питонщина не более ЯП, чем баш.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от baverman

А я и не троллю. Питон - скриптовый язык. И у него тоже есть своя ниша. (а онеме - говно, но и жуков-навозников хватает =) )

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от madcore

Дык, оно и в сях работает. А там явно говорилось, что где-то есть что-то, чего нет в сях.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Питон - скриптовый язык

Ты так говоришь, как будто это что-то плохое.

И у него тоже есть своя ниша.

Широчайшая.

baverman ★★★
()
Ответ на: комментарий от baverman

Ты так говоришь, как будто это что-то плохое

Несерьезно же!

И у него тоже есть своя ниша.

Широчайшая.

Ну, у баша ниша тоже немаленькая.

Eddy_Em ☆☆☆☆☆
()

bash + xargs -P + ssh + curl

maxcom ★★★★★
()
Ответ на: комментарий от Jetty

у него что ни неделя - так новые проект

может он директор epam или люксофт

Karapuz ★★★★★
()
Ответ на: комментарий от slackwarrior

OpenMP - для распараллеливания между ядрами, MPI - между машинами.

cattail
()
Ответ на: комментарий от Eddy_Em

Баш скрипты сильно ограничены по размеру. С этим, надеюсь, спорить не будешь? И вызов внешних функций чересчур дорог.

baverman ★★★
()
Ответ на: комментарий от Eddy_Em

Поэтому там, где нужна производительность, нужно использовать нормальный ЯП.

Ну это уже чисто твои фантазии. Реальная жизнь всё больше на практичность ориентируется, а не на розовые мечты.

baverman ★★★
()
Ответ на: комментарий от Eddy_Em

А в чём проблема? Какое вам дело до текстовых редакторов, отжирающих гигабайты оперативки? Вы типа борец за чистоту вселенной?

kiverattes ★☆
() автор топика
Ответ на: комментарий от kiverattes

Достает, что каждые 2-3 года приходится апгрейд делать из-за того, что один и тот же набор софта «вдруг» перестает работать или жутко тормозит.

Eddy_Em ☆☆☆☆☆
()

Common Lisp тебе в руки и вперед, сквозь терни к DSLям

yoghurt ★★★★★
()
Ответ на: комментарий от kiverattes

Вопроса производительности ТС не затрагивал.

Я его тоже не затрагивал. Просто некоторым кажется, что вызов функции (один раз в секунду) не за 100ns, а за 1ms просто непозволительная роскошь. Дураки-с.

baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.