我想以编程方式编辑python源代码.基本上我想读取一个.py文件,生成AST,然后写回修改过的python源代码(即另一个.py文件).
有一些方法可以使用标准的python模块解析/编译python源代码,例如ast或compiler.但是,我不认为它们中的任何一个都支持修改源代码的方法(例如删除此函数声明),然后回写修改python源代码.
更新:我想这样做的原因是我想为python 编写一个Mutation测试库,主要是通过删除语句/表达式,重新运行测试和查看什么中断.
我查看了http://referencesource.microsoft.com/上的源代码,看来所有源代码都在C#中.
我还查看了新的C#编译器平台(Roslyn)的源代码,它也在C#中.怎么可能?C#语言编译器是用C#编写的吗?还是我错过了一些明显的东西?如果C#编译器是用C#编写的,那么它是如何工作的?
编译器如何填充值char array[100] = {0};?它背后的魔力是什么?
我想知道内部编译器如何初始化.
使用反射器经历了一些框架类,并注意到许多方法和属性具有以下属性
[TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
Run Code Online (Sandbox Code Playgroud)
我很确定我在其他地方也看到了上述评论,从未跟进过.
有人可以告诉我这在C#和其他任何背景下意味着什么?
我找不到足够的信息来决定我应该使用哪个编译器来编译我的项目.模拟一个过程的不同计算机上有几个程序.在Linux上,我正在使用GCC.一切都很棒.我可以优化代码,它可以快速编译并使用不那么多的内存.
我用MSVC和GCC编译器做自己的基准测试.后来一个产生稍快的二进制文件(对于每个子体系结构).虽然编译时间远远超过MSVC.
所以我决定使用MinGW.但是在MinGW中找不到有关异常处理方法及其实现的任何解释.我可以为不同的操作系统和体系结构使用不同的发行版.
注意事项:
我有一个可以使用和不使用链接器标志的应用程序.但是,如果没有链接器标志,则在向视图添加数据时会出现非常不同的行为.
inline int factorial(int n)
{
if(!n) return 1;
else return n*factorial(n-1);
}
Run Code Online (Sandbox Code Playgroud)
在我阅读本文时,发现如果编译器没有正确处理上述代码会导致"无限编译".
编译器如何决定是否内联函数?
我最近尝试编译一个较旧的Xcode项目(曾经编译得很好),现在我看到了很多这种形式的错误:
error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter
导致这些错误的代码模式总是如下所示:
// Interface:
@property (retain) NSObject * someProperty;
// Implementation:
@synthesize someProperty; // to provide the getter
- (void)setSomeProperty:(NSObject *)newValue
{
//..
}
Run Code Online (Sandbox Code Playgroud)
我可以看到为什么会生成错误.我告诉编译器合成我的属性访问器(getter和setter),然后立即手动覆盖setter.那段代码总是闻到一点点气味.
那么,这样做的正确方法是什么?如果我使用@dynamic而不是@synthesize,我将不得不写入getter.这是唯一的方法吗?
在最近的一次采访中,我被问到一个非常奇怪的问题.面试官问我如何使用编译器功能计算1 + 2 + 3 + ... + 1000.这意味着我不允许编写程序并执行它,但我应该编写一个程序,可以驱动编译器在编译时计算这个总和,并在编译完成时打印结果.作为提示,他告诉我,我可能会使用编译器的泛型和预处理器功能.可以使用C++,C#或Java编译器.有任何想法吗???
这个问题与计算总和无关,这里没有任何循环问题.此外,应该注意,总和应该在编译期间计算.不能使用C++编译器指令打印结果.
阅读更多关于发布的答案,我发现在使用C++模板编译期间解决问题称为元编程.这是Erwin Unruh博士在标准化C++语言过程中偶然发现的一种技术.您可以在元编程的wiki页面上阅读有关此主题的更多信息.似乎可以使用Java注释在Java中编写程序.您可以在下面看看maress的答案.
关于C++的元编程一个很好的书是这一个.如果感兴趣,值得一看.
一个有用的C++元编程库是Boost的MPL 这个链接.
我使用gcc作为我的C编译器在Linux上工作很好但是想要一个Windows解决方案.有任何想法吗?我看过Bloodshed的Dev-C++,但寻找更多选择.