有没有办法在JVM上运行普通的c代码?
不通过JNI连接,运行,就像你可以通过JRuby运行ruby代码,或通过Rhino运行javascript.
如果没有当前的解决方案,您会建议我应该做什么?
显然,我想尽可能多地使用部分解决方案来实现它.
ANTLR似乎是一个很好的起点,拥有完整的"ANSI C"语法实现......
我应该使用ANTLR生成的代码在JVM上构建一个"玩具"VM吗?
在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) 当我在大学(80年代中期)学习CS时,不断重复的一个想法是总是写出在顶部(而不是......)而不是在底部(做...同时)测试的循环.环.这些概念通常以对研究的参考作为后盾,这些研究表明,在顶部测试的循环在统计上比其底部测试对应物更可能是正确的.
结果,我几乎总是编写在顶部测试的循环.如果它在代码中引入了额外的复杂性,我不会这样做,但这种情况似乎很少见.我注意到一些程序员几乎专门编写在底部测试的循环.当我看到像这样的结构:
if (condition)
{
do
{
...
} while (same condition);
}
Run Code Online (Sandbox Code Playgroud)
或者反过来(if在里面while),它让我想知道他们是否真的以这种方式编写它,或者if当他们意识到循环没有处理null情况时他们添加了语句.
我做了一些谷歌搜索,但没有找到任何关于这个主题的文献.你们(和女孩们)如何写你的循环?
有没有办法让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)
这可能吗?
我正在使用istream,它可以是stringstream,ifstream或用户定义的流类型,我需要知道,如果是ifstream,它是不是以二进制模式打开(所以我可以抛出异常).我尝试了以下方法:
if ((_is.flags() & ios::binary) == 0)
throw exception(...)
Run Code Online (Sandbox Code Playgroud)
但是没有例外.在这种情况下测试失败,因为_is.flags()返回0x201而ios :: binary是0x20.有没有办法找出是否在文本模式下打开了流?
显然,您可以在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)
这不是我想要的.
以交互方式使用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)
我知道这不是一个很好的例子,但我认为你明白了.
我听说java的优势在于人们可以编写代码,为JVM编译代码,并在任何地方运行代码.每个人只需要一个适用于他们平台的JVM应用程序.
当然,它看起来类似于当前的情况,每个人都有一个特定于他们平台的编译器.因此没有解释这个优点.但我认为我看到了解释..问题必须是在java情况下,你不能或不想以特定于操作系统的方式直接访问真机.
我想这意味着在其他语言中,代码本身必须根据运行的计算机进行修改.
任何人都可以提供一个简短的例子,就像一个演示这个的Hello World程序吗?毫无疑问,它将在非Java中,例如C.
因为它不是通常在Hello World程序中发生的事情,或者是我在java上使用过的书籍以来最常见的事情,所以不幸的是"如何编程"样式书,而且其中的所有内容都没有演示它(也许'他们不能或不想用java来演示它!).虽然他们大肆宣扬它是一个很大的优势.我想看看它的例子.
当我查看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)