是否有可能采用跨平台方式处理C或OCaml程序中的退格键和箭头键?
实际上,OCaml解决方案将受到赞赏,但许多标准的unix函数直接包装到相应的API调用,因此移植C解决方案应该没有问题.
我要实现的是捕获箭头键以覆盖它在shell中的行为(通过重新排序最后一行或类似这样的操作).我认为这件事落在实际程序之前并且它不是由代码本身处理的,所以我不知道它是否可能.
该程序在Linux,OS X和Windows(在cygwin上)编译,所以我想在所有平台上进行编译.
我有一些Java代码(使用Guava ImmutableList
类):
@Nonnull
public static <E extends Event> UserHistory<E> forUser(long id, E... events) {
List<E> list = ImmutableList.copyOf(events);
return new BasicUserHistory<E>(id, list);
}
Run Code Online (Sandbox Code Playgroud)
我得到了通常的堆污染警告,这种警告来自这样的方法.由于我的方法没有做任何修改events
,所以不能引入堆污染.但是,如果(因为擦除)此方法的客户端使用错误的events
数组调用它,它似乎可以通过自身传播堆解决方案.
如果我用它注释@SafeVarargs
,我仍然会收到警告(可以抑制@SuppressWarnings("varargs")
).但是阅读关于堆污染的Java文档,我对这个方法的正确注释集有点不清楚.
我也注意到,ImmutableList.copyOf
在没有标记为@SafeVarargs
(尽管这可能仅仅是一个兼容性问题),但是Arrays.asList
是.
所以,我的问题:@SafeVarargs
这个方法是一个合适的注释,因为它不会遇到一个ClassCastException
,但可能会将一个不正确检查的数组传播到最终的参数化类型并允许一个ClastCastException
客户端代码?
我相信,基于这个答案,它是安全的,因为代码不会做任何取决于events
它自身类型的东西,只取决于它的元素类型.这是指导的正确应用吗?
作为我的程序的常规静态分析的一部分,我想检查类可能有合理的toString()
方法.可能不是每个类都实现它们,但也许没有可实例化的具体类使用它Object
的实现toString()
.
是否有一个lint工具包来检查这个?我目前使用的是FindBugs和CheckStyle; 我还没有找到一种明显的方法来检查其中任何一种.我也在考虑将PMD添加到我的lint套件中,并且也可以在Sonar中使用它.所以我更喜欢使用工具箱中已有的工具来做,但如果我需要添加另一个工具,我会考虑它.
我在编组数据结构时失败(错误抽象类型(自定义)).有一种已知的抽象类型,即Big_int.然而那个法警很好.应用程序中没有自定义C代码.除了Nums之外,还使用了Unix库(但我不相信有任何类型的活动对象).我们是关闭闭锁的元帅.
正在使用两个(仅)第三方库:OCS Scheme(Scheme解释器,纯Ocaml)和Dypgen(可扩展GLR解析器,也是纯Ocaml).问题在于Dypgen的一个新功能,它保存了一个动态扩展的解析器.
Ocaml错误消息旁边是无用的(它不能识别哪个抽象类型与Custom标签是罪魁祸首).
我们怀疑Lexbuf是罪魁祸首,因为它包含一个Ocaml通道上的封闭,并且不能被元帅,但似乎这不是问题所在.所以我的问题是:
哪个标准库组件不能马歇尔?
我正在寻找一种简单的跨平台方式,在JVM上获取用于存储应用程序设置和缓存数据的相应目录.例如,在Linux下的XDG规范:
~/.config/appname
~/.cache/appname
Windows的东西进入C\Users\user\Application Data
或某些(在Win 7上); 我认为Mac把东西放进去了~/Library/Application Settings
.
是否有跨平台调用来获取这些路径位置?我找不到一个,虽然我发现了几个问题.是否有一些库为大多数常见桌面平台实现了正确的逻辑?
最糟糕的情况是,我可以抬起头来user.home
假装一切都是基于XDG的Linux环境.但是,如果很容易为用户的操作系统获取正确的目录,我想这样做.
我在C语言方面的经验比在高级语言方面要差得多.在Cisco,我们使用C,有时我会遇到一些在Java或Python中很容易做到的事情,但在C中很难做到.现在就是其中之一.
我有一个动态分配的无符号整数数组,我需要转换为逗号分隔的字符串进行日志记录.虽然整数不太可能非常大,但它们在概念上可能是0到4,294,967,295在Python中,这只是一条短线.
my_str = ','.join(my_list)
Run Code Online (Sandbox Code Playgroud)
人们在C中做到这一点有多优雅?我提出了一种方法,但这很糟糕.如果有人知道这样做的好方法,请赐教.
我正在使用FFI针对具有强大所有权概念的C API编写一些Rust代码(libnotmuch API,如果这很重要).
API的主要入口点是数据库; 我可以从数据库创建Query对象.它为数据库和查询(以及许多其他对象)提供析构函数.
但是,Query不能比创建它的数据库寿命更长.数据库析构函数将销毁任何未销毁的查询等,之后查询析构函数不起作用.
到目前为止,我已经完成了基本的工作 - 我可以创建数据库和查询,并对它们进行操作.但是我在编码生命周期边界时遇到了困难.
我正在尝试做这样的事情:
struct Db<'a>(...) // newtype wrapping an opaque DB pointer
struct Query<'a>(...) // newtype wrapping an opaque query pointer
Run Code Online (Sandbox Code Playgroud)
我Drop
为每个调用底层C析构函数的实现.
然后有一个创建查询的函数:
pub fun create_query<?>(db: &Db<?>, query_string: &str) -> Query<?>
Run Code Online (Sandbox Code Playgroud)
我不知道应该用什么代替?
s,以便返回的Query不允许比Db更长.
如何为此API建模生命周期约束?
考虑到代码:
someList.forEach(x -> System.out.format("element %s", x));
Run Code Online (Sandbox Code Playgroud)
从理论上讲,应该可以通过首先内联forEach
方法,然后在内联forEach
代码中内联lambda函数体来内联此代码并消除间接函数调用.
HotSpot能够执行此优化吗?在特定情况下是否执行了哪些限制?
当使用SERIALIZABLE
事务来实现仅在数据库不存在的情况下将值插入到数据库中的模式时,我观察到 MySQL 和 PostgreSQL 在SERIALIZABLE
隔离级别的定义中存在显着差异。
考虑下表:
CREATE TABLE person (
person_id INTEGER PRIMARY KEY AUTO_INCREMENT,
name VARCHAR NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
以及以下插入代码,在两个连接上同时运行:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
START TRANSACTION;
SELECT person_id FROM person WHERE name = 'Bob Ross';
-- sync point: both transactions should run through here before proceeding to
-- demonstrate the effect
-- 0 results, so we will insert
INSERT INTO person (name) VALUES ('Bob Ross');
SELECT last_insert_id();
COMMIT;
Run Code Online (Sandbox Code Playgroud)
在 PostgreSQL 中(经过适当的 SQL 翻译后),效果如我所料:只有一个事务可以成功提交。这与我对 PostgreSQL …
我正在尝试使用Conda为项目(LensKit)设置构建和测试环境,并且需要具有特定于平台的依赖项.具体而言,在Linux上构建我需要libgfortran
和openssl
,但Windows.
有没有一种方法可以environment.yml
说明我需要libgfortran
但只能在32位和64位Linux平台上?或者我是否需要单独的环境定义来涵盖这种情况?
我看到的另一个可能的解决方案是创建一个虚拟包并将其发布到http://anaconda.org,这取决于每个平台所需的基础包,并要求包中environment.yml
.
java ×4
c ×2
ocaml ×2
checkstyle ×1
conda ×1
desktop ×1
findbugs ×1
hotspot ×1
input ×1
jvm ×1
lifetime ×1
marshalling ×1
mysql ×1
optimization ×1
pmd ×1
postgresql ×1
python ×1
rust ×1
settings ×1
sql ×1
standards ×1
stdin ×1
string ×1
terminal ×1
type-safety ×1