小编Att*_*tic的帖子

使用阴谋时插件包装未知符号

我正在搞乱插件包但是我碰到了一个问题.

这是代码:

UTIL/Header.hs

module Util.Header(PT(..)) where

data PT a = PT a deriving Show
Run Code Online (Sandbox Code Playgroud)

Plug.hs

module Plug(helloPlugin) where
import Util.Header
helloPlugin :: PT Int
helloPlugin = PT 1
Run Code Online (Sandbox Code Playgroud)

Main.hs

module Main where

import Util.Header
import System.Plugins

main :: IO ()
main = do
    mv <- load "Plug.o" ["."] [] "helloPlugin"
    case mv of
        LoadFailure msg -> print msg
        LoadSuccess _ v -> print $ show (v :: PT Int)
Run Code Online (Sandbox Code Playgroud)

这一切都很好,然后用ghc编译.使用Cabal构建工作也很好,但是当我运行可执行文件时,我收到此错误:

plugintest: /home/kevin/.cabal/lib/plugins-1.5.4.0/ghc-7.6.3/HSplugins-1.5.4.0.o: unknown symbol `ghczm7zi6zi3_ErrUtils_zdsinsertzuzdsgo5_info'
plugintest: user error (resolvedObjs failed.) …
Run Code Online (Sandbox Code Playgroud)

plugins haskell ghc cabal cabal-install

11
推荐指数
1
解决办法
442
查看次数

终端内的Emacs动态更改光标颜色

我正在尝试动态地将Emacs中的光标颜色更改为另一种颜色.

我正在使用emacs -nw终端Emacs.我正在使用的终端是Rxvt-Unicode(Urxvt).

由于Emacs不能(我认为)对终端进行更改,(set-cursor-color "red")将无法正常工作.为了改变终端的光标颜色,我可以运行 echo -ne '\033]12;red\007'.这会将光标的颜色更改为红色.

我在Emacs中尝试做的是在其中运行此命令. M-x shell-command RET echo -ne '\033]12;red\007' RET

但是,Emacs将转义回显的字符串并将其打印在窗口的底部,而不是实际对光标进行任何更改.

我真的不知道我还能从这里做什么,我不想使用Emacs GUI.有没有人知道这方面的方法?我希望能够根据我当前的模式更改光标的颜色,这就是为什么它需要是动态的.如果有人有任何其他建议我会很高兴听到他们!

emacs terminal elisp

8
推荐指数
1
解决办法
1062
查看次数

Erlang产生了大量的C进程

我一直在研究如何在Erlang中嵌入语言(让我们用Lua作为例子).这当然不是一个新想法,并且有许多库可以做到这一点.但是我想知道是否有可能启动一个由Lua修改的状态的Genserver.这意味着一旦启动Genserver,它将启动一个(长时间运行的)Lua进程来操纵Genserver的状态.我知道这也是可能的,但我想知道我是否可以产生1,000 10,000甚至100,000个这些过程.

我对这个话题并不熟悉,但我做了一些研究.(如果我对这些选项有误,请纠正我).

TLDR; 跳到最后一段.

第一种选择:NIF:

这似乎不是一个选项,因为它会阻止当前进程的Erlang Scheduler.如果我想生成大量的这些,它将冻结整个运行时.

第二种选择:港口司机:

它就像一个NIF,但通过将数据发送到指定端口进行通信,该端口也可以将数据发送回Erlang.这很好,虽然这似乎也阻止了调度程序.我已经尝试了一个为你做锅炉平台的库,但这似乎在产生10个进程后阻止了调度程序.我还查看了Erlang文档中的postgresql示例,据说这是异步但我无法获得示例代码(R13?).是否可以在不阻塞运行时的情况下运行尽可能多的端口驱动程序进程?

第三种选择:C节点:

我认为这很有意思并想尝试一下,但显然项目"erlang-lua"已经做到了.这很好,因为如果出现问题并且进程被隔离,它不会导致Erlang VM崩溃.但是为了实际生成单个进程,您需要生成整个节点.我不知道这有多贵.我也不确定连接群集中节点的限制是什么,但我不认为自己会产生100,000个C节点.

第四种选择:港口:

起初我认为这与端口驱动程序相同,但它实际上是不同的.您生成一个执行应用程序并通过STDIN和STDOUT进行通信的进程.这适用于产生大量进程,并且(我认为?)它们不是对Erlang VM的威胁.但是,如果我要通过STDIN/STDOUT进行交流,为什么还要开始使用嵌入式语言呢?不妨使用任何其他脚本语言.

因此,经过对一个领域的大量研究,我不熟悉,我已经到了这里.您可以将Genserver作为"实体",其中AI是用Lua编写的.这就是为什么我想为每个实体建立一个流程.我的问题是如何实现产生许多与长期运行的Lua进程通信的Genservers?这甚至可能吗?我应该以不同的方式处理我的问题吗?

c erlang lua multithreading ffi

5
推荐指数
1
解决办法
631
查看次数

标签 统计

c ×1

cabal ×1

cabal-install ×1

elisp ×1

emacs ×1

erlang ×1

ffi ×1

ghc ×1

haskell ×1

lua ×1

multithreading ×1

plugins ×1

terminal ×1