自從去年年底以來,關於Julia這門語言的風聲都甚囂塵上,讓人有一種不學習就要掉隊的衝動。但是對於媒體鼓吹的Julia可以打敗python,甚至是取代C++的無腦言論通常事嗤之以鼻的,一群從事鍵盤編輯的文字工作者懂個毛線編程?

那麼問題來了,我為什麼要寫這篇教程呢?這不是「真香」的故事么?但是我不得不承認,我是跪著寫完這篇教程的。。

TL;DR

Julia目前來講還無法打敗任何一門編程語言,但是它可以讓你從龐大的matlab中解放出來,並且你自學量子力學或者量子計算可能用得到它!, 於此同時,這篇文章就是你的第一個Julia入門教程!

關於Julia要知道的5件事

image.png

關於Julia這們語言,有五件事情你需要知道即可,或許讀完它就可以打消你心中的所有疑問:

  • 它能有多快:可能能比得上C;
  • 它是編譯語言嗎?它是,但又不是,或者二者都是;
  • 它跟Python哪個牛逼?當然Python牛逼,但是python太慢,優化很難,這個時候你可能需要Julia;
  • 它跟C++哪個牛逼?當然C++牛逼,毫無疑問C++的工業應用地位事無法取代的,小到手機美顏演算法,大到自動駕駛,Julia恐怕還很年輕。
  • 它跟那個女明星有關係嗎?沒有半毛錢關係,可能MIT的創造者們喜歡。

Julia的優點

在進行Julia的hello world教程之前,我想先把牛×吹完。Julia到底有著什麼樣的優點呢?為了讓大家有一個全方位的了解,讓我們來和現有的一些語言來對比對比。

大家可能都知道Python,但是python慢事出了名的。可是為什麼既然大家都在用python搞人工智慧,就沒有厲害的團隊、個人去把python優化呢?關於這個問題可以參考一下知乎上的一個問題:python能不能優化到速度快過C++ (哪怕快過Go也行)。但是結果是不能,這就是動態語言在易用性和速度上的tradeoff。天下沒有免費的午餐,你想獲得一些東西就必須要捨棄一些。既然Python很難優化到極致,那麼是否有可能拋棄Python從零打造一門語言呢?相傳Julia便是基於這個想法打造的。簡單的來說它的創造緣由是:

越來越多科研工作者開始使用動態語言進行科學研究,科學研究往往需要速度,但是現在的動態語言都太慢了。我們如果設計一個速度快到超越光速的語言,那豈不是皆大歡喜?好吧,那就叫做Julia吧,於是這門語言就誕生了。

簡單來說,Julia的優點在於:

  • 速度快,得益於強類型;
  • 面向數學,你甚至可以用f(x)=2x+4來定義函數,神奇吧;
  • 可以編譯也可以不編譯,這有點像Go;
  • 宏支持,支持模板,幾乎可以媲美C++

但是Julia是不是萬能的呢?這麼優秀,是不是可以轉學Julia從次走向人生巔峰呢?當然不能,就目前看來,Julia局限於這些應用:

  • 科學計算和模擬模擬;
  • 人工智慧我不知道能不能行但是肯定不如C++(如果拼速度,易用性肯定比不上python,生態還不夠);
  • 做後端也許可以但是比較另類;
  • GUI可以但是跟Go的處境差不多。

但是如果你是一位不是那麼追求名利的虛心學習者,你已經看破了紅塵,看通了宇宙奧義,想終身學習一些虛無的東西,那麼你可以使用它。比如它就可以幫助你打開量子力學領域的大門,各種開箱即用的數學函數、各種複數支持、各種自動求導絕對可以幫助你在成為波爾的道路上更進一步。

Julia安裝

Julia的安裝非常簡單,從這裡下載對應的文件:https://julialang.org/。 將解壓之後的bin目錄添加到你的PATH中。就可以在命令行中看到:

~/julia/bin  julia [19:42:22]
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.1.0 (2019-01-21)
_/ |\___|_|_|\___| | Official https://julialang.org/ release
|__/ |

julia>

當前最新版本為1.1,這也是一個較為穩定的版本,標誌著Julia其實已經趨於成熟。

Julia從入門到精通

正常情況下,入門一門語言只需要一個好的教程,而一個好的教程往往需要多一些廢話,比如說我們這個教程。我們不打算吧所有類型,函數,循環語句像譚浩強一樣挨個念一遍C語言文檔,而是挑選幾個可能讓大家覺得比較喜歡的特性,激發一下大家的興趣。

首先,你在命令行輸入julia , 就能跟我們一起來互動了。Julia有一個很牛逼的功能,叫做內置參數,比如輸入:

julia> pi
π = 3.1415926535897...

你就能看到圓周率,很吊有木有!!很多人會說:切,這尼瑪不就是一個內置的宏定義嗎?如果這沒什麼那麼看一下這個操作:

julia> a=3
3
julia> 2a
6
julia>

execuse me??? 2a這樣的操作也可以?這在Python裡面直接給你SyntaxError: invalid syntax!理解了我剛才說的面向數學了嗎?我們以前有時候也會犯這個錯誤,但是Julia裡面天生支持。

定義一個函數我們能做到的最簡單的語句是啥?很多人會說python有lamda表達式,C++也有,但是你看一下這個操作:

f(x)=2x+4
b=f(3)

你會認為它事一門語言嗎????而是Julia就能看懂,並且能告訴你結果是10!這個已經很智能了好嗎?如果說未來最適合教給小學生的編程語言,我一定不會推薦Python,而應該事Julia!

此時觀眾可能會說了,去尼米的小學生,我已經讀完大學四年了,大物已經學的滾瓜爛熟,就差重修考試99分完美收場了,不得讓我用Julia演示一下嫻熟的量子物理基礎?沒問題,前方高能,入坑須謹慎,因為這個坑,十分大。

用Julia開始你的量子計算之旅

yao

開局便是一個幺。這是個什麼?四川麻將?當然不是,這是一個你可能聽都沒有聽過的量子計算Julia庫!

是的你沒有聽錯,我打算從這裡帶你進入由Julia這門語言建立起來的量子計算生態圈!

yao.jl這個庫用官方的描述語言來說就是:

* quantum algorithm design;
* quantum [software 2.0](https://medium.com/@karpathy/software-2-0-a64152b37c35);
* quantum computation education.

面向於量子計算的演算法庫,用於量子計算演算法教育。這個庫的github地址為:https://github.com/QuantumBFS/Yao.jl/

當然對於這個庫以及關於由本文引出的一個尚處於萌芽狀態的全新領域:量子機器學習,我們a將會在本專欄下一個文章中進行一些細緻的講解。

關注最先進黑科技,歡迎大家訪問奇異AI網站 http://codes.strangeai.pro 進一步了解

奇異AI-國內最大的AI代碼平台?

codes.strangeai.pro
圖標

推薦閱讀:
相关文章