Здравствуйте, remark, Вы писали:
R>Я так понимаю, что многопоточную очередь можно сделать прямо из MVar'ов или TVar'ов, т.е. в каждом узле очереди в каком-то виде будет присутствовать MVar (TVar). Это будут *не* иммутабельные структуры, но тем не менее ФП, т.к. Haskell
Работа с MVar может проводиться только в IO. Это мутабельная структура, верно. Аналогично TVar в монаде STM, которая опять таки ракрывается только в IO через atomically. IO же — это выход за пределы ФП, хотя это уже философия
MVar/TVar в каждом узле — это и есть каналы, ага.
R>Ну да, они не очень заточены под такого рода вещи. Они разрабатывались в предположении, что таких вещей как кэш вообще не существует...
Я вот о его важности только из твоих постов узнаю.
R>А там же вроде есть встроенный С
Где можно почитать? Что то я совсем не в курсе. GHC может генерить в C, исходники могут использовать #ifdef и т.д. директивы, есть FFI.
Встроенный С? Первый раз слышу.
R>Чтобы записать в переменную ядру/процессору надо получить *всю кэш-линию* в эксклюзивный доступ (себе в кэш), если последним в какую-либо переменную в этой *кэш-линии* записывало другое ядро, то сейчас кэш-линия находится у него в кэше, следовательно надо перемещать кэш-линию от одного ядра другому — это физическое перемещение, которое включает отправку кэш-линии по какой-то шине или каналу между ядрами. На современных многоядерных процессорах Intel/AMD такое перемещение занимает 200-300 тактов.
Стало понятнее, спасибо.
Здравствуйте, lomeo, Вы писали:
R>>А там же вроде есть встроенный С
L>Где можно почитать? Что то я совсем не в курсе. GHC может генерить в C, исходники могут использовать #ifdef и т.д. директивы, есть FFI.
L>Встроенный С? Первый раз слышу.
http://friggeri.net/blog/2008/02/26/ciml-c-in-ocaml
Здравствуйте, remark, Вы писали:
R>Здравствуйте, lomeo, Вы писали:
R>>>А там же вроде есть встроенный С
L>>Где можно почитать? Что то я совсем не в курсе. GHC может генерить в C, исходники могут использовать #ifdef и т.д. директивы, есть FFI.
L>>Встроенный С? Первый раз слышу.
R>http://friggeri.net/blog/2008/02/26/ciml-c-in-ocaml
OCaml != GHC (Glasgow
Haskell Compiler)
Хотя для хаскеля есть Harpy (правда не знаю можно ли оптимизацию с его помощью сотворить)
Здравствуйте, Курилка, Вы писали:
К>OCaml != GHC (Glasgow Haskell Compiler)
К>Хотя для хаскеля есть Harpy (правда не знаю можно ли оптимизацию с его помощью сотворить)
Ух, ты! Библиотечный встроенный асм, прикольно
Паддинги на таких вещах не сделаешь, нам же надо описывать типы данных, выравнивания и т.д.
Здравствуйте, lomeo, Вы писали:
L>Здравствуйте, Курилка, Вы писали:
К>>OCaml != GHC (Glasgow Haskell Compiler)
К>>Хотя для хаскеля есть Harpy (правда не знаю можно ли оптимизацию с его помощью сотворить)
L>Ух, ты! Библиотечный встроенный асм, прикольно
L>Паддинги на таких вещах не сделаешь, нам же надо описывать типы данных, выравнивания и т.д.
А, ну да, там же структуры данных не описываются...
Но если код писать можно, то почему бы и не структуры? Хотя как конкретно — хз.
Здравствуйте, Курилка, Вы писали:
L>>>Встроенный С? Первый раз слышу.
R>>http://friggeri.net/blog/2008/02/26/ciml-c-in-ocaml
К>OCaml != GHC (Glasgow Haskell Compiler)
К>Хотя для хаскеля есть Harpy (правда не знаю можно ли оптимизацию с его помощью сотворить)
А ну да, туплю...
Здравствуйте, Курилка, Вы писали:
К>>>OCaml != GHC (Glasgow Haskell Compiler)
К>>>Хотя для хаскеля есть Harpy (правда не знаю можно ли оптимизацию с его помощью сотворить)
L>>Ух, ты! Библиотечный встроенный асм, прикольно
L>>Паддинги на таких вещах не сделаешь, нам же надо описывать типы данных, выравнивания и т.д.
К>А, ну да, там же структуры данных не описываются...
К>Но если код писать можно, то почему бы и не структуры? Хотя как конкретно — хз.
Асм, С, какая разница, всё одно
Да, со структурами проблема, не понятно откуда память выделять... если бы был интерфейс к подсистеме памяти, то из асма можно было бы создать управляемый объект, тогда было бы другое дело. Хотя если в языке есть строчки, то можно что бы вызывающий код создал строчку нужного размера и передал бы её в асм, а в асме можно использовать эту строчку как буфер под произвольный объект. Да, это будет забавное программирование на функциональном языке
Здравствуйте, remark, Вы писали:
R>Да, со структурами проблема, не понятно откуда память выделять... если бы был интерфейс к подсистеме памяти, то из асма можно было бы создать управляемый объект, тогда было бы другое дело. Хотя если в языке есть строчки, то можно что бы вызывающий код создал строчку нужного размера и передал бы её в асм, а в асме можно использовать эту строчку как буфер под произвольный объект. Да, это будет забавное программирование на функциональном языке
Зачем такие извращения?? Есть же типы Word32, например. Делаем unboxed массив (можно alloc делать, есть указатели). Или через FFI.
Просто всё это попахивает садомазохизмом