软件工程2021:第2次作业—— 谈谈鸿蒙操作系统

一、概述鸿蒙操作系统

  • 开发背景:

数字化新时代、5G物联网时代的到来,使我国迫切需要研发一个新的自主可控的操作系统,来实现多设备智能协同和万物互联。

  • 需求:

    1. 人工智能、大数据要求多设备智能协同,需要一个适用于各种智能设备(包括但远不止于手机)、能面向万物互联的全场景分布式操作系统。
    2. 多元化、复杂化、频发高发的网络安全威胁,要求操作系统足够安全可靠,从而能够保障全球信息安全。
    3. 新的操作系统要能够兼容安卓应用、适配性强并且操作逻辑类似,低延时、高性能、稳定流畅,从而保证用户体验。
  • 开发历史:

    • 2012年,任正非在“诺亚方舟实验室”专家座谈会上提出要做终端操作系统,目的是在操作系统“断粮”时做备份。
    • 2017年,鸿蒙OS内核1.0完成技术验证,逐步开展内核2.0研发。
    • 2018年,内核2.0应用于终端TEE。
    • 2019年,鸿蒙OS 1.0版本正式发布。
    • 2020年,升级至2.0版本,向电视、手表等设备开源。
    • 2021年,鸿蒙OS 2.0版本正式发布,开启大规模商用。
  • 应用场景:

“1+8+N”全景智慧战略:“1”:智能手机

“8”:PC(个人电脑)、平板、智慧屏、穿戴、AI音响、耳机、VR、车机

“N”:1、移动办公:投影仪、打印机之类;2、智能家居:摄像头、扫地机、插排之类;3、运动健康:智能体脂秤、血压计之类;4、影音娱乐:视频、游戏之类;5、智能出行:车辆信息、地图之类。

  • 发展趋势:

    华为和鸿蒙OS正在下一盘大棋,将进一步完善通讯能力和全场景生态战略,“超级终端”的分布式技术和原子化服务有望优化用户体验感,推动智能家居加速渗透,微内核设计提升系统适配性,模块化思路顺应万物互联时代需求。

二、关于鸿蒙是否套壳的争议

  • 什么是创新:

    创新一指创立或创造新的,二指首先。鸿蒙OS的创新在于它是面向场景式编程,而不是面向设备式编程,比如线上会议是一种场景,这个场景中可以有多个设备并且使用设备是不确定的,可以是手机也可以是耳机、音响、电视机等等,鸿蒙提供了一种设备探测机制,可以自动发现并根据偏好设置连接环境中的设备。而后者的开发需要确切地知道将用于什么设备,限制多且成本高。

  • 代码复用与创新的关系:

    鸿蒙OS的部分代码基于安卓开源项目ASOP而不是安卓系统,ASOP是谷歌联合多家企业共同发起的项目,华为也是重要贡献者之一,包括华为在内的任何机构和企业都可以使用和下载开源代码并基于开源项目做二次开发。鸿蒙OS虽然复用了开源的ASOP代码,但开发理念有所创新,它要用一个系统串联起所有智能设备,手机只是载体之一而非全部。我觉得如果要说套壳的话,这些企业都可以复用开源代码,而鸿蒙OS的终极目标不仅仅是为了与Android、iOS三分智能手机的天下,鸿蒙OS是面向万物互联的全场景操作系统,它将应用于所谓“1+8+N”全景,包括但不止于安卓系统现在所能应用的手机、平板,鸿蒙可以适用于各类智慧屏、AI音响、摄像头、体脂秤等,助力家电完成智能化升级,完成智能硬件之间的“智能联动”,成为AloT OS的先驱和主流OS“生态”,我认为这是一种打开了格局的创新。

三、代码风格分析

1.好的代码风格1:

    • 代码示例:

 1 int AuthConnRecv(int fd, char *buf, int offset, int count, int timeout)
 2 {
 3     if ((buf == NULL) || (offset < 0) || (count <= 0) || (offset + count <= 0)) {
 4         return -1;
 5     }
 6 
 7     return TcpRecvData(fd, buf + offset, count, timeout);
 8 }
 9 
10 bool ModuleUseCipherText(int module)
11 {
12     if (module >= MODULE_TRUST_ENGINE && module <= MODULE_HICHAIN_SYNC) {
13         return false;
14     }
15     if (module >= MODULE_AUTH_CHANNEL && module <= MODULE_AUTH_MSG) {
16         return false;
17     }
18     return true;
19 }
    • 分析:1、根据Google风格,条件语句倾向于不在圆括号内使用空格,关键字if另起一行。if和左圆括号之间有个空格,右圆括号和左大括号之间也要有个空格。2、逻辑或(||)操作符使用符号形式,不要用词语形式or。“||”两边合理插入圆括号,增强可读性。3、关系运算符前后恒有空格。4、多重if-else块里加空行可以加点可读性。

2.好的代码风格2:

    • 代码示例:
 1  if (isCipherText) {
 2         if (GetEncryptTransData(seqNum, str, data, dataLen, bufLen) != 0) {
 3             free(buf);
 4             return NULL;
 5         }
 6     } else {
 7         if (memcpy_s(data, dataLen, str, dataLen) != EOK) {
 8             free(buf);
 9             return NULL;
10         }
11         *bufLen = len;
12     }
    • 分析:1、如果if条件语句使用了else子句,简短的条件语句也不允许写在同一行,上述代码中另起一行了风格很好,不过这边Google风格是2空格缩进。2、复杂的条件或循环语句使用大括号,增强可读性。3、语句中某个if-else分支使用了大括号,其他分支也必须使用。

3.好的代码风格3:

    • 代码示例:

 1 DeviceInfo *info = BusGetLocalDeviceInfo();
 2     if (info == NULL) {
 3         return;
 4     }
 5     para->self_auth_id.length = strlen(info->deviceId);
 6     ret = memcpy_s(para->self_auth_id.auth_id, sizeof(para->self_auth_id.auth_id),
 7                    info->deviceId, strlen(info->deviceId));
 8     if (ret != EOK) {
 9         return;
10     }
    • 分析:1、line 6-7:函数调用时,一行超过80字符而显得过长时,可以在圆括号里对参数分行,每一行都要和第一次实参对齐,左圆括号后和右圆括号前不要留空格,参数的格式处理应当以可读性作为最重要的原则,尽可能精简行数。2、line 1:指针操作符(*)之后不能有空格,在声明指针变量或参数时,“*”与类型或变量名紧挨都可以。3、80字符行限制有助于避免代码可读性失控。

4.不好的代码风格1:

    • 代码示例:略。

    • 分析:1、就我看到的这部分代码而言,没有注释,而注释对代码的可读性至关重要,它可以描述类的功能用法、函数的功能用途、变量的含义用途等等。并且注释要言简意赅,不要拖沓冗余,可以有适当的缩进。2、垂直留白越少越好,函数体首尾不要留空行,函数体中也不要随意添加。

posted @ 2021-09-15 08:53  沙橘没糖了  阅读(303)  评论(0编辑  收藏  举报