小编tjm*_*tjm的帖子

D中的向量和动态数组

我认为动态数组是D中向量的替代,但似乎它们没有删除函数(只有关联数组才有),这对于向量来说是一个限制,所以我想知道我是否已经做到了.如果有一个如下的数组,

uint[] a;
a.length = 3;
a[0] = 1;
a[1] = 2;
a[2] = 3;
Run Code Online (Sandbox Code Playgroud)

然后,我发现删除第二个元素的唯一方法是,

a = a[0..1] ~ a[2];
Run Code Online (Sandbox Code Playgroud)

但这似乎并不正确(但也许只是因为我还没有理解这一点).那么有一个向量,还有另一种从动态数组中删除元素的方法吗?

谢谢.

arrays d vector

7
推荐指数
1
解决办法
2098
查看次数

如何在编译器中实现类

我想为我自己的小语言实现一个类类型,但我起初想的不会太难让我难过.我有解析器,这是我遇到问题的代码生成方面.任何人都可以对最佳/正确的方法有所了解吗?具体来说,我想在LLVM中这样做,所以当我需要知道这个任何特定LLVM代码的一般性时,我应该使用它会很棒.

谢谢T.


注意:我对LLVM的体验基本上来自于Kaleidoscope教程,而且还有一些额外的内容,但我还远远没有完全理解LLVM API.

compiler-construction language-design llvm

7
推荐指数
1
解决办法
1258
查看次数

当字体大小在内部元素上更改时,IE文本缩进的问题

我正在用一系列引号构建一个页面.每个报价的形式如下:

<blockquote>
<span class="ldquo">&ldquo;</span>The quote<span class="rdquo">&rdquo;</span>
<cite>The author</cite>
</blockquote>
Run Code Online (Sandbox Code Playgroud)

引号应该被左上方的大引号(ldquo绝对定位)和右下角的大引号(rdquo浮动然后相对定位)阻挡.引号中的文本为text-indent-ed,以使左上角的引号不与文本重叠.在Firefox(3.6)和Chromium(8)中,这很好用,但在IE(8)中,当我更改字体大小时ldquo,似乎文本缩进从大小上升,它将基于字体大小容器的大小ldquo(容器中的第一个元素).

我发现,如果我<span />之前添加一个空ldquo并更新其左偏移以匹配容器字体大小的文本缩进它在IE中工作但是这在Firefox和Chromium中断,它们期望左偏移为ldquo' s字体大小.并不是说作为"修复"无论如何都会特别令人高兴.

一些重新创建问题的代码如下:

<!DOCTYPE html>
<html>
<head>
<style>
    #container {
        width: 20em;
    }

    blockquote {
        margin :0 0 2em 0;
        position:relative;
        text-indent: 2em;
        font-size:0.7em;
        text-align:justify;
    }

    .ldquo, .rdquo {
        color: #EC008C;
        font-size:3em;
        height:0;
        top: -0.15em;
    }

    .ldquo {
        position:absolute;
        left: -0.6em;
    }

    .rdquo {
        float:right;
        position:relative;
        left: 0.05em;
    }   

    blockquote cite {
        display:block; …
Run Code Online (Sandbox Code Playgroud)

html css internet-explorer-8

6
推荐指数
1
解决办法
663
查看次数

子进程完成但仍未终止,从而导致死锁

好吧,因为目前没有答案,我不觉得这样做太糟糕了.虽然我仍然对幕后实际发生的问题感兴趣,但我最迫切的问题是更新2中指定的问题.

a JoinableQueue和a 之间有什么区别Manager().Queue()(什么时候应该使用另一个?).更重要的是,在这个例子中,替换另一个是否安全?


在下面的代码中,我有一个简单的进程池.每个进程都传递进程queue(pq)以从中提取要处理的数据,并返回值queue(rq)以将返回的处理值传递回主线程.如果我不附加到返回值队列,它会起作用,但是一旦我这样做,由于某种原因阻止进程停止.在这两种情况下,进程run方法都返回,因此它不在put返回队列阻塞上,但在第二种情况下进程本身不会终止,因此程序join在进程时死锁.为什么会这样?

更新:

  1. 它似乎与队列中的项目数有关.

    至少在我的机器上,我可以在队列中拥有多达6570个项目,它实际上可以工作,但不仅仅是这个而且它会死锁.

  2. 它似乎合作Manager().Queue().

    无论是限制JoinableQueue还是仅仅误解了两个对象之间的差异,我发现如果我用a替换返回队列Manager().Queue(),它会按预期工作.它们之间有什么区别,什么时候应该使用另一个?

  3. 如果我从rq

    Oop 消费,则不会发生错误.这里有一个答案,当我评论它时,它就消失了.无论如何,它所说的一件事就是质疑,如果我添加一个消费者,这个错误是否仍会发生.我试过这个,答案是,不,不是.

    它提到的另一件事是来自多处理文档的引用作为问题的可能关键.提到JoinableQueue的,它说:

    ...用于计算未完成任务数量的信号量最终可能会溢出引发异常.


import multiprocessing

class _ProcSTOP:
    pass

class Proc(multiprocessing.Process):

    def __init__(self, pq, rq):
        self._pq = pq
        self._rq = rq
        super().__init__()
        print('++', self.name)

    def run(self):
        dat = self._pq.get()

        while not dat is _ProcSTOP:
#            self._rq.put(dat)        # uncomment me for deadlock
            self._pq.task_done()
            dat = …
Run Code Online (Sandbox Code Playgroud)

python debugging deadlock multiprocessing python-3.x

6
推荐指数
1
解决办法
1575
查看次数

在Ubuntu 10.04上设置工作D2.x工具链(使用gtkd)

我已经和D玩了几天,并且对它感到非常兴奋,直到,我试图让gtkd工作.我现在浪费了3天中最好的部分试图获得一个工作设置,并开始得到(阅读;很久以前得到)有点士气低落.我想知道在我放弃之前是否有人可以提供帮助.我在网上找到的很多信息已经过时,所以我不确定我是否认为这甚至是可能的.

剩下的就是我到目前为止所尝试的内容,如果您有快速解决方案,可能不需要阅读它,所以请随意跳转到... [跳转到此处]

所以,首先我需要知道,探戈实际上可以与D2.0一起使用,我相信它不是最初的,但现在D2.x是这样的,你可以使用探戈和恐惧症并排.如果这不是真的,那么我想我已经陷入了第一道障碍,这是一个非首发.

到目前为止我采取的步骤.

  1. 我从ubuntu存储库安装了gdc
  2. 我从repos安装了libtango-headers(注意,只有标题,没有可用的库,所以没什么帮助)
  3. 我手动安装了dsss

这个设置会编译D,但是当我来安装gtkd(带有dsss)时,它编译但是在尝试使用它编译任何东西时我得到了各种错误(与tango有关).好吧,正如我所提到的,我没有libs,所以这不应该是意料之外的.我试图手动安装探戈库但仍然有很多错误,并最终使用了一个dsss net install tango警告我,我不能回到phobos(一些困扰我的东西,就像我提到的那样,我认为这两个可以和对方一起使用)无论如何,我继续前进并完全搞砸了我的设置.我现在无法编译任何D.

对不起我无法更明确地说明我在上一节中遇到的错误,老实说我不记得了.

无论如何,我删除了我安装的所有内容.并重新开始.

  1. 我从repos安装了gdc
  2. 我手动安装了dss

我现在读到最新的探戈不适用于gdc(不确定这是否属实)所以我

  1. 得到了dmd的deb并安装了它.
  2. 手动安装了latested tango(libs和header).
  3. 用dsss安装了gtkd

现在我无法识别dmd,因此只能使用gdc.然而,这并没有找到探戈.如果我直接使用dmd,它会找到tango和gtkd,但是我发现有关volatile语句被弃用的错误.在D2.x中显然是正确的东西,它让我回到"甚至支持探戈".

天哪,我很困惑!

[跳到这里]

如果有人能给我一步一步的说明如何设置工作设置,我将永远感激不尽!

谢谢,T.

更新: "我们在那里!"

所以我从http://www.digitalmars.com/d/download.html下载了dmd.2.049.zip 并解压缩到我的主目录并做了一个export PATH = $PATH:~/dmd2/linux/bin(感谢dsimcha).

忘了dsss.根据http://www.dsource.org/projects/gtkd/wiki/UsingSubversion上的说明获得了gtkd的svn版本.编辑GNUmakefile更改前缀/home/me/dmd2/linux并执行了make install.

编辑~/dmd2/linux/bin/dmd.conf所以包含的路径../include(放入gtkD库,../lib所以我不需要编辑库路径).

现在最后用gtkD编译我需要链接libgtkd和libdl,这是由dmd mydprog.d -L-lgtkd -L-ldl(由于jpf)完成的.

d gtkd

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

ANTLR3词法分析器优先

我想'..'在ANTLR3词法分析器中创建一个令牌,用于将表达式串起来

a..b     // [1]
c .. x   // [2]
1..2     // [3] 
3 .. 4   // [4]
Run Code Online (Sandbox Code Playgroud)

所以,我补充说,

DOTDOTSEP : '..' 
          ;
Run Code Online (Sandbox Code Playgroud)

问题是我已经有了一条规则:

FLOAT : INT (('.' INT (('e'|'E') INT)? 'f'?) | (('e'|'E') INT)? ('f'))
      ;
Run Code Online (Sandbox Code Playgroud)

并且在上面的示例[3] 1..2中得到匹配FLOAT(我不知道为什么因为第一个.是另一个.不是INT,但它是).

我想知道是否有办法改变词法分析器规则的优先级,因此DOTDOTSEP首先匹配FLOAT.

这里,似乎我失去了出来,"The rule having the greatest count is the winner.",但不知道是否有办法解决它.

PS INT定义如下......

fragment DIGIT
    : '0'..'9'
    ;

INT : DIGIT+
    ;
Run Code Online (Sandbox Code Playgroud)

编辑. 进一步的测试让我觉得它不像直接匹配FLOAT规则那么简单.(我打算改变这个问题,但既然我现在得到了答案,我就不会.)问题(我相信)仍然存在于词法分析规则的优先级,所以问题仍然是一样的.

antlr lexer antlr3

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

在PHP中保护路径

我正在编写一些PHP,它需要一些路径到不同的内容目录,并使用它们以后包含页面的各个部分.我正在努力确保路径看起来像它们一样,并且它们都没有违反应用程序的规则.哪个是,

  1. PRIVATEDIR(相对于DOCUMENT_ROOT)定义必须高于DOCUMENT_ROOT.
  2. CONTENTDIR(相对于PRIVATEDIR)定义必须位于下方PRIVATEDIR,不得返回DOCUMENT_ROOT.
  3. 其余*DIRS的(相对于CONTENTDIR)定义必须位于下方CONTENTDIR

我在单例控制器类中设置了一些默认值,然后用户将要覆盖的路径数组传递给此类构造函数.然后我想要理智地检查它们以确保它们遵守上述规则.继承人我是如何开始的...

编辑: 请注意我error_reporting在下面的代码中的使用,然后不要自己做!我误解了这个命令是如何工作的.如果你想知道为什么,请参阅stealthyninja和评论Shrapnel的评论(并感谢他们指出这一点).

private $opts = array( // defaults
   'PRIVATEDIR'   => '..',        // relative to document root
   'CONTENTDIR'   => 'content',   // relative to private dir
   ...
   ...
);

private function __construct($options) { //$options is the user defined options
    error_reporting(0);
    if(is_array($options)) {
        $this->opts = array_merge($this->opts, $options);
    }

    if($this->opts['STATUS']==='debug') {
        error_reporting(E_ALL | E_NOTICE | E_STRICT);
    }

    $this->opts['PUBLICDIR']  = realpath($_SERVER['DOCUMENT_ROOT']) …
Run Code Online (Sandbox Code Playgroud)

php security

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

导致哈希在一定时间后过期

我有一种情况,脚本从用户接收一些数据,然后返回一个哈希.在一段时间内,比如说X秒,哈希是有效的,并且当与原始数据一起提供回脚本时,并且在指定的时间范围内,允许访问某些功能.

我这样做是通过在哈希中包含一个时间戳.我可以通过调用say来获取时间戳,floor(time()/X);但是这样,而不是在X秒后过期,在1到X秒之间到期.我通过保存time()%X并将其附加到哈希来解决这个问题,然后当我收到它,解析它并从中减去它时time(),所以我的哈希函数看起来有点像这样:

function hash($oldhash='') {
    static $hash;
    if(!$hash) {
        $time = time();
        $expoff = explode('!', $oldhash, 2); 
        $expoff = $expoff[0] ? $expoff[0] : $time%$this->_cfg['hashexpire'];
        $hash = $expoff.'!'.sha1($this->_data.floor(($time-$expoff)/$this->_cfg['hashexpire']));
    }   
    return $hash;
}
Run Code Online (Sandbox Code Playgroud)

还有盐在那里,但为了清楚起见我删除了它.

这是有效的,但我认为可能有更好的方法来实现我在这之后的想法,并想知道你是否有任何建议.

php security hash

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

Modernizr.load(yepnope.js)IE条件混乱

在下面的代码dd_belatedpng.js中加载尽管我使用的是Firefox 4.0.1.根据yepnope.js文档,ielt7!如果浏览器的IE低于版本7 ,前缀应该只导致脚本加载.这个功能是从Modernizr.load实现中删除的(我相信一个只是另一个的别名)或者是一个错误,或者,正如我怀疑的那样,我只是错过/误解了一些明显的东西?谢谢你的帮助.这是代码.

Modernizr.load([
    {   
        load: '//ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js',
        complete: function() {
            if(!window.jQuery) {
                Modernizr.load('/inc/jquery-1.6.1.min.js');
            }   
        }   
    },  
    {   
        load : 'ielt7!/inc/dd_belatedpng.js',
        callback: function() {
            $(function() {
                DD_belatedPNG.fix("img, .png_bg");
            }); 
        }   
    }/*,
    'jquery.plugins.js',
    'my.scripts.js'*/
]);
Run Code Online (Sandbox Code Playgroud)

javascript modernizr yepnope

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

__init__.so(而不是 __init__.py)屏蔽子包

我正在 cython 中编写一些代码,并且我有一些"Packages \xe2\x80\x9cwithin\xe2\x80\x9d module"。—这实际上是我的问题的后续,结构应该是相同的。问题是这是 cython,所以我正在处理的.so是而不是.py

\n\n

工作达到__init__.so这样的程度,

\n\n
import mystuff\n
Run Code Online (Sandbox Code Playgroud)\n\n

会起作用,但它似乎掩盖了下面的所有子包。那是,

\n\n
import mystuff.test.test1\n
Run Code Online (Sandbox Code Playgroud)\n\n

将不会。我收到一个ImportError: No module named ...错误。

\n\n

我该如何解决这个问题?.pyx在编译之前我需要添加一些东西吗.c?或者也许我可以重命名__init__.so为其他名称,并以某种方式将其拉入__init__.py(注意,__init__.py仍然需要与 一起存在.so以显示它的包)?或者是其他东西。

\n\n
\n\n

更新:未为包__path__定义属性....so

\n\n

好吧,我想到也许我可以通过操纵__path__包的属性来解决这个问题。有趣的是,这是为.py包定义的,但会导致.so\ 错误。这不是解决方案,但我想知道这是否是问题的根源。

\n

python module package cython python-3.x

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