Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2014, 19:25   #121
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

MihalNik
Цитата:
(я лично бы предпочел подстветку модифицируемых элементов в коде
ага, и что бы все классы могли быть иммутабельными и были ими по умолчанию.

Kostia
Цитата:
А зачем в ООП инкапсуляция?
для того что бы расчерчивать границы между обязанностями.

Цитата:
Где переменная? Очередность достигается за счет зависимости по аргументам.
да не, receive % Wait for messages, вот здесь, мессаги это же наверняка какая то очередь.
the_deer_one вне форума Ответить с цитированием
Старый 27.01.2014, 22:59   #122
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Цитата:
да не, receive % Wait for messages, вот здесь, мессаги это же наверняка какая то очередь.
А, так Эрланг все функции по умолчанию считает грязными ) (хоть авторы и называют его чистым xD). При этом каждый процесс в Эрланге имеет свой собственный почтовый ящик, куда кладутся письма, письма читаются по мере поступления, а не в порядке отправки. Письма которые не прошли не по одному из паттернов так и остаются в ящике, их можно либо удалять, если не прошли, но лучше генерить ошибку, ибо нефиг слать спам, let it crash!! =) А потом супервизор сам пересоздаст процесс, либо сам "let it crash" xD, и другой супервизор ... Правда все это не умоляет того, что Erlang функциональный язык
На Хаскеле поток был бы IO функцией, а сообщения можно хоть в файл писать, а поток их будет читать xD
Для Хаскеля есть несколько библиотек реализующих разные модели параллельных процессов.

Простой поток на хаскеле:
Код:
main :: IO ()     
main = do
    forkIO setReminder
    loop
    where 
        loop = do
            putStr "Press 'exit' for stop."
            s <- getLine
            when (s /= "exit") $ loop
            return ()
                           
setReminder = forever $ do
    putStr "Hi! =)"
    hFlush stdout
    threadDelay (10^6)
Будет печатать "Hi! =)" каждую секунду, пока с клавиатуры не введут "exit", тогда основной поток остановится.

Общение между потоками может быть организованно с помощью MVar, по разному.

Код:
import Control.Concurrent
import Text.Printf
import Control.Monad
import Data.List
import Network.HTTP.Conduit
import qualified Data.ByteString.Lazy as B

sites = ["http://www.google.com",
         "http://www.bing.com",
         "http://www.yahoo.com",
         "http://www.wikipedia.com/wiki/Spade",
         "http://www.wikipedia.com/wiki/Shovel"]

main :: IO ()
main = do
  m <- newEmptyMVar
  let
    download url = do
       r <- simpleHttp url
       putMVar m (url, r)

  mapM_ (forkIO . download) sites

  (url, r) <- takeMVar m
  printf "%s was first (%d bytes)\n" url (B.length r)
  replicateM_ (length sites - 1) (takeMVar m)
Создаст по потоку на каждую url, и покажет первую загрузившуюся и дождется пока догрузятся остальные )
С использованием async можно переписать так:
Код:
main :: IO ()
main = do
  as <- mapM (async . download) sites

  (url, r) <- waitAny as -- ждем первую страничку
  printf "%s was first (%d bytes)\n" url (B.length r)
  mapM_ wait as -- дожидаемся остальных
У меня bing.com первым загружается =)

logger.hs - тут способ эмитирует передачу сообщений

PS: в воздухе витает что функциональный язык Erlang более ООП'ешен чем всякие C++/C#/Java ..., как оказалось не я один такого мнения ))

Последний раз редактировалось Kostia; 28.01.2014 в 01:11.
Kostia вне форума Ответить с цитированием
Старый 29.01.2014, 08:05   #123
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Kostia
Цитата:
А, так Эрланг все функции по умолчанию считает грязными ) (хоть авторы и называют его чистым xD). При этом каждый процесс в Эрланге имеет свой собственный почтовый ящик, куда кладутся письма, письма читаются по мере поступления, а не в порядке отправки.
Ага, это ты вместо фя реализации подсунул грязную очередь.
the_deer_one вне форума Ответить с цитированием
Старый 29.01.2014, 13:47   #124
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Цитата:
Ага, это ты вместо фя реализации подсунул грязную очередь.
Не, ! - тоже функция =) "Очередь" возникает за счет ожидания. Т.е. сообщения можно слать синхронно, тогда ! будет ждать ответа, и асинхронно, тогда ! будет выполнена в отдельном потоке и будет долбиться в почтовый ящик до тех пор, пока он не начнет принимать новые письма. Никакой последовательности или очереди не возникает, сообщение приходят в порядке "кто успел тот и съел" =)
Kostia вне форума Ответить с цитированием
Старый 29.01.2014, 13:53   #125
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Kostia
Цитата:
Никакой последовательности или очереди не возникает, сообщение приходят в порядке "кто успел тот и съел" =)
ты же сам пишешь "кладутся письма", "так и остаются в ящике". А если они кладуися и накапливаются это изменяемая грязная коллекция.
the_deer_one вне форума Ответить с цитированием
Старый 29.01.2014, 14:17   #126
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

Цитата:
ты же сам пишешь "кладутся письма", "так и остаются в ящике". А если они кладуися и накапливаются это изменяемая грязная коллекция.
Эх, если письмо не было прочитано, т.е. не прошло не по одному из паттернов, то и процесс которые пытается его послать не умрет, а попытается сделать это снова =), отсюда возникает эффект складирования и процесс который принимает сообщения будет с каждым разом обрабатывать все больше и больше сообщений, часть из которых так никогда и не обработаются, а будут копиться, поэтому принято в Erlang либо кидать исключение, либо сообщения не проходящие не по одному из паттернов помечать как прочитанные =)(что не рекомендуется)
А вот то как это организованно внутри, очередь или стек или еще как, уже не наша забота. Точно также BIF функции, мы считает что они работают честно, но на самом деле чтобы добиться оптимальности на существующей архитектуре компьютеров, делают все по своему, но нас это ничуть не касается.

Последний раз редактировалось Kostia; 29.01.2014 в 14:42.
Kostia вне форума Ответить с цитированием
Старый 30.01.2014, 07:45   #127
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

подожди, у нас есть некая фигня, в которую мы можем класть сообщения и они там накапливаются, а можем забирать и они оттуда пропадают. С чего бы эта штука не грязная.

В чём отличие от:

Код:
(;;)
{
  var bag = new Bag<Message>()
    var m = bag.Receive();
    if(m== null)
      break;
}
the_deer_one вне форума Ответить с цитированием
Старый 30.01.2014, 12:41   #128
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Буквально вчера написал для работы на C# утилитку, которая читает строки из одного файла, удаляет дубликаты, сортирует и пишет в другой файл. Причём делает это оптимальным образом. Весь код - одна строка:

Код:
File.WriteAllLines("output.tsv", new SortedSet(File.ReadLines("input.txt")));
ds.Dante вне форума Ответить с цитированием
Старый 30.01.2014, 12:48   #129
Metandrostenalon
Форумчанин
 
Регистрация: 03.04.2009
Сообщений: 108
По умолчанию

Лаконичный синтаксис то причем тут?
php,javascript
Metandrostenalon вне форума Ответить с цитированием
Старый 30.01.2014, 13:52   #130
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Цитата:
Сообщение от Metandrostenalon Посмотреть сообщение
Лаконичный синтаксис то причем тут?
тема - языки с самым лаконичным синтаксисом.
the_deer_one вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопросик самым опытным :-) Doholyan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 25.08.2009 17:13
Проблема с синтаксисом? Geddar PHP 1 30.06.2008 16:44
Казус с синтаксисом???... Sota Общие вопросы C/C++ 6 17.07.2007 19:15