一.概括介绍鸿蒙操作系统
1.开发背景:总体来说有五个:①数字化的时代背景:数字化新时代的到来需要新的操作系统。②lot与5G:5G物联网时代的到来对操作系统提出了新的要求。③中国面临“卡脖子”的挑战:独立自主的研发操作系统是迫切的需求。④人工智能的兴起:AloT场景天然要求多设备智能协同,需要一个适用于各类机器的操作系统。⑤大数据与云计算:TB,PB级的大数据需要一个能够提供多机互联的操作系统。
2.需求:通过打造鸿蒙操作系统,华为要进一步巩固和扩大其智能手机的市场份额,要建立围绕智能手机的一个封闭生态系统,各个设备可以做到极简,顺滑的互通互联体验,这样,能够和华为手机相连接的产品就会很好卖。于是,消费者除了会买华为手机,还会买华为的路由表,手表,手环或者运行着海思芯片的其他周边产品。这是华为的商业目标。为了达到这个商业目标,华为需要一个新的操作系统,一个超越安卓的操作系统,于是鸿蒙出世。
3.开发历史:2012年,开始策划。2019年申请商标。2020年鸿蒙2.0版本现世。2021年鸿蒙正式上线。
4.应用场景:用于智慧屏、可穿戴设备等产品的鸿蒙操作系统将在更多产品类上使用。
5.发展趋势:鸿蒙OS不至于应用于PC系统,因为PC类型的系统的应用软件,与手机,智能汽车等还不太一样,适应方式不同,如果开发,难度相当于重新开发一个系统。除了手机之外,重点突破与智能汽车上。
二.关于鸿蒙操作套壳的争议
1.什么是创新?
创新的概念是人的创造性实践行为,这种实践可以实现利益总量的增加,需要对事物和原来的认识的利用再创造来实现,以形成新的物质形态。鸿蒙打破设备之间的藩篱,是消费者所期待的,能带来更高的效率,更好的体验。而多设备交互,是HarmonyOS的一大创新。有了它,内容流转更便捷,用户可以轻松操控多个设备,就如同操作一台设备一样简单。HarmonyOS全新的多设备控制中心,带来了简约直观的连接方式,手机、平板、电脑、音箱、耳机等一拉即合,方便用户控制多设备。全新的HarmonyOS,有很多创新。我们知道,手机用户都一个烦恼——我们的桌面APP太多,导致找应用麻烦,桌面凌乱。一些不常见的APP,甚至不知道放在什么位置。HarmonyOS让桌面简洁有序,用户通过上滑APP,即可生成万能卡片,呈现更丰富的信息。而且,卡片内容是实时更新的,扫一眼即可获取所需信息。
2.代码复用与创新关系:
美国实验室研究后表示,鸿蒙系统与安卓系统是两个完全独立的系统,鸿蒙系统也并不是拷贝的安卓系统,它采用的是一种新的系统流程,所以使用性能方面远远优于苹果的ios系统和安卓系统。而且鸿蒙系统是一款可以实现物联的智能操作系统,未来它的使用范围并不会局限于手机上,而是会放在更多的电子设备之上,不论是格力的空调还是小米的电视,或者是其他电子设备,都可以在匹配鸿蒙系统之后,带给用户更为方便快捷的智能操作体验,步入真正的万物互联时代。
三.代码风格分析
好的代码风格1:
1 def ceil32(x): 2 return x if x % 32 == 0 else x + 32 - (x % 32) 3 4 def isSymbolic(value): 5 return not isinstance(value, six.integer_types) 6 7 def isReal(value): 8 return isinstance(value, six.integer_types) 9 10 def isAllReal(*args): 11 for element in args: 12 if isSymbolic(element): 13 return False 14 return True 15 16 def to_symbolic(number): 17 if isReal(number): 18 return BitVecVal(number, 256) 19 return number 20 21 def to_unsigned(number): 22 if number < 0: 23 return number + 2**256 24 return number 25 26 def to_signed(number): 27 if number > 2**(256 - 1): 28 return (2**(256) - number) * (-1) 29 else: 30 return number 31 32 def check_sat(solver, pop_if_exception=True): 33 try: 34 ret = solver.check() 35 if ret == unknown: 36 raise Z3Exception(solver.reason_unknown()) 37 except Exception as e: 38 if pop_if_exception: 39 solver.pop() 40 raise e 41 return ret
分析:使用了驼峰命名法(Camel-Case),即第一个单词以小写字母开始;第二个单词的首字母大写或每一个单词的首字母都采用大写字母;且使用了易于理解的命名,让人见其形而知其意。
好的代码风格2:
1 def fetch_bigtable_rows(big_table, keys, other_silly_variable=None): 2 """Fetches rows from a Bigtable. 3 4 Retrieves rows pertaining to the given keys from the Table instance 5 represented by big_table. Silly things may happen if 6 other_silly_variable is not None. 7 8 Args: 9 big_table: An open Bigtable Table instance. 10 keys: A sequence of strings representing the key of each table row 11 to fetch. 12 other_silly_variable: Another optional variable, that has a much 13 longer name than the other args, and which does nothing. 14 15 Returns: 16 A dict mapping keys to the corresponding table row data 17 fetched. Each row is represented as a tuple of strings. For 18 example: 19 20 {'Serak': ('Rigel VII', 'Preparer'), 21 'Zim': ('Irk', 'Invader'), 22 'Lrrr': ('Omicron Persei 8', 'Emperor')} 23 24 If a key from the keys argument is missing from the dictionary, 25 then that row was not found in the table. 26 27 Raises: 28 IOError: An error occurred accessing the bigtable.Table object. 29 """ 30 pass
分析:Args:列出每个参数的名字, 并在名字后使用一个冒号和一个空格, 分隔对该参数的描述.如果描述太长超过了单行80字符,用2或者4个空格的悬挂缩进(与文件其他部分保持一致)。 描述应该包括所需的类型和含义, 如果一个函数接受*foo(可变长度参数列表)或者**bar (任意关键字参数), 应该详细列出*foo和**bar。 Returns:(或者 Yields: 用于生成器)描述返回值的类型和语义。 如果函数返回None, 这一部分可以省略。 Raises:列出与接口有关的所有异常。
好的代码风格3:
perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN
+ STAT_SIZE_PER_FRAM* sizeof( _UL );
act_task_table[frame_id * STAT_TASK_CHECK_NUMBER +index].occupied
= stat_poi[index].occupied;
分析:较长的语句(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。