小编ada*_*ter的帖子

Scala PackratParser忽略失败解析器

我有一个使用Scala的编写的解析器RegexParsers- 链接

在解析具有深层嵌套表达式的语法时,它有一些严重的性能问题.因此我创建了一个版本,我将其混合在Scala的PackratParsers- 链接中

Packrat版本没有出现相同的性能问题并正确解析语法.但是,当我提供无效的语法进行测试时,例如这个

用于通过此处的失败解析器组合器正确报告"无效规则"失败的旧(非包装)解析器| failure("Invalid rule")- 链接

当使用packrat-parser版本时,如果我启用跟踪,我可以从跟踪中看到故障是在非packrat版本中创建的,但PackratParser似乎忽略了这一点并且总是返回failure: Base Failure.

在使用我需要理解的PackratParsers时,是否存在与故障处理有所不同的内容?

parsing scala parser-combinators

43
推荐指数
1
解决办法
392
查看次数

在ReentrantReadWriteLock#tryLock失败时被jcstress测试困惑

我正试图掌握JCStress.为了确保我理解它,我决定为我知道必须正确的东西写一些简单的测试:java.util.concurrent.locks.ReentrantReadWriteLock.

我写了一些非常简单的测试来检查锁模式兼容性.不幸的是,有两项压力测试失败了:

  1. X_S:

    true, true        32,768     FORBIDDEN  No default case provided, assume FORBIDDEN
    
    Run Code Online (Sandbox Code Playgroud)
  2. X_X:

    true, true        32,767     FORBIDDEN  No default case provided, assume FORBIDDEN
    
    Run Code Online (Sandbox Code Playgroud)

在我看来,一个线程不应该能够保持读锁定,而另一个线程也保持写锁定.同样,两个线程不可能同时保持写锁定.

我意识到这个问题很可能没有ReentrantReadWriteLock.我想我可能在jcstress测试中犯了一些关于JMM和读取锁状态的愚蠢错误.

不幸的是,我无法发现问题.有人可以帮我理解我所犯的(愚蠢?)错误吗?

import org.openjdk.jcstress.annotations.*;
import org.openjdk.jcstress.infra.results.ZZ_Result;

import java.util.concurrent.locks.ReentrantReadWriteLock;

/*
 * |-----------------|
 * |  COMPATIBILITY  |
 * |-----------------|
 * |     | S   | X   |
 * |-----------------|
 * | S   | YES | NO  |
 * | X   | NO  | NO  |
 * |-----------------|
 */
public class ReentrantReadWriteLockBooleanCompatibilityTest { …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading java.util.concurrent jcstress

17
推荐指数
1
解决办法
277
查看次数

使用语句实现C++等效的C#

我正在寻找一种优雅的解决方案,用于在C++中实现C#using语句的等价物.理想情况下,结果语法应该易于使用和阅读.

C#使用语句详细信息在这里 - http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.80).aspx

我不确定解决方案是使用函数指针与类上的析构函数,某种形式的巧妙模板编程甚至是元模板编程.基本上我不知道从哪里开始......

c# c++ templates using-statement

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

管理不对称资源使用的最佳设计模式

我想就使用托管资源的最佳设计模式绘制一些意见,其中涉及两个不同的资源,但您需要以与获取它们相反的顺序发布它们.

首先,让我设置场景.我们正在使用两种类型的对象文档和文档集合.文档集合字面上包含对文档的引用和每个文档的一些元数据.

最初我们有一个对称的图案流动如下:

  1. 锁集合
  2. 用Collection做有用的东西
  3. 锁定文件
  4. 用Collection和Document做有用的东西
  5. 解锁文件
  6. 解锁收藏

并在代码中表示如下:

Collection col = null;
try {
    col = getCollection("col1 name", LockMode.WRITE_LOCK);

    // Here we do any operations that only require the Collection

    Document doc = null;
    try {
        doc = col.getDocument("doc1 name", LockMode.WRITE_LOCK);

        // Here we do some operations on the document (of the Collection)

    } finally {
        if (doc != null) {
            doc.close();
        }
    }

} finally {
    if (col != null) {
        col.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

既然我们已经拥有try-with-resourcesJava …

java design-patterns try-with-resources

9
推荐指数
1
解决办法
523
查看次数

如何使用LambdaMetaFactory调用构造函数?

我想尝试避免反射调用构造函数,并尝试遵循本文中采用的LamdaMetaFactory方法 - 更快地替代Java的反射

我想要构建的类看起来像:

interface DBBroker {}

public class NativeBroker implements DBBroker {
    public NativeBroker(BrokerPool brokerPool, final Configuration configuration) {
    }
}
Run Code Online (Sandbox Code Playgroud)

使用LambaMetaFactory我试图构造一个BiFunction<BrokerPool, Configuration, DBBroker>替换直接调用构造函数.

到目前为止我的代码看起来像:

Class<? extends DBBroker> clazz =
    (Class<? extends DBBroker>) Class.forName("org.exist.storage.NativeBroker");

MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodHandle mh =
    lookup.findConstructor(clazz, MethodType.methodType(void.class, new Class[] {BrokerPool.class, Configuration.class}));

BiFunction<BrokerPool, Configuration, DBBroker> constructor 
    (BiFunction<BrokerPool, Configuration, DBBroker>)
        LambdaMetafactory.metafactory(
                    lookup, "apply", MethodType.methodType(BiFunction.class),
                    mh.type(), mh, mh.type()).getTarget().invokeExact();

final DBBroker broker = constructor.apply(database, conf);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会返回错误 -

AbstractMethodError:方法org/exists/storage/BrokerFactory $$ Lambda $ 55.apply(Ljava/lang/Object; Ljava/lang/Object;)Ljava/lang/Object; …

java lambda invokedynamic java-8

9
推荐指数
1
解决办法
370
查看次数

HTML ASCII Case不敏感的ICU Collat​​or

我需要创建一个对应于https://www.w3.org/2005/xpath-functions/collat​​ion/html-ascii-case-insensitive/的Collat​​or,即在进行比较时忽略ASCII A-Za-z字符的区分大小写.

我尝试使用以下ICU4j RuleBasedCollator:

final RuleBasedCollator collator =
        new RuleBasedCollator("&a=A, b=B, c=C, d=D, e=E, f=F, g=G, h=H, "
                + "i=I, j=J, k=K, l=L, m=M, n=N, o=O, p=P, q=Q, r=R, s=S, t=T, "
                + "u=U, v=V, u=U, v=V, w=W, x=X, y=Y, z=Z").freeze();
Run Code Online (Sandbox Code Playgroud)

但是,以下比较似乎失败了,我希望它能成功(即返回true):

final SearchIterator searchIterator = new StringSearch(
        "pu", new StringCharacterIterator("iNPut"), collator);
return searchIterator.first() >= 0;
Run Code Online (Sandbox Code Playgroud)

我的规则中缺少什么?

java icu icu4j

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

用于包装C++对象的最佳JNI模式?

我正在开发一个Java API,其中许多Java对象实际上是等效C++对象的包装器.Java对象创建C++对象,并在不再需要它们时负责释放它们.我想知道最好的模式,我可以看到两个可能的选择:

  1. 使用静态本机方法调用和最终变量构造构造函数中的C++对象以保存本机句柄.

    public abstract class NativeBackedObject1 implements java.lang.AutoCloseable {
    
        protected final long _nativeHandle;
        protected final AtomicBoolean _nativeOwner;
    
        protected NativeBackedObject1(final long nativeHandle) {
            this._nativeHandle = nativeHandle;
            this._nativeOwner = new AtomicBoolean(true);
        }
    
        @Override
        public close() {
            if(_nativeOwner.copareAndSet(true, false)) {
                disposeInternal();
            }
        }
    
        protected abstract void disposeInternal();
    }
    
    public SomeFoo1 extends NativeBackendObject1 {
        public SomeFoo1() {
            super(newFoo());
        }
    
        @Override
        protected final void disposeInternal() {
            //TODO: any local object specific cleanup
            disposeInternal(_nativeHandle);
        }
    
        private native static long newFoo();
        private native disposeInternal(final long nativeHandle); …
    Run Code Online (Sandbox Code Playgroud)

c++ java oop java-native-interface

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

如何 Terraform 创建和验证 AWS 证书

我尝试按照此处 Terraform 文档中的示例使用 Terraform 创建和验证 AWS 证书: https: //registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/acm_certificate_validation#dns-validation-与路线 53

\n

我的 Terraform 文件如下所示:

\n
resource "aws_acm_certificate" "vpn_server" {\n  domain_name = "stuff.mine.com"\n  \n  validation_method = "DNS"\n\n  tags = {\n    Name = "certificate"\n    Scope = "vpn_server"\n    Environment = "vpn"\n  }\n}\n\nresource "aws_acm_certificate_validation" "vpn_server" {\n  certificate_arn = aws_acm_certificate.vpn_server.arn\n\n  validation_record_fqdns = [for record in aws_route53_record.my_dns_record_vpn_server : record.fqdn]\n\n  timeouts {\n    create = "2m"\n  }\n}\n\nresource "aws_route53_zone" "my_dns" {\n  name = "stuff.mine.com"\n\n  tags = {\n    name = "dns_zone"\n  }\n}\n\n\nresource "aws_route53_record" "my_dns_record_vpn_server" {\n  for_each = {\n    for dvo …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services terraform terraform-provider-aws

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

Java 8 - 使用lambdas推断泛型返回类型

我试图在Java 8中的一些高阶函数中保留lambda表达式的返回类型的泛型类型信息.我已将实际代码简化为此测试用例.问题不是我期望代码完全按照我所期望的那样,而是我希望将泛型类型R推断为java.lang.String并通过函数调用进行传递.

import java.util.function.Function;

public class AdamTest {

    public final static void main(final String args[]) {
        final AdamTest adamTest = new AdamTest();

        final String s = adamTest.thing2(7).apply(i -> i.toString());
        System.out.println(s);
    }


    private <R> R fn1(final Function<Integer, R> op) {
        return op.apply(10);
    }

    private <R> Function<Function<Integer, R>, R> thing2(final Integer val) {
        return fn1(i -> new Function<Function<Integer, R>, R>() {
                @Override
                public R apply(Function<Integer, R> op) {
                    return op.apply(val * i);
                }
            }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

目前此代码由于此行而无法编译 …

java generics lambda java-8

5
推荐指数
2
解决办法
6381
查看次数

现有db中混合内容节点上的范围索引

我的xml文件带有结构

<root>
    <compound>abc<parts>a b c</parts></compound>
    <compound>xyz<parts>x y z</parts></compound>
</root>
Run Code Online (Sandbox Code Playgroud)

我已经创建了一个范围索引

<range>
    <create qname="compound" type="xs:string"/>
</range>
Run Code Online (Sandbox Code Playgroud)

我期望索引术语是abca b c,xyzx y z但我发现abcxyz在监视和分析窗口中的索引链接下.还有搜索字符串

//compound[.="abca b c"] giving 0 results.
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助创建像化合物一样的全部内容的索引abca b c,xyz x y z等等.

谢谢

索尼

xquery exist-db

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