1

让我们举一个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 中实现。

我听说过“源代码就是文档”这样的老话,这根本不是现实。

4

1 回答 1

1

也许不完全是 MathType,但Mathematica及其 IDE 允许您使用所有这些花哨的数学符号执行符号编程。它的“继任者” Wolfram Language应该也能做到这一点,甚至更多。

唯一的问题是它相当昂贵。但是有一个 30 天的试用版,因此您可以检查这是否适合您的需要。

于 2014-10-17T07:35:32.613 回答