Ⅰ 作為程序員的你,常用的軟體有哪些
這個就非常多了,下面我以常見的編程開發軟體和資料庫管理軟體為例,簡單介紹幾種,感興趣的朋友可以嘗試一下:
01 編程開發軟體這個要看具體編程語言了,不同語言開發工具自然不同,這里以常見的C/C++、java和python為例,簡單介紹3種比較常用的軟體:
這是Windows平台下一個非常專業的集成開發工具,號稱宇宙第一IDE環境,不僅僅只是C/C++,常見的C#、VB等編程語言,這個軟體都能很好支持,智能補全、代碼高亮、語法檢查等功能非常不錯,除此之外,還支持單元測試、代碼重構和分析等高級功能,因此非常適合大型項目開發和維護:
這是一個非常專業智能的Java開發工具,在企業和個人桌面中,有著非常高的使用率和歡迎度,自動補全、語法提示、代碼高亮等功能非常不錯,除此之外,還支持JUnit、CVS整合、代碼重構等高級功能,自帶有Maven和Gradle構建工具,因此更適合Java項目開發和維護,個人使用起來非常不錯:
這是一個非常專業的Python開發軟體,和IntelliJ IDEA一樣,Jetbrains公司的產品,在業界非常流行、受歡迎,智能補全、代碼高亮、語法提示等功能非常不錯,除此之外,還支持代碼重構和分析、單元測試等高級功能,因此更適合大型項目,個人使用來說,也非常簡單,很容易上手和掌握:
02 資料庫管理軟體
這個就非常多了,不同資料庫都有專門的管理軟體和工具,這里簡單介紹3個比較通用的資料庫管理軟體,分別是HeidiSQL、DBeaver和DataGrip,對於日常使用來說,非常不錯:
這是Windows平台下一個非常輕巧靈活的資料庫管理軟體,基於Delphi開發而來,目前支持MySQL、MariaDB、MSSQL、PostgreSQL等主流資料庫,常見的建庫建表、視圖索引、觸發器等基本功能,這個軟體都能很好兼容,除此之外,還支持SQL腳本導入導出、數據備份恢復等功能,對於日常資料庫管理來說,非常不錯:
這是一個基於Java開發的資料庫管理軟體,免費、開源、跨平台,目前支持Oracle、MySQL、PostgreSQL、SQL Server等十幾種主流資料庫開發,建庫建表、視圖索引、觸發器、存儲過程等基本功能 都 可輕松查看和設計,資料庫導入導出、數據 恢復 備份等功能也都非常不錯,對於日常資料庫管理和維護來說,是一個非常不錯的工具:
這也是一個通用的資料庫管理軟體,Jetbrains公司的產品,支持跨平台,但原則上針對個人不免費,常見的PostgreSQL、MySQL、Oracle等資料庫,這個軟體都能很好支持, 數據導入導出( 恢復備份 )、 智能代碼填充、版本 集成 控制等功能非常不錯,對於日常資料庫管理來說,也是一個不錯的工具:
每天常用開發工具:
0.Git:分布式版本控制系統;
1.IntelliJ IDEA:java語言開發的集成環境,IntelliJ在業界被公認為最好的java開發工具之一;
2.Sublime Text:不只是代碼編輯器;
3.Postman:Http請求模擬工具和功能強大的網頁調試工具;
4.DataGrip:支持幾乎所有主流的關系資料庫、多功能的資料庫操作工具;
5.Vagrant:用於創建和部署虛擬化開發環境,配合虛擬機使用;
6.Gradle:自動化構建工具;
7.JIRA:項目與事務跟蹤工具;
8.iTerm2:Mac上的終端工具;
9.Jenkins:持續集成工具。
做了一個寫代碼用了十幾年的人,很多編程的習慣已經養成了,現在就羅列下每天必用的軟體:
直接安裝的linux系統,因為幾乎所有的代碼都是在linux下完成
不同的開發語言,每天要用到的軟體可能不一樣。
我是開發java web的,電腦安裝了很多工具,但是說每天要用到的好像就幾個。
作為程序員使用最多的軟體,莫過於編程開發所用到的軟體編輯器,但是編輯器的種類有很多。我們需要做到的是,找到你最喜歡的編輯器然後熟練的使用它。
同時掌握常見的一些快捷鍵的操作方式,從而來提升我們的工作效率,而不是以軟體而論軟體,什麼都去接觸使用。畢竟軟體是工具是幫助我們提升開發效率。
下面我就列舉我們PHP經常使用的軟體
IDE工具類軟體這一類是開發軟體編寫代碼用的。這一類的軟體非常多,我就推薦一個經常使用的PHPStorm,因為太多的話大家也用不到,也沒有那麼多的精力去熟練每一個編輯器。
PHPStorm是 JetBrains 公司開發的一款商業的 PHP 集成開發工具,旨在提高用戶效率,可深刻理解用戶的編碼,提供智能代碼補全,快速導航以及即時錯誤檢查。可以說是PHP開發程序員必備的神器。
常用快捷鍵如下:
1.復制快捷方式
F5 復制文件/文件夾
CTRL+C 復制
CTRL+V 粘貼
CTRL+X 剪 切,刪除行
CTRL+D 復制行
CTRL+SHIFT+V 可以復制多個文本
2.自動代碼
ALT+回車 導入包,自動修正
CTRL+ALT+L 格式化代
碼CTRL+ALT+I 自動縮進
CTRL+ALT+O 優化導入的類和包
CTRL+SHIFT+SPACE 切換窗口
CTRL+SPACE空格 代碼自動完成,代碼提示,一般與輸入法沖突
CTRL+ALT+SPACE 類 名或介面名提示(與系統沖突)
CTRL+P 方法參數提示,顯示默認參數
CTRL+J 自動代碼提示,自動補全
CTRL+ALT+T 把選中的代碼放在 TRY{} IF{} ELSE{} 里ALT+INSERT 生成代碼(如GET,SET方法,構造函數等)
3.運行
Alt + Shift + F10 選擇的配置和運行
Alt + Shift + F9 選擇配置和調試
Shift + F10 運行
Shift + F9調試
Ctrl + Shift + F10運行范圍內配置編輯器
Ctrl + Shift + X運行命令行
4.其他快捷方式
CTRL+Z 倒退(代碼後悔)
CTRL+SHIFT+Z 向前
CTRL+H 顯 示類結構圖
Ctrl +F12 文件結構彈出
CTRL+O 魔術方法
CTRL+/ 注釋//取消注釋
CTRL+SHIFT+/ 注釋/*...*/
ctrl + '.': 折疊選中的代碼的代碼
ALT+ / 切換代碼視圖,標簽切換
5.其他快捷方式
CTRL+Z 倒退(代碼後悔)
CTRL+SHIFT+Z 向前
CTRL+H 顯 示類結構圖
Ctrl +F12 文件結構彈出
CTRL+O 魔術方法CTRL+/ 注釋//取消注釋
CTRL+SHIFT+/ 注釋/*...*/
ctrl + '.': 折疊選中的代碼的代碼
ALT+ / 切換代碼視圖,
資料庫相關常用的工具 Navicat for MySQL是管理資料庫的操作工具,都是可以連接遠程的雲資料庫。方便簡化開發,還可以手動備份、可視化的sql分析。
常用快捷鍵:
ctrl+q 打開查詢窗口
ctrl+/ 注釋sql語句
ctrl+shift +/ 解除注釋
ctrl+r 運行查詢窗口的sql語句
ctrl+shift+r 只運行選中的sql語句
F6 打開一個mysql命令行窗口
ctrl+d (1):查看錶結構詳情,包括索引 觸發器,存儲過程,外鍵,唯一鍵;(2):復制一行
ctrl+l 刪除一行
ctrl+n 打開一個新的查詢窗口
ctrl+w 關閉一個查詢窗口
ctrl+tab 多窗口切換
伺服器連接軟體XShell6是非常強大的SSH遠程終端客戶端,幫助我們連接遠程的Linux伺服器來進行操作。
粘貼:Shift+Insert
歷史 命令編輯ctrl + p 返回上一次輸入命令字元
alt + > 返回上一次執行命令
其它
ctrl + s 鎖住終端
ctrl + q 解鎖終端
ctrl + l 清屏相當於命令clear
Tab鍵,快速補全命令
輕量級文本編輯器Notepad++。這個很輕量,打開一下文本非常的方便。
常用快捷鍵
Ctrl+C 復制
Ctrl+X 剪切
Ctrl+V 粘貼
Ctrl+Z 撤消
Ctrl+Y 恢復
Ctrl+A 全選
Ctrl+F 鍵查找對話框啟動
Ctrl+H 查找/替換對話框
Ctrl+D 復制並粘貼當行
Ctrl+F2 切換書簽
F2 轉到下一個書簽Shift+F2 轉到上一個書簽
F11 全屏模式
前端 :
visual studio code
後端:
pycharm
IDEA
安卓:
android studio
瀏覽器:
谷歌
火狐
資料庫管理:
navicat
遠端鏈接:
fileZilla
xshell
electerm(mac上使用)
流程圖設計:
xmind
processOn
筆記:
為知筆記(付費一年60)
有道雲筆記
虛擬機(容器)
VMware Fusion(mac上)
docker
其他:
postman
jmeter
作為一個12年開發經驗的前端程序員,我來聊聊每天必用的幾個軟體。
寫代碼自然離不開 編輯器 。目前我主要使用的是微軟的 Visual Studio Code 。VS Code比較輕量,功能足夠應付日常開發所需,跨平台,而且完全免費 。因為之前長期使用Visual Studio在Windows平台上做開發,後來技術棧變化,經常需要在Linux和MacOS上做開發,VS Code就成了我順理成章的選擇。後來乾脆在Windows上也用VS Code了。目前整個團隊都已經被VS Code圈粉了。其它類似的如Sublime Text(需要付費)和Atom也有不少人使用。
因為是團隊開發, 源代碼管理工具 自然必不可少,而 git 是目前最熱門的一個。我們公司也不例外,幾年前從Perforce遷移到了 GitHub企業版 (和公眾版本UI完全相同)。平時的代碼審查也都是在GitHub企業版上完成的,不再使用單獨的代碼審查工具。有些不習慣使用命令行方式的同事使用 SourceTree 完成日常的代碼分支管理和提交,而我則比較熱衷於命令行方式。VS Code也提供了比較完善的git集成,但因為習慣的原因,除了直觀比較不同代碼版本的差異,我一般也不用VS Code執行git操作。
作為一個Web前端, 瀏覽器及前端調試工具 自然不可或缺, Google Chrome + Developer Tools (F12) 自然是首選。使用Developer Tools,可以對JavaScript進行調試,監控HTTP請求/響應,分析CSS計算問題和JS性能問題。 Chrome下還有很多功能強大的插件,個人比較常用的包括React Developer Tools、PostMan、Proxy SwitchOmega和AdBlock。當然,因為經常面對瀏覽器兼容性問題,Firefox、IE、Edge、Apple Safari以及各自的Developer Tools都是免不了要用的。
團隊目前使用Scrum模型,自然需要一個做 任務規劃和質量管理 的工具。我們採用了 JIRA , 每天的站會(daily stanp meeting)都會對scrum看板(board)進行更新。
遇到技術問題,自然免不了要上網查找資料。 Google 的使用頻率非常高(需要科學上網)。大部分問題都能在 StackOveflow 上找到線索,但有時候也不得不跑到大名鼎鼎的同性交友網站 GitHub 上看源碼。 MDN (Mozilla Developer Network)對於前端開發也是不可或缺(此處鄙視一下w3cschool,上面到處是錯誤知識)。
其它如node.js/npm、docker等,因為和具體的技術棧相關,就不具體展開講了。
作為一個開發人員,你每天使用什麼軟體呢,歡迎說說看。
盡管我是後端出身的,不過也經常寫前端代碼,甚至還用C#/C++參與過一些客戶端開發,自認為也算是一個Web全棧工程師。隨著前端技術的不斷進步,現在的前端已經不再是寫寫頁面這么簡單了,很多邏輯在前端就寫了,我建議每一個出色的開發者應該盡可能對前後端都能有不錯的掌握。
今天給大家推薦一些我認為前端和後端開發都需要經常用到的一些軟體,這裡麵包括了查詢資料工具、原型工具、文本編輯器、版本管理工具。
原型工具 不管前端還是後端,尤其是前端程序員,在跟產品經歷溝通之後肯定會要查看原型的,方便自己在開發過程中使用,基本上大公司輸出的原型都比較規范,除非你遇到張小龍這種級別的大神,哥們兒直接盯著你做了。
目前主流的原型工具主要有Axure、MockPlus、墨刀等,其中Axure依然是應用最為廣泛的原型工具,大多數開發者也都應該用來看原型。
文本編輯器 不管是前端還是後端程序員,當然前端程序員就不說了,在WebStorm出現之前,沒有一款真正可以叫做IDE的前端開發工具,那麼基本上文本編輯器就是前端程序員最重要的編程工具。同樣後端程序員即使不需要寫前端代碼,文本編輯器也是必備的,您不需要每次看代碼都打開龐大的集成開發環境,像IDEA這種比較耗費資源的,平時查看代碼啥的完全沒有必要,何況你還經常要看一些前端代碼。
當然你比較習慣Linux/Unix下開發,Emacs/Vim可能是你用得比較多的文本編輯器,還有UltraEdit、Sublime Text、EditPlus、Atom這些老牌的文本編輯器,不過現在我覺得每個程序員都應該下載一個Visual Studio Code,支持的語言比較多,而且插件非常豐富,是微軟官方支持的開發者工具,開源免費而且顏值非常高。
查詢資料、版本管理工具不用多說,每個程序員都要學會很好的使用Google、Stack Overflow兩個工具,可以說你日常開發當中可能遇到的問題,通過這兩個工具你全都能找到解決方案。
另外一個是Dash文檔管理工具,Dash是一個非常好的開發者幫助文檔工具,這個工具的好處是給所有的開發文檔做了一個整合,C/C++、Java、PHP、Python、Latex、Emacs Lisp、Haskell、JavaScript、Go語言等文檔都能夠在這個工具當中下載使用。
最後一個就是版本管理了,SVN和Git依然是目前使用最為廣泛的版本管理工具,不過就使用來說我還是推薦Git版本控制系統,可以說這個時代Git就是最好的版本管理工具了,尤其是開源時代、互聯網時代,Git已經成為了最重要的版本管理工具,不管是命令行管理還是使用Github等客戶端工具,堪稱完美。
入行十一年,現在主要做一些管理和架構方面的工作,也會做一些Coding,主要是一些新技術的研究和「踩坑」。
編輯器首先是EditPlus,這是一個文本編輯器。最常用的兩個功能:正則表達式查詢和文件夾內所有文件內容搜索。
平時經常需要看一些系統日誌,甚至要從好幾天幾十個日誌文件中找到內容,這個軟體很好用。(原諒我們沒有上日誌平台)
然後就是IDE啦,我還是喜歡用Eclipse,有時候會用STS(Spring Tool Suite),它也是一個被包裝過的Eclipse,方便做一些Spring框架的研究。
一個是DbVisualizer,凡是具有JDBC資料庫介面的資料庫都可以管理,什麼資料庫都能連。
還有一個是SQLyog,這是一個快速而簡潔的圖形化管理MYSQL資料庫的工具,我只用裡面一個功能,就是數據的導入導出,效率非常高!
大部分項目只對外提供介面服務,所以介面測試工具少不了,我一般使用SoapUI,WebService/Rest都可以進行測試。
每天肯定會用的肯定不止上面幾個,還有版本控制工具svn和git,都會用到是因為單位svn現在開始往git遷移。
因為用的Scrum敏捷開發流程,所以JIRA、Sonar、Fisheye這些也是都會用到的。
Maven也不用說了,幾個項目基本都是基於Maven構建的。
必用的基本就是這些,只要電腦開著,這幾個軟體基本都是打開狀態。
Ⅱ msi和exe安裝文件有什麼區別
不同之處:
1)點擊Setup.exe文件來實現安裝:
Setup.exe是一個安裝引導程序。它是安裝工程通過MSBuild創建的,其中包含了一個XML文件,定義了應用程序所需要的系統必備安裝包信息。Setup.exe程序會檢查這些系統必備安裝包是否需要被下載和安裝,如果需要,它就會先安裝那些系統必備程序。當我們運行它的時候,它會讀取setup.ini來確定安裝所需要的配置並開始安裝流程。
如果這個setup.exe是在Visual Studio 2005中生成的,那麼用戶就必須有管理員許可權才能運行它。我們可以看見在setup.exe的圖標上有一個防護盾,這就意味著這個程序只有管理員才能運行它。如果這個setup.exe是在Visual Studio 2008中生成的,那麼用戶不一定需要有管理員的許可權就能執行它,當有一些特定操作需要管理員的許可權時,系統會顯示UAC對話框要求提升許可權。這類Setup.exe的圖標上不會顯示防護盾。
2)點擊setup.msi來進行安裝。
Setup.msi是一個WindowsInstaller包。和setup.exe不一樣,直接運行MSI安裝包就不會自動安裝自定義系統必備。它只會安裝主應用程序。在安裝項目的屬性對話框中修改輸出文件的名字,我們可以自定義MSI包的文件名。當我們「運行」它的時候,其實是Windows Installer在執行MSI包定義的各項操作。因此我們需要安裝Windows Installer的正確版本才能運行setup.msi。我們也可以使用msiexec命令去安裝setup.msi文件。
以上資料來源Microsoft官網的FAQs,感謝原作者Yanıtlar
Ⅲ 如何把我的Java程序變成exe文件
如何把我的Java程序變成exe文件?
JAVA是一種「跨平台」的語言,擁有「一次編寫,處處運行」的特點,讓它成為當今IT行業,必不可少的一門編程語言。每一個軟體開發完成之後,應該大家都需要打包程序並發送給客戶,常見的方式:java程序打成jar包,web程序打成war包完成之後再通過某種傳輸方式,傳輸給客戶讓其運行。war包我們這里不做過多闡述,主要說說jar包的問題,jar包必須需要運行在jre環境中,並且需要通過「java -jar 路徑/*.jar」的指令才可以完成運行,很多客戶並不知道這個命令,這對於他來說確實有些困難,每次都要我們程序員自己去運行,那麼有沒有更好的辦法呢?其實在windows操作系統中,大家最熟悉的應該是exe程序,如果我們大家能夠將jar文件打包成exe文件,那麼客戶就能幫我們去啟動程序了,接下來,我們就看看如何將一個jar包轉換成exe文件吧!
首先,使用開發工具,創建一個jar包
第二步,去網站搜索並下載exe4j工具
大家自己去網站下載轉換工具,http://www.onlinedown.net/soft/9475.htm當然,我這里是下載的是64位系統
對應的軟體,下載完成之後,請解壓開,並執行安裝exe4j_windows-x64_5_01.exe
安裝好了之後,運行exe4j Wizard程序,將出現如下界面:
直接點擊「next」,進入「project type」選擇頁面:
選擇點擊「next」,進入「application configure」頁面:
在這個頁面中,我們需要修改3個地方,第一個輸入框中,我們需要給我們打包的程序,起一個「小名兒」,
比如:狗娃兒第二個,第三個輸入框中,我們都固定選擇jar所在的目錄即可。完成之後,再點擊「next」,
進入「executableconfigure」頁面中:
在這個頁面中,有3個地方需要修正,第一個地方請選擇「Console application」,後面在運行時,將會
出現doc窗體。第二個地方,給我們應用起一個應用名。第三個地方,主要是為了讓我們的應用在進
程中只有一個。選擇好後,請點擊「Advanced Options」,選擇其中的「32-bit or 64-bit」,進入64位軟
件選擇頁面。
在頁面中,選擇按照64位的安裝方式進行安裝,選擇好之後,連接點擊2次「next」,來到最重要的配置頁面:
在這張頁面中,我們首先需要點擊「+」號,添加我們的jar文件,然後再選擇我們jar包中主入口類,也就
是包含main函數的類。選擇完畢之後,大家請點擊「next」,在jre版本頁面中輸入最低版本,比如:1.7,
那麼我們的程序就不能在1.6版本上運行了。所以盡量版本設置低一點!
配置完畢之後,連續點擊「next」即可完成轉換工作,然後,我們打開e:/jar目錄,應該就可以看到我們的exe文件了。
雙擊exe文件,我們就可以正常啟動我們的應該程序了,O(∩∩)O哈哈哈~,開心不?
over,當然將jar文件轉換為exe的方式有很多種,我這里只是介紹了其中的一種。例外,給大家需要說明的
是,如果你注意對比下jar文件與exe文件的大小,你會發現exe文件遠大於你的jar文件大小。到底是不是
得不償失?最好是綜合權衡下,世上就沒有十全十美的事情。
Ⅳ 軟體測試總是聽到 build,到底 build 指的是什麼啊
Build可以認為是軟體開發中不同時期編譯出來的版本,其實就是開發人員把源程序打包出來的一個安裝文件,很可能每天都會有新的版本出現。
生成build就是指將源代碼進行打包,做成一個安裝文件的形式。
測試build中的bug就是指在特定的版本下測試軟體的bug。有可能在之前的build出現了問題,程序員改了下代碼,讓測試人員看看有沒有把bug修復;或者是程序員增加了一個新的功能,讓測試人員看看這個build有沒有bug。
Ⅳ python的ide是什麼
IDE 是 Intergreated Development Environment 的縮寫,中文稱為集成開發環境,用來表示輔助程序員開發的應用軟體,是它們的一個總稱。
運行 Python 語言程序必須有解釋器。在實際開發中,除了運行程序必須的工具外,我們往往還需要很多其他輔助軟體,例如語言編輯
器、自動建立工具、除錯器等等。這些工具通常被打包在一起,統一發布和安裝,例如 PythonWin、MacPython、PyCharm 等,它們
統稱為集成開發環境(IDE)。
推薦學習《python教程》
因此可以這么說,集成開發環境就是一系列開發工具的組合套裝。這就好比台式機,一個台式機的核心部件是主機,有了主機就能獨立工
作了,但是我們在購買台式機時,往往還要附帶上顯示器、鍵盤、滑鼠、U盤、攝像頭等外圍設備,因為只有主機太不方便了,必須有外
設才能玩的爽。
需要注意的是,雖然有一些 IDE 支持多種程序語言的開發(如 Eclipse、NetBeans、VS),但通常來說,IDE 主要還是針對某一特定的
程序語言而量身打造的(如 VB)。
一般情況下,程序員可選擇的 IDE 類別是很多的,比如說,用 Python 語言進行程序開發,既可以選用 Python 自帶的 IDLE,也可以選
擇使用 PyCharm 和 Notepad++ 作為 IDE。
Ⅵ cython與python的不同有哪些
Cython是Python的一個超集,結合了Python的易用性和原生代碼的速度,可以編譯成C語言,產生的性能提升可以從幾個百分點到幾個數量級,具體取決於手頭的任務。
使用Cython,你可以避開Python的許多原生限制,或者完全超越Python,而無需放棄Python的簡便性和便捷性。
Python代碼可以直接調用C模塊。這些C模塊可以是通用的C庫或專門為Python工作的庫。Cython生成第二種類型的模塊:與Python內部對話的C庫,可以與現有的Python代碼綁定在一起。
Cython代碼在設計上看起來很像Python代碼。如果你給Cython編譯器提供了一個Python程序,它將會按原樣接受它,但是Cython的原生加速器都不會起作用。但是如果你用Cython的特殊語法來修飾Python代碼,那麼Cython就可以用快速的C代替慢的Python對象。
請注意,Cython的方法是漸進的。這意味著開發人員可以從現有的Python應用程序開始,通過對代碼立刻進行更改來加快速度,而不是從頭開始重寫整個應用程序。
這種方法通常與軟體性能問題的性質相吻合。在大多數程序中,絕大多數CPU密集型代碼都集中在一些熱點上,也就是帕累托原則的一個版本,也被稱為「80/20」規則。因此,Python應用程序中的大部分代碼不需要進行性能優化,只需要幾個關鍵部分。你可以逐漸將這些熱點轉換為Cython,從而獲得你最需要的性能提升。程序的其餘部分可以保留在Python中,以方便開發人員。
相關推薦:《Python入門教程》
Cython優勢
除了能夠加速已經編寫的代碼之外,Cython還具有其他幾個優點:
使用外部C庫可以更快
像NumPy這樣的Python軟體包可以在Python界面中打包C庫,使它們易於使用。但是,這些包在Python和C之間來回切換會減慢速度。Cython可以讓你直接與底層庫進行通信,而不需要Python(也支持C ++庫)。
可以同時使用C和Python內存管理
如果你使用Python對象,它們就像在普通的Python中一樣被內存管理和垃圾收集。但是如果你想創建和管理自己的C級結構,並使用malloc/free來處理它們,你可以這樣做,只記得自己清理一下。
可以根據需要選擇安全性或速度
Cython通過decorator 和編譯器指令(例如@boundscheck(False))自動執行對C中彈出的常見問題的運行時檢查,例如對數組的超出邊界訪問。因此,由Cython生成的C代碼默認比手動C代碼安全得多。
如果確信在運行時不需要這些檢查,則可以在整個模塊上或僅在選擇功能上禁用它們以獲得額外的編譯速度。
Cython還允許本地訪問使用「緩沖協議」的Python結構,以直接訪問存儲在內存中的數據(無需中間復制)。Cython的「記憶視圖」可以高速地在這些結構上進行工作,並且具有適合任務的安全級別。
Cython C代碼可以從釋放GIL中受益
Python的全局解釋器鎖(Global Interpreter Lock,GIL)同步解釋器中的線程,保護對Python對象的訪問並管理資源的爭用。但GIL被廣泛批評為Python性能的絆腳石,特別是在多核系統上。
如果有一段代碼不會引用Python對象並執行長時間運行,那麼可以使用nogil:指令將其標記為允許它在沒有GIL的情況下運行。這使得Python中間人可以做其他事情,並允許Cython代碼使用多個內核(附加工作)。
Cython可以使用Python類型的提示語法
Python有一個類型提示語法,主要由linters和代碼檢查器使用,而不是CPython解釋器。 Cython有它自己的代碼裝飾的自定義語法,但是最近修改了Cython,你可以使用Python類型提示語法為Cython提供類型提示。
Cython限制
請記住,Cython不是一個魔術棒。它不會自動將每一個poky Python代碼變成極速的C代碼。為了充分利用Cython,你必須明智地使用它,並理解它的局限性:
常規Python代碼的加速很少
當Cython遇到Python代碼時,它不能完全翻譯成C語言,它將這些代碼轉換成一系列對Python內部的C調用。這相當於將Python的解釋器從執行循環中提取出來,這使得代碼默認加速了15%到20%。請注意,這是最好的情況。在某些情況下,可能看不到性能改善,甚至性能下降。
原生Python數據結構有一點加速
Python提供了大量的數據結構 - 字元串,列表,元組,字典等等。它們對於開發者來說非常方便,而且他們自帶了自動內存管理功能,但是他們比純C慢。
Cython讓你繼續使用所有的Python數據結構,盡管沒有太多的加速。這又是因為Cython只是在Python運行時調用創建和操作這些對象的C API。因此,Python數據結構的行為與Cython優化的Python代碼大致相同:有時會得到一個提升,但只有一點。
Cython代碼運行速度最快時,「純C」
如果你在C中有一個標有cdef關鍵字的函數,那麼它的所有變數和內聯函數調用都是純C的,所以它的運行速度可以和C一樣快。 但是,如果該函數引用任何Python原生代碼(如Python數據結構或對內部Python API的調用),則該調用將成為性能瓶頸。
幸運的是,Cython提供了一種方法來發現這些瓶頸:一個源代碼報告,一目瞭然地顯示您的Cython應用程序的哪些部分是純C以及哪些部分與Python交互。 對應用程序進行了更好的優化,就會減少與Python的交互。
為Cython應用程序生成的源代碼報告。 白色區域純C;黃色區域顯示與Python內部的交互。一個精心優化的Cython程序將盡可能的黃色。 展開的最後一行顯示了解釋其相應Cython代碼的C代碼。
Cython NumPy
Cython改進了基於C的第三方數字運算庫(如NumPy)的使用。由於Cython代碼編譯為C,它可以直接與這些庫進行交互,並將Python的瓶頸帶出循環。
但是NumPy特別適用於Cython。 Cython對NumPy中的特定結構具有本地支持,並提供對NumPy數組的快速訪問。在傳統的Python腳本中使用的熟悉的NumPy語法可以在Cython中使用。
但是,如果要創建Cython和NumPy之間最接近的綁定,則需要使用Cython的自定義語法進一步修飾代碼。例如,cimport語句允許Cython代碼在編譯時在庫中查看C級構造,以實現最快的綁定。
由於NumPy被廣泛使用,Cython支持NumPy「開箱即用」。如果你安裝了NumPy,你可以在你的代碼中聲明cimport numpy,然後添加進一步的裝飾來使用暴露的函數。
Cython分析和性能
可以通過分析代碼並親眼目睹瓶頸在哪裡獲得最佳性能。Cython為Python的cProfile模塊提供鉤子,因此可以使用Python自己的分析工具來查看Cython代碼的執行情況。無需在工具組之間切換;可以繼續所熟悉和喜愛的Python世界中工作。
它有助於記住所有情況下,Cython不是魔術,仍然適用明智的現實世界的表現實踐。在Python和Cython之間來回穿梭越少,你的應用運行得越快。
例如,如果你有一個你想要在Cython中處理的對象的集合,那麼不要在Python中迭代它,並且在每一步調用一個Cython函數。將整個集合傳遞給你的Cython模塊並在那裡迭代。這種技術經常在管理數據的庫中使用,因此這是在自己的代碼中模擬的好模型。
我們使用Python是因為它為程序員提供了便利,並且能夠快速開發。有時程序員的工作效率是以犧牲性能為代價的。使用Cython,只需要一點點額外的努力就可以給你兩全其美的好處。