А для чего вообще прендназначены ФЯП?
От: Философ Ад http://vk.com/id10256428
Дата: 25.02.12 01:54
Оценка:
Какова граница их применимости?

Можно ли на ФЯ написать сервис вида

interface IService
{
ServiceState GetState();
void NewState();
}
Всё сказанное выше — личное мнение, если не указано обратное.
Re: А для чего вообще прендназначены ФЯП?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.02.12 08:57
Оценка:
Здравствуйте, Философ, Вы писали:

Ф>Какова граница их применимости?


Ф>Можно ли на ФЯ написать сервис вида


Ф>interface IService

Ф>{
Ф>ServiceState GetState();
Ф>void NewState();
Ф>}

Простой ответ: да.

Сложный. Когда ты пишешь такой кусок кода, то наверное подразумеваешь что надо будет потом создавать различные реализации IService и использовать в программе adhoс полиморфизм. Но так как ты забыл (а может и не знал) что adhoс полиморфизм — не более чем косвенный вызов, то ни в одном языке нету проблем сделать структуру со ссылками на функции.

Если же тебя интересует вопрос инкапсуляции, хотя это явно из приведенного кода не следует, то скажу что для инкапсуляции в ФЯ используются замыкания.
Re: А для чего вообще прендназначены ФЯП?
От: Mamut Швеция http://dmitriid.com
Дата: 27.02.12 10:42
Оценка:
Ф>Какова граница их применимости?

Такая же, как для любых Turing-полных языков

Ф>Можно ли на ФЯ написать сервис вида


Ф>interface IService

Ф>{
Ф>ServiceState GetState();
Ф>void NewState();
Ф>}

Можно.

А что конкретно имелось в виду? В частности, подкину вот такую ссылку: http://norvig.com/design-patterns/ (показывает, как некоторые из ООП-паттернов прозрачно существуют в языках с поддержкой ФП)


dmitriid.comGitHubLinkedIn
Re[2]: А для чего вообще прендназначены ФЯП?
От: Философ Ад http://vk.com/id10256428
Дата: 27.02.12 11:00
Оценка:
Здравствуйте, Mamut, Вы писали:

M>А что конкретно имелось в виду?


особо интересовала возможность хранение состояния: например, где и как будет реализовываться состояние "сервис выключен, т.е. не принимает никаких запросов, кроме административных"
Всё сказанное выше — личное мнение, если не указано обратное.
Re[3]: А для чего вообще прендназначены ФЯП?
От: Mamut Швеция http://dmitriid.com
Дата: 27.02.12 12:13
Оценка:
M>>А что конкретно имелось в виду?

Ф>особо интересовала возможность хранение состояния: например, где и как будет реализовываться состояние "сервис выключен, т.е. не принимает никаких запросов, кроме административных"


В общем случае для ФЯ это будет выглядеть так:
State  = initial_service_state(),
State1 = service_on(State),
State2 = service_off(State1),
...


где State — opaque структура данных, в которой хранится некие данные для идентификации сервиса и/или его состояния.

Для того, чтобы не протягивать этот State по всей программе, в Erlang'е, например, поднимается процесс, который прячет свое внутреннее состояние.


dmitriid.comGitHubLinkedIn
Re[2]: А для чего вообще прендназначены ФЯП?
От: Sorc17 Россия  
Дата: 02.03.12 08:01
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Простой ответ: да.


G>Сложный. Когда ты пишешь такой кусок кода, то наверное подразумеваешь что надо будет потом создавать различные реализации IService и использовать в программе adhoс полиморфизм. Но так как ты забыл (а может и не знал) что adhoс полиморфизм — не более чем косвенный вызов, то ни в одном языке нету проблем сделать структуру со ссылками на функции.


G>Если же тебя интересует вопрос инкапсуляции, хотя это явно из приведенного кода не следует, то скажу что для инкапсуляции в ФЯ используются замыкания.


Браво! А ещё говорят, что специалисты микрософт никчёмные ...
Для нас [Thompson, Rob Pike, Robert Griesemer] это было просто исследование. Мы собрались вместе и решили, что ненавидим C++ [смех].
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.