首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TI-BASIC中的优化代码实际上有什么区别吗?

TI-BASIC中的优化代码实际上有什么区别吗?
EN

Stack Overflow用户
提问于 2016-10-11 23:53:23
回答 4查看 434关注 0票数 4

我知道在TI-BASIC中,惯例是痴迷地进行优化,尽可能地节省比特(我承认这很有趣)。

例如,

代码语言:javascript
复制
DelVar Z
Prompt X
If X=0
Then
    Disp "X is zero"
End                   //28 bytes

会被清理成

代码语言:javascript
复制
DelVar ZPrompt X
If not(X
    "X is zero        //20 bytes

但是,以这种方式优化代码真的会产生影响吗?它是运行得更快,还是节省了内存?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-10-12 14:38:35

是的。优化了TI-Basic代码,这种差异比大多数编程语言要大得多。

在我看来,TI-Basic程序最重要的优化是size (使它们尽可能小)。这对我来说很重要,因为我的计算器上有几十个程序,只有24 kB的用户可访问内存。在这种情况下,没有必要花费大量的时间试图节省几个字节的空间;相反,我只是建议学习最短和最有效的方法来做事情,这样当你编写程序时,它们自然会变得很小。

另外,TI-Basic程序应该为速度进行优化.我头上的例子包括不闭合的For(循环的奇怪之处,计算一个值一次,而不是在循环的每一次迭代中计算它(如果可能的话),并在必须访问变量的时候使用快速访问的变量,如Ans和财务变量(例如1000+)。

第三个可能的优化是运行时内存使用。每个循环、函数调用等都有一个开销,必须存储在内存堆栈中,以便在程序执行期间返回到原来的位置、计算值等。避免内存泄漏(例如用Goto中断循环)是很重要的。

如何平衡这些优化是由您自己决定的。我更喜欢:

  1. 首先,确保我的程序中没有内存泄漏或嵌套不正确的循环。
  2. 利用对程序速度影响很小或没有影响的任何大小优化。
  3. 考虑速度优化,并决定所增加的速度是否值得增加程序大小。
票数 7
EN

Stack Overflow用户

发布于 2016-10-12 02:59:09

TI-BASIC是一种解释语言,这通常意味着每一个操作都有巨大的开销。

解释语言的工作方式是,不是将程序编译成直接在CPU上运行的代码,而是对解释器进行函数调用,以查看需要做什么,然后调用函数来完成这些子任务。在大多数情况下,开销是速度上的一两个因素,而且通常也是堆栈内存使用的一个因素。但是,非堆栈的内存通常是相同的。

在上面的示例中,您执行的操作数量完全相同,这应该意味着它们运行的速度一样快。您应该优化的是像i = i + 1这样的东西,它将4个操作转化为i++,后者是2个操作。(例如,TI-BASIC不支持++操作符)。

这并不意味着所有操作都占用完全相同的时间,在内部,一个操作可能调用数百个其他函数,或者它可能像更新单个变量一样简单。解释器的程序员也可能实现了各种优化特定语言结构的窥视孔优化,例如,for(int i = 0; i < count; i++)既可以实现为代价高昂的解释器函数的集合,这些功能表现为i是泛型的,也可以优化为编译后的循环,其中只需更新变量i并重新计算count

现在,并不是所有被解释的语言都注定要面对这种苍白的存在。例如,JavaScript曾经是一个,但是现在所有主要的js引擎JIT都编译代码以直接在CPU上运行。

更新:澄清并非所有操作都是平等创建的。

票数 4
EN

Stack Overflow用户

发布于 2017-09-19 14:00:54

当然,这很重要。我为TI-84+CSE编写了一个全尺寸的彩色RPG,让我告诉你,如果不优化我的代码,游戏就不会运行。目前,在CSE上,Uvutu的魔法只能在所有其他程序存档并且所有其他内存都没有RAM的情况下才能运行。仅程序和数据存储就占内存中的20k字节,在所有可用用户内存中仅占1kb。随着所有变量的使用,内存接近危险的低点。在我的开发中,由于糟糕的优化,我甚至无法在没有“记忆全部消失”错误的情况下开始游戏。我有计划实现各种额外的东西,但由于空间和速度的考虑,这是不可能这样做。这只是对太空的考虑。

在速度部门,游戏变得,现在仍然是,缓慢的在阴间。与其他游戏相比,在阴间行走的速度慢得令人痛苦,这是因为我必须在代码中做些什么;我必须检查冲突,检查用户是否正在移动到新地图,检查他们是否按下了一个应该非法响应的键,检查是否应该继续战斗,等等。我能够稍微优化步行速度,但即便如此,我也能明显地看出我已经有所改善。它仍然非常缓慢(至少与我所做的每一个其他端口相比),但我使它更容易忍受。

总之,通过我自己制作一个大型项目的经验,我可以说,在TI-Basic中,优化代码确实起到了作用。其他答案提到了这一点,但TI-Basic是一种解释语言。这意味着代码不会编译成更快、更低层次的代码,但是在程序中放入的内容会在执行过程中直接读取,由解释器解释,调用执行命令所需的子程序和其他东西,然后返回读取下一行。由于这一点,以及TI-84+系列CPU Zilog Z80于1976年设计的事实,您将得到一个相当慢的解释器,特别是在当今时代。因此,运行的命令越少,并且越多地利用系统的奇异性,比如Ans是保存最多类型数据(整数/浮点数、字符串、列表、矩阵等)的最快变量,那么性能就会越好。

资料来源:我自己的经历,记录在这里:https://codewalr.us/index.php?topic=778.msg27190#msg27190

TI-84+CSE内存号来自这里:https://education.ti.com/en/products/calculators/graphing-calculators/ti-84-plus-c-se?category=specifications

有关Z80的信息来自于这里:Z80

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39988504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档