我已经拥有了那些从未提供过如下简单内容的数十个编辑器:
我只想支持非常基本的语言,如C,C++,也许是Python,而不是HTML或CSS.
Scintilla是一个很好的选择,只是突出这些语言,并且是一个真正必要的词法分析器吗?
QT不足以编写一个文本编辑器,比如我想做的那个吗?我知道有QScintilla,但是有一个原因我不应该使用集成词法分析器的lib吗?为什么Scintilla这么好的lib?
QT是这样一个编辑的好选择吗?(我也想在编辑器中硬嵌入ProFont以消除操作系统之间任何不情愿的字体问题).
编辑:简而言之,我想制作一个编辑器,只有与notepad ++相同的语法高亮功能.这是我的主要目标,使用QScintilla可能比我想象的要困难一些......
编辑2:我发现textadept,它不是那么知名,但是非常棒.我没有设法制作我的词法分析器,因为我在Windows下做了其他的事情,不幸的是它在mac上很慢.显然,mac没有任何Scite官方版本.
struct vec2{float x,y;};
Run Code Online (Sandbox Code Playgroud)
这将有效:
vec2* window(float h, float w)
{
vec2 ret[4] = {{w,h},{1-w,h},{1-w,1-h},{w,1-h}};
return ret;
}
Run Code Online (Sandbox Code Playgroud)
但这不会:
vec2* window(float h, float w)
{
return {{w,h},{1-w,h},{1-w,1-h},{w,1-h}};
}
Run Code Online (Sandbox Code Playgroud)
我猜这个错误来自于后者没有指定数组大小的事实,但我不知道我是否遗漏了一些东西......
我也尝试过:
return vec2[4]({{w,h},{1-w,h},{1-w,1-h},{w,1-h}});
Run Code Online (Sandbox Code Playgroud) 比方说我有:
vector<T *> vect;
Run Code Online (Sandbox Code Playgroud)
我知道这不是明显的方法,但我有一个API可以做到这一点,所以我不能决定使用它vector<T>.
所以当我把对象放进去的时候我会:
vect.push_back(new T);
Run Code Online (Sandbox Code Playgroud)
这段代码是否会确保此向量是连续对齐的,因为它是指针的向量?这个容器会决定new操作员的行为吗?
编辑:我还需要打电话给delete那些吗?
CPU 仍在“改进”,但在过去 10 年里它们的频率并没有提高很多。
我可以理解晶体管数量随着晶体管越来越小而增加,但我不明白如果频率降低,非并行程序(我认为大多数程序都是非并行的?)如何在新 CPU 上执行得更快不增加。
我可以理解为什么 GPU 使用更多晶体管可以更快,因为它们是并行处理器(这个术语正确吗?)并且它们只执行并行代码。
但大多数软件都是非并行的,所以对我来说,新的 CPU 似乎不会比以前的 CPU 快很多,除非大多数程序可以并行化,但事实并非如此(我不确定,但是可以并行化的典型算法是什么?不并行吗?)。
更大的 L1/L2/L3 缓存大小是否可以让新 CPU 更快?或者还有其他东西,例如新指令或分支东西?
我缺少什么?
char * s;
s[400] = 'd';
Run Code Online (Sandbox Code Playgroud)
如果它不是未定义的行为,那么这是否意味着我不能随意访问堆栈外部RAM的任何部分?所以每次操作系统启动一个进程时,它都会分配一个RAM区域,我可以在那里做一些讨厌的东西(mallocs除外),因为操作系统会在进程完成后清理堆栈.
为什么操作系统在进程结束后无法清理堆?这是否意味着堆与所有其他进程共享?
如果我在堆栈中放入太多数据,那就是缓冲区溢出,但是我可以放入多少堆栈?是OS绑定,RAM大小绑定还是CPU缓存绑定?
似乎两者都是出于各种原因使用,ARM用于功耗,x86用于扩展功能.
我仍然很好奇,因为我的计算机科学文化有点空洞,像x86(或其前辈)这样的CISC芯片的真正目的是什么.
如果他们使用RISC,我们的计算机会更好吗(例如,如果微软将其内核和工具链移植到RISC,如MIPS或ARM)?或者作为一项任务完成任务是不可能的?
我正在阅读CISC的目的是能够接近更高级别的语言,我觉得这很奇怪.英特尔和微软之间是否有交易专注于x86?