我知道在TI-BASIC中,惯例是尽可能地优化并保存尽可能多的位(这很有趣,我承认)。
例如,
DelVar Z
Prompt X
If X=0
Then
Disp "X is zero"
End //28 bytes
将被清理为
DelVar ZPrompt X
If not(X
"X is zero //20 bytes
但是这种方式优化代码实际上有所作为吗?它明显运行得更快还是节省了内存?
答案 0 :(得分:6)
是的。优化您的TI-Basic代码会产生重大影响,而且这种差异远大于您在大多数编程语言中所发现的差异。
在我看来,对TI-Basic程序最重要的优化是大小(使它们尽可能小)。这对我很重要,因为我的计算器上有几十个程序,只有24 kB的用户可访问的RAM。在这种情况下,花费大量时间来节省几个字节的空间并不是必需的。相反,我只是建议学习最短和最有效的方法,这样当你编写程序时,它们自然会变小。
此外, TI-Basic程序应针对速度进行优化。我头顶的例子包括带有未闭合For(
循环的怪癖,计算一次值而不是在循环的每次迭代中计算它(如果可能的话),并使用快速访问的变量,例如{{只要变量必须被访问很多次(例如1000 +),就可以得到财务变量。
第三种可能的优化是运行时内存使用。每个循环,函数调用等都具有必须存储在存储器堆栈中的开销,以便在程序执行期间返回到原始位置,计算值等。避免内存泄漏(例如使用Ans
打破循环)非常重要。
由您来决定如何平衡这些优化。我更喜欢:
答案 1 :(得分:3)
TI-BASIC
是一种解释型语言,通常意味着每次操作都会产生巨大的开销。
解释语言的工作方式是,不是将程序实际编译为直接在CPU上运行的代码,而是每个操作都是对解释器的函数调用,查看需要完成的操作,然后调用函数来完成这些操作。子任务。在大多数情况下,开销是速度的一个或两个因素,并且通常也在堆栈内存使用中。但是,非堆栈的内存通常是相同的。
在上面的示例中,您执行的操作数量完全相同,这意味着它们的运行速度完全相同。您应优化的内容包括i = i + 1
,这是i++
中的4个操作,即2个操作。 (例如,TI-BASIC
不支持++
运营商)。
这并不意味着所有操作都需要完全相同的时间,内部操作可能会调用数百个其他函数,或者它可能就像更新单个变量一样简单。解释器的程序员也可以实现各种窥视孔优化,以优化非常特定的语言结构,例如, for(int i = 0; i < count; i++)
可以作为一组昂贵的解释器函数来实现,这些函数的行为就好像i
是通用的,或者它可以优化到编译循环,只需要更新变量i
并重新评估count
。
现在,并非所有的解释语言都注定了这种苍白的存在。例如,JavaScript
曾经是一个,但是现在所有主要的js引擎JIT编译代码直接在CPU上运行。
更新:澄清并非所有操作都是平等的。
答案 2 :(得分:1)
当然,它有所不同。我为TI-84 + CSE编写了一个全尺寸彩色RPG,让我告诉你,在没有优化任何代码的情况下,游戏将无法运行。目前,在CSE上,Uvutu的Sorcery只能在其他所有程序都归档并且所有其他内存都没有RAM的情况下运行。程序和数据存储单独占用RAM中的20k字节,或者在所有可用用户内存下仅占1kb。在使用所有变量的情况下,内存接近危险的低点。我在开发过程中得到了积分,由于优化不佳,我甚至无法启动游戏而没有得到记忆全部消失了#34;错误。我计划实施各种额外的东西,但由于空间和速度问题,不可能这样做。这只是对太空的考虑。
在速度部门,游戏在世界上变得越来越慢。与其他游戏相比,在世界各地走来走去是非常缓慢的,这是因为我在该代码中必须做的事情;我必须检查碰撞,检查用户是否正在移动到新地图,检查他们是否按下了应该违反响应的密钥,检查是否应该继续进行战斗等等。我能够略微优化步行速度,但即便如此,我也可以公然告诉我已经做了改进。它仍然非常缓慢(至少与我所做的其他所有端口相比),但我让它更容易忍受。
总之,通过我自己制作大型项目的经验,我可以说在TI-Basic中,优化代码确实有所作为。其他答案提到了这一点,但TI-Basic是一种解释性语言。这意味着代码没有被编译成更快,更低级别的代码,但是你在程序中放入的东西在执行时直接读取,由解释器解释,调用子程序和其他需要的东西。执行命令,然后返回以读取下一行。因此,以及TI-84 +系列CPU Zilog Z80于1976年设计的事实,你会得到一个相当慢的翻译,特别是在这个时代。因此,您运行的命令越少,您越利用系统怪异,例如Ans是最快的变量,也可以容纳大多数类型的数据(整数/浮点数,字符串,列表,矩阵等),你将获得更好的表现。
资料来源:我自己的经历,记录在这里:https://codewalr.us/index.php?topic=778.msg27190#msg27190
TI-84 + CSE RAM编号来自此处:https://education.ti.com/en/products/calculators/graphing-calculators/ti-84-plus-c-se?category=specifications
有关Z80的信息来自此处:http://segaretro.org/Zilog_Z80