一.概括介紹鴻蒙操作系統
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字符)要分成多行書寫,長表達式要在低優先級操作符處划分新行,操作符放在新行之首,划分出的新行要進行適當的縮進,使排版整齊,語句可讀。