可以用Scala寫些什麼好玩的項目?

我在GitHub上看了一圈,發現用Scala寫一些經典數據結構和一些常見演算法的項目特別多。但一些小工具類型的項目特別少,有也沒有特別出彩的,故有此一問。


寫編譯器啊:LMS: Program Generation and Embedded Compilers in Scala

寫JVM啊:GitHub - lihaoyi/Metascala: A JVM written in Scala

&<- 都倍兒好玩

話說大家聽說過Excelsior JET吧,一個帶有AOT編譯器的Java運行時實現。它裡面的新版AOT編譯器據說就是用Scala寫的——去年開會的時候聽它的開發團隊的Nikita Lipsky說的。


可以寫abstract interpreter和static analyzer啊

各種k-CFA和PD CFA的實現 https://github.com/ilyasergey/reachability

給JVM Bytecode的抽象解釋器 https://github.com/Ucombinator/jaam

一個Abstract Interpreter的框架 https://github.com/acieroid/scala-am

以及 https://github.com/jandom-devel/Jandom

以及Static Program Analysis書里各種演算法的實現 https://github.com/cs-au-dk/TIP

還有可以寫各種和type system相關的呀

SuperCompiler for Martin-L?f"s Type Theory https://github.com/ilya-klyuchnikov/ttlite

Refined Type System for Scala https://github.com/fthomas/refined

對了又想起來一個,15年的ICFP Functional Pearl是用500行Scala寫了一個SQL到C的編譯器 https://www.cs.purdue.edu/homes/rompf/papers/rompf-icfp15.pdf


可以寫解釋器啊,面向對象加上函數式的模式匹配寫起來不要太爽:

Architectures for interpreters: Substitutional, denotational, big-step and small-step

也可以寫web server啊:

M2HTTPD: A pipelined, non-blocking, extensible web server in under 1400 lines of Scala

博主Matt Might也是個奇人,可以關注一下。


可以寫遊戲外掛。

舉個例子,有一個日本手機遊戲叫做《碧藍幻想》。大概長成這樣:

這個遊戲和魔獸世界一樣,也有所謂的副本,需要組隊才能打得過。不幸的是,這個遊戲沒有組隊系統,而是提供了「在微博上組隊」的功能,點一下就會發一條類似這樣的信息:

要想組隊的玩家,就得去微博上尋找隊友,然後把參戰ID複製到遊戲裡面。

那麼,你想要組隊,你就得在微博上搜索別人發的組隊信息,看看Boss等級、三圍、隊伍配置是否匹配。這個過程非常麻煩,你需要點開一大堆微博,挨個篩選。

有一個程序員(@walfieee)不堪忍受懶惰的開發商,於是自己用Binding.scala幫《碧藍幻想》做了個組隊系統。

這樣大家就可以解放雙手,批量刷副本啦。你也想做遊戲外掛嗎?快來學習 Binding.scala 吧!


scala+akka寫個分散式爬蟲也是挺好玩的;爬來的數據在用spark分析,然後在用play把數據可視化,一不小心就把scala的常用技術棧玩了個遍。

補充:

1.如果你要構建爬蟲,對於機器資源匱乏的人來說,通過akka構建一個簡單的單機集群(具體可以參考akka官網查看集群那部分內容,可以把代碼下載下來參考);至於和爬蟲有關的東西,Java已經提供了很多的東西如:htmlunit,jsoup等等;有興趣的可以去查看一下java爬蟲相關的架構。

2.關於爬到的數據處理的問題,你可以將數據存儲到資料庫中,也可以將數據壓入kafka;然後通過spark做一些清洗,在將數據放入kafka或者hdfs(一般不建議放入hdfs,不過可以試試,這個可以通過網上去看看實際應用可能出現的情況,當然最重要的還是要看場景);

3.至於spark分析上,集群搭建肯定是不可避免的,如果你有機器資源好說,沒有的話可以做一個單機偽分散式(詳情可以Google搜索一下),至於你想做實時分析還是離線分析這個就需要自己去看官網的API了,但是如果你會scala的話應該不是太難,想要做的好一點話可以看看數據分析方面的書籍。

4.play的話,要看你和什麼資料庫搭配了如果是關係型的一般會選用slick(新手不建議用,門檻有點高,有興趣的可以看看)也有其他的持久層框架(這個可以自己搜一搜);如果是nosql的話如:mongodb應該比較簡單。play整體來說還是比較輕量,相對於spring來說比較簡單(前提是你熟悉scala);當然如果你不喜歡play也可以選擇用springboot。

整個過程其實最重要的個人覺得還是一個學習的過程,在這個過程中你可以從公司的角度去思考你所構建的工程,怎樣去把他們做的更好如:性能優化,代碼優化,自動化等等;你可以把自己當成一個項目負責人對待你的工程,慢慢的就可以收穫很多東西了。

以上只是我個人觀點,寫的不好歡迎指正。


(Awesome-Scala)GitHub - lauris/awesome-scala: A community driven list of useful Scala libraries, frameworks and software.


GitHub - jadetang/scala_sql: scala sql is a simple SQL like DSL implementation writen in scala.
It"s main function is to do some computation with List& by writen
simple SQL

用scala寫的歌sql解析和執行的模塊。


時隔一年余;這次是真的給遊戲寫輔助

盟新的scala攻略;用scala能做哪些好玩的事-給遊戲寫輔助

https://github.com/1178615156/android-game-aux


shadowsocks-android 就是Scala寫的


有一個在線下棋網站lichess就是scala寫的


曾在在 v2ex 上看過一個 scala 仿 scrapy 的爬蟲架構:GitHub - gaocegege/scrala: Scala crawler(spider) framework, inspired by scrapy 不過吃一記 goroutine 啦:-D


推薦閱讀:

【搶先領】《React 學習之道》我們翻譯了一本最簡單,且最實用的 React 實戰教程……
在提高代碼能力這事上,沒有銀彈
如何解決敏捷開發與CMMI的衝突?
你不得不知的幾個互聯網ID生成器方案
2017就要結束了,再學點什麼呢?

TAG:軟體開發 | Scala | 函數式編程 |