让我们举一个Java的例子。富文本IDE暂时没有找到,纯文本IDE是主流。
我在 IDE 中使用来自 github 的代码阅读了很多次 Latex 公式,如果没有任何类似 TeX 的软件的帮助,很难理解这些符号。
我只是在设想这样一个IDE的诞生,它可以集成Word、OneNote等,像class这样的代码可以高亮,像图片一样复制粘贴,像plain/rich html一样编辑,多媒体对象可以作为解释,就像matlab helper 不是普通的javadoc,可以一次比较一个文件的多列中的2个或多个类,是Java类层次结构的一个很好的视图,就像OneNote可以做的那样,这样我就可以摆脱代码只能在纯文本编辑器中写入一列的限制。坦率地说,OneNote 不是 IDE,而是真正的富文本 IDE 原型,它包含了编写/订购诸如代码之类的东西但运行代码的所有直观性,但是,这些功能就像专利一样,只能在 OneNote 中看到, 并且在任何著名或较少的编程环境中都找不到。我不禁回想起,从历史上看,铁轨宽度的发展限制了想象力的大小,每次使用 OneNote 时都会在我的脑海中重复。
更重要的是,虽然很多 IDE 都包含高亮语法,但它仍然是纯文本代码,只需删除解释区域就可以非常快速地从富文本代码生成。
Mathtype-like 公式比纯文本 IDE 中的 plan-text 公式要好得多,我可以通过将代码和公式粘贴在一起在 OneNote 中感受到这一点,尤其是当它是分数或生根公式时。可惜,公式不能直接运行。实际上,它们可以从相同的格式生成,即类似 xml 的富文本。
我刚刚在 Unicode 网站的一个 PDF 文件中发现了一段有趣的这样的代码,它更能捕捉到程序函数的真实功能:
void IHBMWM(void)
{
gammap = gamma*sqrt(1 + I2);
upsilon = cmplx(gamma+gamma1, Delta);
alphainc = alpha0*(1-(gamma*gamma*I2/gammap)/(gammap + upsilon));
if (!gamma1 && fabs(Delta*T1) < 0.01)
alphacoh = -half*alpha0*I2*pow(gamma/gammap, 3);
else
{
Gamma = 1/T1 + gamma1;
I2sF = (I2/T1)/cmplx(Gamma, Delta);
betap2 = upsilon*(upsilon + gamma*I2sF);
beta = sqrt(betap2);
alphacoh = 0.5*gamma*alpha0*(I2sF*(gamma + upsilon)/(gammap*gammap – betap2))*((1+gamma/beta)*(beta – upsilon)/(beta + upsilon)- (1+gamma/gammap)*(gammap – upsilon)/(gammap + upsilon));
}
alpha1 = alphainc + alphacoh;
}
void IHBMWM(void)
{
= • (1 + 2);
= + 1 + • Δ ;
_inc = 0 • (1 − ( • • 2/ ’ )/( ’ + ));
if (! 1|| fabs(Δ • 1) < 0.01)
_coh = − .5 • 0 • 2 • pow( / ’ , 3);
else
{
= 1/ 1+ 1;
2ℱ = ( 2/ 1)/(Γ + • Δ );
2= • ( + • 2ℱ );
= 2;
coh= .5 • • 0 • ( 2ℱ ( + )/( ’ • ’ − 2))× ((1 + / ) • ( − )/( + ) − (1 + / ’ ) • ( ’ − )/( ’ + ));
}
1= inc+ coh;
}
上面两个的长度明显比第三个长。
如果您看不到图片中的第 3 个,请在此处访问原始 Pdf,从第 33 页到第 35 页。
一个小问题是,这样的纯文本编程习惯,在这样的IDE出现之后,还应该被认为是好的习惯吗?高级编程语言坚持这种偏见,即满足于纯文本编码,而助手是多媒体。变体/常量都是类似 ASCII 的,而 Unicode 集只是部分支持。而且它在类似 Mathtype 的公式中非常适合在大脑中阅读和使用,而在 IDE 中不可能像我们在教科书中读到的那样下标索引,而像 Java 这样的编程语言仍然需要括号。
最后一个问题是,是否存在这样一种可以运行类似 Mathtype 的公式或类似 Math 的代码的 IDE 或编程语言?
PS:我知道Mathtype公式中的执行顺序在循环存在时会导致效率低下,但是,这不是问题,作为程序员,我可以手动将这些多项式分成片段并添加到循环中,但是机器可以方便他们也是。
PS2:Mathematica 非常适合科学界的数学研究人员,尽管它的价格很高。我尝试下载并使用它,我真的被它简洁的界面和符号系统所吸引,例如可以用更少的行数来实现许多游戏,并且助手非常人性化和智能,就像输入法一样!并且助手还能够运行代码,这对于这一代和下一代学习编程来说是一个明确的改进,也许不仅仅是 Mathematica 语言。
首先,Mathematica 中的“笔记本”概念是我目前能找到的终极代码编辑器,它可以在表示算法中使用类似 Mathtype 的组件,将这样的概念应用到其他编程语言或其普通语言中非常有价值文本 IDE,因为 Mathematica 有其自身的限制,例如缺乏其他语言中的某些现有功能,这也很重要。
不禁回想起上个世纪在windows或linux中进行命令行编程的传统方式,和现在的纯文本IDE编程没有太大区别。顺便说一句,Mathematica 工作台是 Eclipse IDE 的一个指定版本,它只是不能以 Mathematica“笔记本”的方式进行编码,现在真可惜。
阅读别人的代码比写代码要困难得多,尤其是算法,如果没有办法在富文本 IDE 中只显示类似 Mathtype 的符号,我写的代码将来对我和其他人来说都很难阅读就像 Mathematica 可以做的那样,运行 Symbols 是另一回事。
其次,即使在“Notebook”中,组件也不能以 OneNote 的方式自由排列,宽度为无穷大意味着 OneNote 中真正的无穷大,您可以将任何内容粘贴到远离第一列的右侧,填充任何内容,例如富文本在 OneNote 中,可以使用水平滚动条查看。此功能的明显好处是可以无限比较来自同一父类或算法变体的 2 个或多个代码,我想它对版本控制也很有用,就像在 BeyondCompare 中连续滚动水平比较 10 个文件而没有垂直滚动条除了最后一个之外,每个都像一个 1*N 的类矩阵,而不是一列。
也许几年后,我提到的那些功能也可以在 Mathematica 中实现。
我听说过“源代码就是文档”这样的老话,这根本不是现实。