`
vyloy
  • 浏览: 80355 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

mudos解释器中lpc数组==操作的代码分析

阅读更多
void main()
{
    debug_message("%O","hello" == "hello");
    debug_message("%O",[1,2]==[1,2]);
}


这段lpc代码会输出什么呢?

我们先从字节码分析吧。

引用

STRINGS:
   0: a.c
   1: %O
   2: hello

0000: push string 1, string 2, string 2
0005: ==
0006: debug_message 2
0009: push string 1, number 1, number 2
000e: aggregate 2
0011: push number 1, number 2
0015: aggregate 2

0018: ==
0019: debug_message 2
001c: return_zero


红色的这四行先在栈顶上创建了两个数组。先push数字,再aggregate出数组
aggregate 对应的代码:
{
	array_t *v;

	LOAD_SHORT(offset, pc);
	offset += num_varargs;
	num_varargs = 0;
	v = allocate_empty_array( (int)offset);
	/*
	 * transfer svalues in reverse...popping stack as we go
	 */
	while (offset--) {
		v->item[offset] =  *sp--;
	}
	(++sp)->type = T_ARRAY;
	sp->u.arr = v;
}

num_varargs由F_EXPAND_VARARGS字节码来赋值,用于以下情况

int *i = [1,2];
int *j = [3,i...];

num_varargs就是1

至此两个数组已经创建出来了。
这与Java中的数组创建方式不一样。Java是先分配数组,再根据下标来给分配好的数组赋值。字节码多点,但粒度更细更灵活。
引用

  0: iconst_2
  1: newarray       int
  3: dup
  4: iconst_0
  5: bipush        10
  7: iastore
  8: dup
  9: iconst_1
10: bipush        20
12: iastore


接下来就是==字节码了。

void f_eq(){
……
case T_STRING:
	{
		if (SVALUE_STRLEN_DIFFERS(sp - 1, sp) )
		{
			i = 0;
		}
		else
		{
			i = !strcmp( (sp - 1)->u.string, sp->u.string);
		}
		free_string_svalue(sp--);
		free_string_svalue(sp);
		break;
	}
case T_ARRAY:
	{
		i = (sp - 1)->u.arr == sp->u.arr;
		free_array( (sp--)->u.arr);
		free_array(sp->u.arr);
		break;
	}
……
}


两个数组==比较,只是比较了地址。所以输出是1 0
但数组在lpc中比较地址,有什么意义呢?python是比较数组内容的,我觉得可以改善一下。

作者:翁志艺
分享到:
评论

相关推荐

    MudOS_vc2008工程代码

    1. "Mud Server":这个子目录可能包含了MudOS服务器的主要源码,包括主循环、网络处理、LPC解释器等核心模块。 2. LPC代码:除了C++实现,MudOS还包含大量LPC脚本,这些脚本定义了游戏逻辑和玩家交互。 3. 构建...

    Mudos源码_mudos下载_couplesqx_mudos源码_MudOS_

    4. **命令处理器**:Mudos通过命令来控制游戏,这部分代码处理玩家的输入,解析命令并执行相应的操作。 5. **游戏逻辑**:这是mudlib的主要职责,但在源码中可能也会包含一些基础的逻辑,如移动、战斗、交互等。 6...

    fluffos:主动维护的LPMUD驱动程序(LPC解释器,MudOS分支)

    FluffOS仅需很少的代码更改即可支持所有基于LPC的泥浆。 如果您目前仍在使用MudOS,则绝对是时候进行升级了!版本当前版本是v2019。 使用基于cmake的构建系统,它支持在Linux / OSX / Windows(WSL和msys2两者)上...

    fluffos-mudos-v22.02_fluffos下载_os_mudos源码_

    MUDOS,可以看作是“多用户命令解释器”,是早期操作系统中常见的命令行界面,类似于DOS或Unix的shell。在FluffOS中,MUDOS可能是用于用户交互和执行系统命令的核心组件。通过查看MUDOS的源码,我们可以学习到如何...

    MudOS学习教程

    MudOS(LPC)的教程,是学习mud开发的必备教程

    mudos 泥巴服务端

    在Mudos服务端中,开发者可以利用它的功能创建各种角色、物品、场景和事件,通过编写脚本语言实现复杂的交互逻辑。这种灵活性使得每个Mudos游戏都能拥有独特的世界观和游戏规则,极大地提升了玩家的参与度和沉浸感。...

    LPC基础教程

    LPC(Lars Pensjö C)是一种基于C语言的编程语言,主要用于Mudos游戏平台的开发。下面是LPC基础教程的知识点总结: 第一章:编程环境基本介绍 * UNIX基本结构:UNIX是一个多用户、多任务的操作系统,具有三级树状...

    mudos v21c2的帮助手册中文翻译版.

    mudos v21c2的帮助手册中文翻译版. 感谢作者翻译

    chm版的Mudos手册

    Mudos的efun手册,chm中文版,使用起来比较方便。

    Fading Summer mudlib for MudOS-开源

    对于新手开发者而言,这是一个学习LPC和了解MUD开发的绝佳平台,他们可以从源代码中学到实际的编程技巧,并有机会参与到实际项目的建设中。 在提供的压缩包文件列表中,"fadingsummer"可能包含了整个Fading Summer ...

    mudos:mudos 支持 epoll mongodb 64bit big int

    泥土2015 年 3 月 4 日: add redis support in packages/rd.c2012 年 7 月 14 日: add mongodb support in packages/mg.c , mongoc-v0.8.12012 年 7 月 7 日: change lpc int to long suport 64bit2011年初: add...

    CISTOMS MudOS mudlib-开源

    《CISTOMS MudOS Mudlib - 开源的LPC世界构建框架》 Mudlib,全称为MUD Library,是MUD(多用户地下城)游戏开发中的核心组件,它提供了一系列的游戏逻辑和功能接口,让开发者可以构建出丰富的虚拟世界。CISTOMS ...

    基于C++的Fluffos LPMUD驱动程序设计源码

    该项目是基于C++的多语言支持Fluffos LPMUD驱动程序设计源码,包含3835个文件,其中包括1109个Markdown文档、886个C...作为活跃维护的LPMUD驱动(LPC解释器,MudOS分支),该项目为LPMUD游戏服务器提供了强大的支持。

    很久以前的MUD游戏源码和mudos

    很久以前的MUD游戏源码和mudos,给需要和感兴趣的朋友

    服务器常用基本框架.docx

    MudOS还引入了一种名为LPC的脚本语言,用于定义游戏世界的各种元素,如房间布局、NPC和剧情,允许高级玩家通过修改脚本扩展游戏内容。 总结来说,对于弱交互游戏,简单的HTTP服务器配合加密机制可以满足需求,而...

    繁体中文MUD梦幻七域 fluffos v2017版

    【压缩包子文件的文件名称列表】"mudos-game-ds-master"可能是游戏的源代码仓库,其中的"mudos"可能与MUD游戏有关,"game-ds"可能代表“游戏数据”或者“游戏设计”,而"master"通常在版本控制中指代主分支,即包含...

    泥潭4withMySqlForWin32.rar

    5. **项目结构与命名约定**: "nitan4" 和 "nt3mudos" 可能是项目中的源代码目录或者可执行文件,了解项目的目录结构和命名规则有助于我们理解代码组织方式和模块划分。 6. **Windows API调用**: 由于项目是为...

    fluffos8.0

    "fluffos8.0" 是一个针对2015年发布的新版操作系统,它基于mudos技术,并且特别强调了对64位系统的全面支持。这个系统显然旨在提供更强大的计算性能和优化的资源管理,以适应现代计算机硬件的发展。在64位架构下,...

    服务器常用基本框架.doc

    3. **脚本语言**:MUDOS使用LPC(Living Programming Language)脚本语言来定义游戏世界的细节,包括房间布局、配置、NPC和剧情。 4. **动态扩展**:高级玩家(巫师)可以通过修改脚本来扩展和改进游戏内容,提供了...

    西游文字MUD.zip_ableaa9_mud游戏_skinkry_文字游戏_西游类mud

    6. **mudos.exe**:这是MUD游戏的主要执行文件,包含了游戏的服务器端代码,负责处理玩家的连接请求,管理游戏状态,以及与其他玩家的交互。 7. **readme**:通常包含游戏的使用说明、版权信息、开发者联系方式等...

Global site tag (gtag.js) - Google Analytics