OCaml - язык общего назначения?
От: Аноним  
Дата: 17.08.11 05:12
Оценка: 18 (1) +1
Много раз читал в ДП рекомендации попробовать OCaml, как единственную альтернативу С++ в качестве языка общего назначения.

http://caml.inria.fr/pub/distrib/ocaml-3.12/ocaml-3.12-refman.txt

The Caml run-time system is not reentrant: at any time, at most one thread
can be executing Caml code or C code that uses the Caml run-time system.
Technically, this is enforced by a "master lock" that any thread must hold
while executing such code.

это ставит крест на очень многих возможных применениях

Re: OCaml - язык общего назначения?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 17.08.11 05:38
Оценка: 5 (2) +2
Да, с параллелизмом на уровне потоков там туго. Сборщик мусора, работающий в многопоточной программе, намного сложнее и тормознее, поэтому авторы сознательно оставили его однопоточным, а параллелить предлагают на уровне обменивающихся сообщениями процессов, считая shared memory parallelism вообще тупиковой ветвью. Есть проект многопоточного GC для окамла — oc4mc, он вроде работает, но действительно заметно медленнее.

Эта ситуация с потоками — одна из причин, почему я еще не везде отказался от С++ в пользу окамла.
Re[2]: OCaml - язык общего назначения?
От: Temoto  
Дата: 17.08.11 09:56
Оценка:
DM>Да, с параллелизмом на уровне потоков там туго. Сборщик мусора, работающий в многопоточной программе, намного сложнее и тормознее, поэтому авторы сознательно оставили его однопоточным, а параллелить предлагают на уровне обменивающихся сообщениями процессов, считая shared memory parallelism вообще тупиковой ветвью. Есть проект многопоточного GC для окамла — oc4mc, он вроде работает, но действительно заметно медленнее.

DM>Эта ситуация с потоками — одна из причин, почему я еще не везде отказался от С++ в пользу окамла.


Я правильно понял, что в окамле точно такой же GIL как в питоне?
Re[2]: OCaml - язык общего назначения?
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 17.08.11 11:08
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Да, с параллелизмом на уровне потоков там туго. Сборщик мусора, работающий в многопоточной программе, намного сложнее и тормознее, поэтому авторы сознательно оставили его однопоточным, а параллелить предлагают на уровне обменивающихся сообщениями процессов, считая shared memory parallelism вообще тупиковой ветвью. Есть проект многопоточного GC для окамла — oc4mc, он вроде работает, но действительно заметно медленнее.


DM>Эта ситуация с потоками — одна из причин, почему я еще не везде отказался от С++ в пользу окамла.


Я давно к нему (OCaml-у) присматривался, но так и не решился его использовать. Как я понял, у тебя богатый опыт использования OCaml, если не трудно, не ответишь на пару вопросов?
— ты пишешь все приложение целиком ан OCaml, или только какую-то часть? Если часть, как организуешь взаимодействие?
— компилятор умеет генерировать нативный код для ARM процессоров? можно ли использовать OCaml на мобильных платформах?
— как обстоят дела с поддержкой 64 битных систем?
Re[3]: OCaml - язык общего назначения?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 17.08.11 11:09
Оценка:
Здравствуйте, Temoto, Вы писали:

T>Я правильно понял, что в окамле точно такой же GIL как в питоне?


Я не знаю подробностей про питоний, но в целом похоже. Можно иметь много окамловых потоков, но они будут работать не одновременно, а как на одноядерной машине. Из окамла можно вызвать код на Си, в котором использовать много потоков. Если они не лезут в кучу окамла, то они могут работать параллельно окамловскому коду.
Re[4]: OCaml - язык общего назначения?
От: Temoto  
Дата: 17.08.11 11:17
Оценка:
T>>Я правильно понял, что в окамле точно такой же GIL как в питоне?

DM>Я не знаю подробностей про питоний, но в целом похоже. Можно иметь много окамловых потоков, но они будут работать не одновременно, а как на одноядерной машине. Из окамла можно вызвать код на Си, в котором использовать много потоков. Если они не лезут в кучу окамла, то они могут работать параллельно окамловскому коду.


Точно такой же.

Спасибо, вы открыли мне глаза. Кошмар, ужас, разочарование.
Re[3]: OCaml - язык общего назначения?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 17.08.11 11:23
Оценка: 25 (3)
Здравствуйте, kaa.python, Вы писали:

У меня опыт сравнительно долгий, но не шибко богатый (в плане платформ и библиотек).

KP>- ты пишешь все приложение целиком ан OCaml, или только какую-то часть? Если часть, как организуешь взаимодействие?


Целиком, кое-какие мелочи иногда дописываются на С и линкуются.

KP>- компилятор умеет генерировать нативный код для ARM процессоров? можно ли использовать OCaml на мобильных платформах?


Можно. Вот пример игрушки для айфона и айпада, написанной на нем:
http://itunes.apple.com/us/app/cassino/id411381417?mt=8&ign-mpt=uo%3D4

Как это делают:
http://psellos.com/ocaml/compile-to-iphone.html
http://web.yl.is.s.u-tokyo.ac.jp/~tosh/ocaml-on-iphone/

KP>- как обстоят дела с поддержкой 64 битных систем?


На линуксах и маках — отлично. Кодогенератор для 64 бит лучше 32-битного, и нет таких дурацких ограничений на размер массивов и строк. Для винды 64-битная версия вроде как есть, но на официальном сайте нет бинарников, а самостоятельно собрать редкая птица сможет. Я пользуюсь 32-битной.
Re[2]: OCaml - язык общего назначения?
От: Oaks  
Дата: 17.08.11 13:11
Оценка:
Насколько мне известно, пишется OCaml Pro. На какой он стадии ? Будет там что-то новое ?
Re[3]: OCaml - язык общего назначения?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 17.08.11 15:33
Оценка:
Здравствуйте, Oaks, Вы писали:

O>Насколько мне известно, пишется OCaml Pro. На какой он стадии ? Будет там что-то новое ?


Я не в курсе. Может, FR что-то подскажет.
Re[3]: OCaml - язык общего назначения?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 17.08.11 15:54
Оценка:
Здравствуйте, Oaks, Вы писали:

O>Насколько мне известно, пишется OCaml Pro. На какой он стадии ? Будет там что-то новое ?


О! На сайте ocamlpro.com обнаружился бинарный дистрибутив 64-битной последней версии окамла для винды. Ура!
Re[4]: OCaml - язык общего назначения?
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 18.08.11 07:01
Оценка:
А можно зайти с другой стороны. Например иметь несколько Сишных потока из которых обращаться к различным инстансам Окамла, но в рамках одного процесса?
Re[5]: OCaml - язык общего назначения?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 18.08.11 07:13
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>А можно зайти с другой стороны. Например иметь несколько Сишных потока из которых обращаться к различным инстансам Окамла, но в рамках одного процесса?


Это надо, чтобы у каждого была своя куча и те части рантайма, которые сейчас не reentrant. Непросто это. Но можете попробовать.
Re[5]: OCaml - язык общего назначения?
От: Аноним  
Дата: 18.08.11 20:51
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>А можно зайти с другой стороны. Например иметь несколько Сишных потока из которых обращаться к различным инстансам Окамла, но в рамках одного процесса?


а смысл? тогда окамловые вещи будут полностью изолированы друг от друга, и не смогут коммуницировать кроме как через С-код. даже если такое сделать, то будет очень много проблем склеивания
Re[6]: OCaml - язык общего назначения?
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 19.08.11 05:56
Оценка:
KP>>А можно зайти с другой стороны. Например иметь несколько Сишных потока из которых обращаться к различным инстансам Окамла, но в рамках одного процесса?

А>а смысл?


Смысл в том, что однопоточные приложения, на данный момент, практически бесполезны. Макимум какая-то консольная утилита, и то не факт.

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


Изолированность не проблема. Любая задача довольно просто может быть разбита на подзадачи, которые уже и будут выполняться паралельно. А вот что делать с монолитным приложением, которое не в состоянии выполнить задачу в отдельном потоке. Практически бесполезно это
Re[7]: OCaml - язык общего назначения?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 19.08.11 06:33
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Изолированность не проблема.


Тогда можно разделить на несколько параллельных процессов, что и предлагают авторы языка. В Хроме вон так сделали и очень гордятся результатом.

KP> Любая задача довольно просто может быть разбита на подзадачи, которые уже и будут выполняться паралельно. А вот что делать с монолитным приложением, которое не в состоянии выполнить задачу в отдельном потоке. Практически бесполезно это


Задачу-то можно выполнить в отдельном потоке, просто не так быстро. Но если задача не числомолотилка, а ввод-вывод, то разница с "настоящим" параллельным потоком вряд ли будет заметна при правильном подходе.

Для однопоточных программ тоже немало применений есть. Например, я делал на окамле интерактивный анализатор логов с веб-интерфейсом. Не представляю, где бы мне там пригодились параллельные потоки (с диска читать лучше последовательно, а пользователь один, и много запросов сразу не посылает). Еще делал компилятор, он и без потоков очень быстрый получился.
Re[8]: OCaml - язык общего назначения?
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 19.08.11 06:42
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Здравствуйте, kaa.python, Вы писали:


KP>>Изолированность не проблема.


DM>Тогда можно разделить на несколько параллельных процессов, что и предлагают авторы языка. В Хроме вон так сделали и очень гордятся результатом.


В Хроме, кроме того, каждый процесс запускает потоки для различных фоновых операций. Куда ж без этого?

DM>Задачу-то можно выполнить в отдельном потоке, просто не так быстро. Но если задача не числомолотилка, а ввод-вывод, то разница с "настоящим" параллельным потоком вряд ли будет заметна при правильном подходе.


Сейчас идет тенденция к увеличению количества процессоров. Зачем же целенаправленно вводить какие-то ограничения и усложнять самому себе жизнь?

DM>Для однопоточных программ тоже немало применений есть. Например, я делал на окамле интерактивный анализатор логов с веб-интерфейсом. Не представляю, где бы мне там пригодились параллельные потоки (с диска читать лучше последовательно, а пользователь один, и много запросов сразу не посылает). Еще делал компилятор, он и без потоков очень быстрый получился.


Там бы они пригодились для раздельного чтения и анализа. Пользователей может быть больше чем 1. Хотя в приведенном тобой случае одного потока достаточно, согласен.

Т.е. да, для рядя задач одного потока хватает. Просто для моих задач наличие возможности запустить фоновую операцию критично. На столько критично.
Re[9]: OCaml - язык общего назначения?
От: Аноним  
Дата: 20.08.11 07:21
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Т.е. да, для рядя задач одного потока хватает. Просто для моих задач наличие возможности запустить фоновую операцию критично. На столько критично.


пока я вижу только один выход — если ест что-то ресурсоемкое (или просто длинное) фоновое, то можно запускать в отдельно окамловском потоке, который будет дергать С-callback, в котором будет сначала освобождаться gil, а только потом выполняться та самая ресурсоемкая задача.

честно говоря, не ожидал — тут столько лет разговоры были о окамле, как о полноценной замене С++, а когда руки дошли повозиться — получите, распишитесь
Re[10]: OCaml - язык общего назначения?
От: Аноним  
Дата: 22.08.11 10:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>честно говоря, не ожидал — тут столько лет разговоры были о окамле, как о полноценной замене С++, а когда руки дошли повозиться — получите, распишитесь


А можно поинтересоваться — на кой вообще нужна shared memory concurrency? Проблем мало, хочется по-комсомольски, стоя в гамаке?
Re[11]: OCaml - язык общего назначения?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 23.08.11 06:45
Оценка:
Здравствуйте, Аноним, Вы писали:

А> А можно поинтересоваться — на кой вообще нужна shared memory concurrency? Проблем мало, хочется по-комсомольски, стоя в гамаке?


Мне вот нужна, чтобы при обработке видео можно было разделить картинку на части и обрабатывать их параллельно. Причем для каждого куска нужны исходные данные не только из него самого, но и из других. Как прикажете это делать без shared memory?
Re[7]: OCaml - язык общего назначения?
От: FR  
Дата: 07.09.11 05:46
Оценка:
Здравствуйте, kaa.python, Вы писали:


KP>Смысл в том, что однопоточные приложения, на данный момент, практически бесполезны. Макимум какая-то консольная утилита, и то не факт.


На OCaml можно писать многопоточные приложения, но при этом фактически будет использоваться только одно ядро процессора. С потоками никаких
проблем при этом нет, есть только проблемы с реальным одновременным выполнением на нескольких ядрах/процессорах.

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


KP>Изолированность не проблема. Любая задача довольно просто может быть разбита на подзадачи, которые уже и будут выполняться паралельно. А вот что делать с монолитным приложением, которое не в состоянии выполнить задачу в отдельном потоке. Практически бесполезно это


Если в потоках нет тяжелых вычислений то никаких проблем, иначе получим тормоза (по сравнению скажем с аналогом на C++) на многоядерных машинах.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.