開源代碼的使用 二次開發

開源開發,就我的理解,有三種。

1、當作底層基礎,使用。例如大家使用mysql就算。有人會認為我說錯了。但我認為,開發不代表就是要同一個語言,甚至修改代碼。例如我們使用動態庫,原先的動態庫是什么寫的并不重要。重要的是作為自己的組成部分。你即便用mysql的接口甚至命令,去實現系統,也算是二次開發。

2、作為參考設計,這通常是在針對標準的實現上。這類代碼,本身最大的價值是作為一個對比版本,檢驗自身的代碼的正確性使用。如果都打算推倒重寫了,要么原先代碼很爛無法實用化,要么你的目標任務更明確,針對特定任務類型,你有更好的求解方式。

3、作為整體,局部修改,或引出新的分支。這類情況前者很常見,后者不常見。但通常更有意義的在于你的修改能符合規范并且納入版本中,因為一旦開源代碼的版本調整,而你只是修改而自行發布,這產生了統一和分裂的矛盾。主要功能希望統一,但代碼實現存在分裂。

針對上述三種不同的情況,對代碼的使用和學習分以下幾種方式:

1、代碼不看,或最多在實際應用中去局部理解,主要是為了更好的了解開源的底層是規模和情況,便于你的系統確定目標范圍。

2、代碼需要看,但以理解為主,主要是針對函數的目標進行理解,而不是針對函數內部實現進行理解。

3、這個比較痛苦,需要對函數內的代碼進行理解,特別是跨模塊(C文件作用域)的變量,函數的理解。

你要先搞清楚,你打算干什么才能針對目標進行不同模式的開源處理。

以上三種方式我都折騰過。但方法還是不太一樣。

?

對于第一種方式我就不說了,很簡單你去用就行了。如同你怎么學mysql就怎么來。下面說下后面兩種方法的不同。

舉例:

重寫代碼。我折騰過兩套系統(都是好幾年前的故事),1套是JM系列和X264系列,針對H264標準,而出的代碼,前者不算真正開源,后者算。另一套,是國家標準AVS,有個類JM的代碼。曾經罵JM的代碼有多爛,看了國家標準AVS的參考代碼,才知道什么叫學生水平(我甚至懷疑就是國內的普通沒有代碼設計能力的非專業程序員級別的研究生寫的)

這類開源的代碼理解,是通過輸入輸出數據,在運行態下,分析代碼。

另一類,是我目前在做的,對GIT的代碼的二次開發。但是這類,我暫且不會考慮對GIT的后續版本的統一問題。因為我的目標是多文件,多用戶權限的分布式版本管理系統的開發,而GIT對多權限貌似支持并不好。所以我也無法統一,這是沒有辦法的辦法。對這類的二次開發,確實比較痛苦,主要是針對獨立的行為的一一理解和分析 。

對代碼的理解,也是反復調整局部變量或結構,以判斷實際效果的方式來處理。理解代碼后,后續的工作是,逐步替換內部模塊,或者改變內部模塊的調用邏輯,來實現新的功能。

特別針對第三種的開發,個人建議不要重新列個工程,對已經識別和分析清楚的模塊整體轉入到新的工程中去。用我平時說的非常多的一句來形容,也就是說:

”不要嘗試用理想改變現實,盡可能的通過現實實現理想“


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451675.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451675.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451675.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java Application和Java Applet

Java Applet和Java Application 主要區別: (1)運行方式不同。Java Applet程序不能單獨運行,它必須依附于一個用HTML語言編寫的網頁并嵌入其中,通過與Java兼容的瀏覽器來控制執行。 Java Application是完整的程序&a…

激活prompt

1.下載SQLPrompt 2. 斷網, 打開注冊機,拷貝驗證碼 2. 點擊activate, 拷貝代碼 轉載于:https://www.cnblogs.com/zxhome/p/9459415.html

Map 四種獲取 key 和 value 值的方法,以及對 map 中的元素排序

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。1. 獲取map的值主要有四種方法,分為兩類: 調用 map.keySet() 方法來獲取 key 和 value 的值; 通…

三、【Map】

主要內容 Map集合 教學目標 能夠說出Map集合特點 使用Map集合添加方法保存數據 使用”鍵找值”的方式遍歷Map集合 使用”鍵值對”的方式遍歷Map集合 能夠使用HashMap存儲自定義鍵值對的數據 能夠使用HashMap編寫斗地主洗牌發牌案例 第一章 Map集合 1.1 概述 現實生活中&am…

五種開源協議的比較(BSD,Apache,GPL,LGPL,MIT) – 整理

當Adobe、Microsoft、Sun等一系列巨頭開始表現出對”開源”的青睞時,”開源”的時代即將到來! 最初來自:sinoprise.com/read.php?tid-662-page-e-fpage-1.html(遺憾的是這個鏈接已經打不開了),我基本未改…

[轉]自然語言處理中的Attention Model:是什么及為什么

自然語言處理中的Attention Model:是什么及為什么 https://blog.csdn.net/malefactor/article/details/50550211/* 版權聲明:可以任意轉載,轉載時請標明文章原始出處和作者信息 .*/ author: 張俊林 要是關注深度學習在自然語言處理方面…

關西旅游地名讀法學習

京都個人旅行ための自己勉強 京都篇 伏見稲荷大社「ふしみいなりだいしゃ」 京都府京都市伏見區深草にある神社。舊稱は稲荷神社 全國に約三萬社あるといわれる稲荷神社の総本社である。 初詣では近畿地方の社寺で最多の參拝者を集める。(日本第4位)。 清水寺 「き…

jsp頁面c標簽循環map , c:foreach 循環map

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 <c:forEach items"${customerMap}" var"item"> ${item.code} ${item.name} </c:forEach> map…

JSP上下文

上下文即ServletContext,是一個全局的儲存信息的空間&#xff0c;服務器啟動&#xff0c;其就存在&#xff0c;服務器關閉&#xff0c;其才釋放。所有用戶共用一個ServletContext。所以&#xff0c;為了節省空間&#xff0c;提高效率&#xff0c;ServletContext中&#xff0c;要…

python ERROR: Cannot uninstall ‘certifi‘.

解決方法 pip install xxx --ignore-installed certifigithub參考鏈接

HDU - 6383 百度之星2018初賽B 1004 p1m2(二分答案)

p1m2 Accepts: 1003Submissions: 4595Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Problem Description度度熊很喜歡數組&#xff01;&#xff01;我們稱一個整數數組為穩定的&#xff0c;若且唯若其同時符合以下兩個條件&#xff1a…

整合營銷推廣該如何做?

思維方式太重要了&#xff0c;如果你認為你的產品只是推廣出去就好&#xff0c;推廣就能有銷量的話&#xff0c;那你大錯特錯了。本文主要的分享給創業者和企業老板的&#xff0c;如果你想做好網絡營銷推廣&#xff0c;這篇文章不看是你的損失。 首先記住&#xff1a;推廣不等于…

如何使用git命令行上傳項目到github

參考文獻&#xff1a; 如何使用git命令行上傳項目到github 感謝樓主分享&#xff01;

優質的程序員需為代碼效率而嘔心瀝血

一個好的程序員必須要為自己寫出來的代碼執行效率負責。并非僅僅實現了功能代碼就完事了。很多工作一兩年的程序員都還僅是處于實現功能代碼為榮的階段&#xff0c;不會過多去思考如何提高代碼的執行效率。有的人認為是自己的能力就這樣&#xff0c;沒有多余的能力去思考這些額…

用gson得JSON,數值變為double類型 ,去掉double值中的小數位(3.0改為3)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 項目中有個接口的數據是從緩存中讀取再組成JSON 格式返出&#xff0c;原本緩存中數據是這樣的&#xff1a; 用Gson 組成JSON 后&…

Python中的join()函數的用法

函數&#xff1a;string.join()Python中有join()和os.path.join()兩個函數&#xff0c;具體作用如下&#xff1a; join()&#xff1a; 連接字符串數組。將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個新的字符串 os.path.join()&#xff1a; 將多個路…

利用微軟的平臺進行Office文檔的在線查看

微軟的預覽Office服務&#xff1a;1.在線查看&#xff1a;http://view.officeapps.live.com/op/view.aspx?src文檔地址 文檔地址用URLEncode進行處理的鏈接地址。 2.部署自己的Office預覽服務&#xff1a;需要安裝Office Web Apps服務&#xff08;系統要求為Windows Server 20…

38--合并兩個排序的鏈表

1.問題描述 輸入兩個遞增排序的鏈表&#xff0c;合并這兩個鏈表并使新鏈表中的節點仍然是遞增排序的。 實例&#xff1a; 輸入&#xff1a;1->2->4, 1->3->4 輸出&#xff1a;1->1->2->3->4->4 2.解決思路 /*** Definition for singly-linked lis…