Например, как? Поясню. Есть 4 вектора (массива) A1-4 размерностью N. Нужно C=A1*A2+A3*A4. A1*A2 и A3*A4 я разнес по разным потокам, но выполняются они последовательно (на одной корке).
> 4.2. Нормальные там потоки, просто в библиотеке много глобальных > локов. Но вычислительная задача ведь в библиотеку не полезет...
4.2 также. С помощью потоков задействовать более одного ядра не удастся. Глобальный лок в сборщике мусора. Нужно много потоков, пишите многопроцессное приложение.
Забавно слышать от человека, который с языком знаком лишь по лор-у.
Забавно, но тот же let выглядит чужеродным и слишком многословным для caml-а. Если бы авторы были последовательны, то они должны были использовать на его месте какой-либо знак или, на хухой конец, скобочку и пару точек. ;) Язык ужасен и стремится к write only.
> Забавно слышать от человека, который с языком знаком лишь по лор-у.
По капче гадаем? Я на OCaml пишу ещё с тех пор, когда он был caml light, а до того много писал на SML.
> Забавно, но тот же let выглядит чужеродным и слишком многословным для caml-а.
По мнению некоего малограмотного студентишки? Ну так твоё мнение мало кого колышет. let - очень умное и правильное решение, позволяет подчеркнуть синтаксически область видимости определения.
> Язык ужасен и стремится к write only
Если бы авторы твоим советам следовали - тогда да. А так - язык один из самых читабельных, там трудночитаемый код написать практически нереально.
> тот же let выглядит чужеродным и слишком многословным для caml-а.
Не могу согласиться, синтаксичеси let как раз хорошо отражает свою семантику. Язык ужасен и стремится к write only только в неумелых руках. Как говорил Вирт "невозможно создать язык, который не позволял бы программисту писать плохие программы". Вот так-то...
> там трудночитаемый код написать практически нереально.
Ну это вы сильно приувеличили. Все-таки при написании на ocaml нужна определенная дисциплина, так как синтаксис весьма богат. Впрочем, это в той или иной степени касается любого языка и разработки вообще. Без этой самой дисциплины и получается write only вне зависимости от используемых средств.
>Я на OCaml пишу ещё с тех пор, когда он был caml light, а до того много писал на SML.
Значит твой моск уже похаван и ты не объективен. )
> let - очень умное и правильное решение, позволяет подчеркнуть синтаксически область видимости определения.
Похоже, это единственное, что авторы решили подчеркнуть. Разумнее было бы сделать читаемым весь язык.
>А так - язык один из самых читабельных
Ну дык, бывает и похуже, это понятно.
>Как говорил Вирт "невозможно создать язык, который не позволял бы программисту писать плохие программы".
Язык вообще не должен что-либо позволять или нет, а вот использовать побольше "букаф", т.к. именно их читают человеки, можно было бы.
Если подытожить, то можно сказать, что у меня сложилось следующее впечатление: авторы экономили печатные знаки, либо путают выразительность с "мало букв". %)
> Похоже, это единственное, что авторы решили подчеркнуть.
Дурак. Ты его хотя бы видел?
match ... with, if ... then ... else, function ... -> ..., fun ... -> ..., и прочее - очень многословная и явная пунктуация, никаких нагромождений из нечитабельных символов.
> Разумнее было бы сделать читаемым весь язык.
Так и сделали. Если ты не ознакомился даже с синтаксисом языка, надеясь, что он будет похож на знакомые тебе корявые языки вроде Си или Паскаля - то это твои проблемы, к языку отношения они не имеют.
> а вот использовать побольше "букаф", т.к. именно их читают человеки, можно было бы.
Именно много букаф там и есть, во всех конструкциях.
> авторы экономили печатные знаки, либо путают выразительность с "мало букв". %)
Я так понимаю, ты не осилишь привести хотя бы один пример якобы "трудночитаемого" кода.
> Язык вообще не должен что-либо позволять или нет, а вот использовать побольше "букаф", т.к. именно их читают человеки, можно было бы.
> Если подытожить, то можно сказать, что у меня сложилось следующее впечатление: авторы экономили печатные знаки, либо путают выразительность с "мало букв". %)
А можно конкретные примеры про "многабукаф"? Создается впечатление, что мы писали на разных ocaml'ах.
Да и действительно, создается впечатление, что анонимус привык к мейнстримовым языкам, и синтаксис ocaml ему не нравится "потому что не Java". По мне какой-нибудь Nemerle уродец еще тот...
Возможно, я глубоко не копал, только мельком взглянул. Хотя более близкое знакомство с ним у меня в планах (из-за более продвинутой, чем ocaml'овский camlp4, системе метапрограммирования).
Нет уж, ты конкретно покажи, что ты считаешь нечитабельным. Иначе придётся считать, что ты дурак и гонишь.
> Образцом вменяемого использования знаков алфавита на данный момент для меня является пистон.
В котором, кстати, list comprehensions есть. А в OCaml их нет.
Итак, или ты дурак, или показываешь, что именно нечитабельно, и как, по твоему мнению, этот синтаксис должен выглядеть на самом деле. Иначе просто несерьёзный лоровский быдлосвист получается, а не цивилизованное обсуждение.
> 4.2 также. С помощью потоков задействовать более одного ядра не удастся. Глобальный лок в сборщике мусора. Нужно много потоков, пишите многопроцессное приложение.
Это почему же? Пока gc не работает, вполне себе потоки параллельно работают.
Нет, сейчас в OCaml потоки не работают параллельно никогда.
В этом году в рамках проекта OCaml Summer Project была предпринята попытка сделать в OCaml параллельный сборщик мусора, но она как-то не очень продвинулась, вроде то, что получилось, работает уж очень медленно.
> В этом году в рамках проекта OCaml Summer Project была предпринята попытка сделать в OCaml параллельный сборщик мусора, но она как-то не очень продвинулась, вроде то, что получилось, работает уж очень медленно.
Погоди, если в Окамле использовать нативный код и os-level треды, то они работают параллельно, потому что уже не виртуальная машина управляет тредами, а ядро. Другое дело, что с GC в один момент времени только один поток работать может, а остальные висят на локе.
Да, там есть так называемые system threads. Они действительно работают поверх ОС-потоков.
Но факт, параллельно они выполняться не будут. Сейчас я не помню технических деталей, помню, что проблема в сборщике мусора. Где-то в
рассылке был пост Ксавье по этому поводу, где он обосновывал, почему сделано так. Я сегодня-завтра, если будет время, поищу, и опишу более
подробно. А пока, чтобы убедить тебя окончательно, попробуй запустить такую программу на многоядерном процессоре и посмотри, как она
загрузит ядра:
let calc x =
while true do
let _ = x * x in ()
done
let _ = Thread.create calc 5
let _ = Thread.create calc 6
let _ = Thread.create calc 7
let _ = calc 8
Компиляция:
ocamlopt -thread unix.cmxa threads.cmxa test.ml -o test
т.е., как видишь, задействованы действительно system threads. Удивишься, но загружено будет лишь одно ядро.
P.S. Извини, долго не отвечал. Выходные...