小编Fer*_*cio的帖子

在JVM上运行/解释C?

有没有办法在JVM上运行普通的c代码?
不通过JNI连接,运行,就像你可以通过JRuby运行ruby代码,或通过Rhino运行javascript.

如果没有当前的解决方案,您会建议我应该做什么?
显然,我想尽可能多地使用部分解决方案来实现它.

ANTLR似乎是一个很好的起点,拥有完整的"ANSI C"语法实现......
我应该使用ANTLR生成的代码在JVM上构建一个"玩具"VM吗?

c java interpreter jvm antlr

24
推荐指数
5
解决办法
7186
查看次数

C++相当于Java

在Java中,您可以通过执行以下操作来引用当前对象:this.x = x.你是如何用C++做到的?

假设这些代码示例中的每一个都是被调用类的一部分Shape.

Java的:

public void setX(int x)
{
this.x = x;
}
Run Code Online (Sandbox Code Playgroud)

C++:

public:
void setX(int x)
{
//?
}
Run Code Online (Sandbox Code Playgroud)

c++ java this

24
推荐指数
2
解决办法
2万
查看次数

在顶部或底部测试循环?(而与之相比)

当我在大学(80年代中期)学习CS时,不断重复的一个想法是总是写出在顶部(而不是......)而不是在底部(做...同时)测试的循环.环.这些概念通常以对研究的参考作为后盾,这些研究表明,在顶部测试的循环在统计上比其底部测试对应物更可能是正确的.

结果,我几乎总是编写在顶部测试的循环.如果它在代码中引入了额外的复杂性,我不会这样做,但这种情况似乎很少见.我注意到一些程序员几乎专门编写在底部测试的循环.当我看到像这样的结构:

if (condition)
{
    do
    {
       ...
    } while (same condition);
}
Run Code Online (Sandbox Code Playgroud)

或者反过来(if在里面while),它让我想知道他们是否真的以这种方式编写它,或者if当他们意识到循环没有处理null情况时他们添加了语句.

我做了一些谷歌搜索,但没有找到任何关于这个主题的文献.你们(和女孩们)如何写你的循环?

language-agnostic loops while-loop do-while

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

什么是超递归算法?

我今天第一次遇到这个术语,维基百科的条目并没有真正告诉我:

在可计算性理论中,超递归算法是普通算法的推广,它更强大,即计算比图灵机更多.

algorithm

23
推荐指数
1
解决办法
7004
查看次数

Boost.format和宽字符

有没有办法让boost.format使用并返回宽(Unicode)字符串?

我希望能够做到这样的事情:

wcout << boost::format(L"...") % ...
Run Code Online (Sandbox Code Playgroud)

wstring s = boost::str(boost::format(L"...") % ...)
Run Code Online (Sandbox Code Playgroud)

这可能吗?

c++ format unicode boost

22
推荐指数
1
解决办法
7009
查看次数

有没有办法检查是否以二进制模式打开了一个istream?

我正在使用istream,它可以是stringstream,ifstream或用户定义的流类型,我需要知道,如果是ifstream,它是不是以二进制模式打开(所以我可以抛出异常).我尝试了以下方法:

if ((_is.flags() & ios::binary) == 0)
    throw exception(...)
Run Code Online (Sandbox Code Playgroud)

但是没有例外.在这种情况下测试失败,因为_is.flags()返回0x201而ios :: binary是0x20.有没有办法找出是否在文本模式下打开了流?

c++ iostream standard-library

19
推荐指数
2
解决办法
3945
查看次数

为什么我不能在while循环的测试部分中放置变量声明?

显然,您可以在for循环中放置变量声明:

for (int i = 0; ...
Run Code Online (Sandbox Code Playgroud)

而且我注意到你可以在if和switch语句中做同样的事情:

if ((int i = f()) != 0) ...

switch (int ch = stream.get()) ...
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在while循环中执行相同的操作时:

while ((int ch = stream.get()) != -1) ...
Run Code Online (Sandbox Code Playgroud)

编译器(VC++ 9.0)根本不喜欢它.

这是合规行为吗?有原因吗?

编辑:我发现我可以这样做:

while (int ch = stream.get() != -1) ...
Run Code Online (Sandbox Code Playgroud)

但由于优先规则,这被解释为:

while (int ch = (stream.get() != -1)) ...
Run Code Online (Sandbox Code Playgroud)

这不是我想要的.

c++

18
推荐指数
3
解决办法
2万
查看次数

是否有一个漂亮的python数据打印机?

以交互方式使用python,有时需要显示一些结果,这是一些任意复杂的数据结构(如带有嵌入列表的列表等).显示它们的默认方式只是一个大规模的线性转储,它只是一遍又一遍地包装你有仔细解析阅读它.

有什么东西可以采取任何python对象并以更合理的方式显示它.例如

[0, 1,
    [a, b, c],
    2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

代替:

[0, 1, [a, b, c], 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

我知道这不是一个很好的例子,但我认为你明白了.

python prettify

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

使用虚拟机编译(例如JVM)相对于本机编译语言有什么好处?

我听说java的优势在于人们可以编写代码,为JVM编译代码,并在任何地方运行代码.每个人只需要一个适用于他们平台的JVM应用程序.

当然,它看起来类似于当前的情况,每个人都有一个特定于他们平台的编译器.因此没有解释这个优点.但我认为我看到了解释..问题必须是在java情况下,你不能或不想以特定于操作系统的方式直接访问真机.

我想这意味着在其他语言中,代码本身必须根据运行的计算机进行修改.

任何人都可以提供一个简短的例子,就像一个演示这个的Hello World程序吗?毫无疑问,它将在非Java中,例如C.

因为它不是通常在Hello World程序中发生的事情,或者是我在java上使用过的书籍以来最常见的事情,所以不幸的是"如何编程"样式书,而且其中的所有内容都没有演示它(也许'他们不能或不想用java来演示它!).虽然他们大肆宣扬它是一个很大的优势.我想看看它的例子.

c java pascal qbasic

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

什么是.LFB .LBB .LBE .LVL .loc在编译器生成的汇编代码中

当我查看GCC生成的汇编代码时,有许多行开头.LBB和一个数字.似乎它们不是操作指令.更像是标记文件的内容或什么.

是什么.LFB,.LVL,LBB,LBE等是在编译器生成的汇编代码? .loc是否意味着"代码行".那些线条只是表明了symbol table吗?

这是一段代码,

main:
.LFB1:
  .loc 1 8 0
  .cfi_startproc
.LVL2:
.LBB4:
.LBB5:
  .loc 1 2 0
  movsd b(%rip), %xmm0
.LBE5:
.LBE4:
  .loc 1 10 0
  xorl  %eax, %eax
.LBB7:
.LBB6:
  .loc 1 2 0
  mulsd a(%rip), %xmm0
.LBE6:
.LBE7:
  .loc 1 9 0
  movsd %xmm0, a(%rip)
.LVL3:
  .loc 1 10 0
  ret
  .cfi_endproc
Run Code Online (Sandbox Code Playgroud)

c assembly gcc

15
推荐指数
2
解决办法
5018
查看次数