小编jok*_*oon的帖子

我想制作自己的源代码编辑器,有哪些好的选择?

我已经拥有了那些从未提供过如下简单内容的数十个编辑器:

  • 区分类型关键字和指令关键字,以便我可以在其上添加不同的颜色.
  • 使用像qt gtk等标准GUI库交叉平台(记事本++,是的,我几乎讨厌你).
  • 足够的键盘快捷键,如重复行,注释选择和体面的查找替换.
  • 体面的任务缓和功能,如单击数字线边距以选择整条线.
  • Scintilla或其他足够强大的词法分析器可以突出显示不同的东西,因为大脑编译代码是一回事,很快就会发现眼睛什么是我觉得重要的东西.

我只想支持非常基本的语言,如C,C++,也许是Python,而不是HTML或CSS.

Scintilla是一个很好的选择,只是突出这些语言,并且是一个真正必要的词法分析器吗?

QT不足以编写一个文本编辑器,比如我想做的那个吗?我知道有QScintilla,但是有一个原因我不应该使用集成词法分析器的lib吗?为什么Scintilla这么好的lib?

QT是这样一个编辑的好选择吗?(我也想在编辑器中硬嵌入ProFont以消除操作系统之间任何不情愿的字体问题).

编辑:简而言之,我想制作一个编辑器,只有与notepad ++相同的语法高亮功能.这是我的主要目标,使用QScintilla可能比我想象的要困难一些......

编辑2:我发现textadept,它不是那么知名,但是非常棒.我没有设法制作我的词法分析器,因为我在Windows下做了其他的事情,不幸的是它在mac上很慢.显然,mac没有任何Scite官方版本.

c++ qt scintilla notepad++ qtextedit

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

我不能直接在C++中返回列表初始化吗?

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)

c++ initializer-list

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

这段代码会使这些矢量对齐吗?

比方说我有:

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那些吗?

c++ stl alignment

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

如果 CPU 频率不增加,那么 CPU 对于非并行代码如何更快?

CPU 仍在“改进”,但在过去 10 年里它们的频率并没有提高很多。

我可以理解晶体管数量随着晶体管越来越小而增加,但我不明白如果频率降低,非并行程序(我认为大多数程序都是非并行的?)如何在新 CPU 上执行得更快不增加。

我可以理解为什么 GPU 使用更多晶体管可以更快,因为它们是并行处理器(这个术语正确吗?)并且它们只执行并行代码。

但大多数软件都是非并行的,所以对我来说,新的 CPU 似乎不会比以前的 CPU 快很多,除非大多数程序可以并行化,但事实并非如此(我不确定,但是可以并行化的典型算法是什么?不并行吗?)。

更大的 L1/L2/L3 缓存大小是否可以让新 CPU 更快?或者还有其他东西,例如新指令或分支东西?

我缺少什么?

parallel-processing cpu performance cpu-architecture

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

这段代码是不确定的行为?OS和堆怎么样?操作系统如何处理堆栈?

char * s;
s[400] = 'd';
Run Code Online (Sandbox Code Playgroud)

如果它不是未定义的行为,那么这是否意味着我不能随意访问堆栈外部RAM的任何部分?所以每次操作系统启动一个进程时,它都会分配一个RAM区域,我可以在那里做一些讨厌的东西(mallocs除外),因为操作系统会在进程完成后清理堆栈.

为什么操作系统在进程结束后无法清理堆?这是否意味着堆与所有其他进程共享?

如果我在堆栈中放入太多数据,那就是缓冲区溢出,但是我可以放入多少堆栈?是OS绑定,RAM大小绑定还是CPU缓存绑定?

c heap stack operating-system

0
推荐指数
1
解决办法
152
查看次数

是否有更适合CISC或RISC的算法或编程风格?

似乎两者都是出于各种原因使用,ARM用于功耗,x86用于扩展功能.

我仍然很好奇,因为我的计算机科学文化有点空洞,像x86(或其前辈)这样的CISC芯片的真正目的是什么.

如果他们使用RISC,我们的计算机会更好吗(例如,如果微软将其内核和工具链移植到RISC,如MIPS或ARM)?或者作为一项任务完成任务是不可能的?

我正在阅读CISC的目的是能够接近更高级别的语言,我觉得这很奇怪.英特尔和微软之间是否有交易专注于x86?

algorithm x86 arm processor mips

0
推荐指数
1
解决办法
152
查看次数