1. 程式人生 > >《Scala入坑筆記》一、Scala簡介

《Scala入坑筆記》一、Scala簡介

Scala 是 Scalable Language 的簡寫,網上沒有發現誰問 Scala 怎麼讀,你是按 Scalable 的發音讀作 ['skeɪlə] 還是喜歡讀作斯卡拉? Scala 是一門多正規化的能夠運行於JVM和.Net平臺之上的程式語言,一種類似java的程式語言 ,設計初衷是實現可伸縮的語言 、並整合面向物件程式設計和函數語言程式設計的各種特性。


發展歷史

在Scala的建立之初,並沒有怎麼引起重視,隨著Apache Spark和Apache Kafka這樣基於Scala的大資料框架的崛起,Scala逐步映入大資料從業者的眼簾。Scala的擁護者們認為Scala的主要優勢是速度和它的表達性。


Scala的建立者——Martin Odersky

聯邦理工學院洛桑(EPFL)的Martin Odersky於2001年基於Funnel的工作開始設計Scala。Funnel是把函數語言程式設計思想和Petri網相結合的一種程式語言。Odersky先前的工作是Generic Java和javac(Sun Java編譯器)。Java平臺的Scala於2003年底/2004年初發布。.NET平臺的Scala釋出於2004年6月。該語言第二個版本,v2.0,釋出於2006年3月。
截至2009年9月,最新版本是版本2.7.6 。Scala 2.8預計的特性包括重寫的Scala類庫(Scala collections library)、方法的命名引數和預設引數、包物件(package object),以及Continuation.
2009年4月,Twitter宣佈他們已經把大部分後端程式從Ruby遷移到Scala,其餘部分也打算要遷移。此外, Wattzon已經公開宣稱,其整個平臺都已經是基於Scala基礎設施編寫的。


Scala 特性

1、面向物件特性
Scala是一種純面向物件的語言,每個值都是物件。物件的資料型別以及行為由類和特質描述。
類抽象機制的擴充套件有兩種途徑:一種途徑是子類繼承,另一種途徑是靈活的混入機制。這兩種途徑能避免多重繼承的種種問題。
2、函數語言程式設計
Scala也是一種函式式語言,其函式也能當成值來使用。Scala提供了輕量級的語法用以定義匿名函式,支援高階函式,允許巢狀多層函式,並支援柯里化。Scala的case class及其內建的模式匹配相當於函數語言程式設計語言中常用的代數型別。
更進一步,程式設計師可以利用Scala的模式匹配,編寫類似正則表示式的程式碼處理XML資料。
3、靜態型別

Scala具備型別系統,通過編譯時檢查,保證程式碼的安全性和一致性。型別系統具體支援以下特性:
  • 泛型類
  • 協變和逆變
  • 標註
  • 型別引數的上下限約束
  • 把類別和抽象型別作為物件成員
  • 複合型別
  • 引用自己時顯式指定型別
  • 檢視
  • 多型方法
4、擴充套件性
Scala的設計秉承一項事實,即在實踐中,某個領域特定的應用程式開發往往需要特定於該領域的語言擴充套件。Scala提供了許多獨特的語言機制,可以以庫的形式輕易無縫新增新的語言結構:
  • 任何方法可用作字首或字尾操作符
  • 可以根據預期型別自動構造閉包
5、併發性
Scala使用Actor作為其併發模型,Actor是類似執行緒的實體,通過郵箱發收訊息。Actor可以複用執行緒,因此可以在程式中可以使用數百萬個Actor,而執行緒只能建立數千個。在2.10之後的版本中,使用Akka作為其預設Actor實現。

有哪些優秀的 Scala 開源專案?

1、spark 顯然已經成為了scala裡最引人關注的專案。

2、kafka 可能是僅次於spark的被廣泛瞭解的scala開源產品。

3、akka&spray,akka 太優秀了,以至於被 typesafe收購,並直接用akka替代scala自己的actor,原作者現在擔任typesafe的CTO。

4、play&lift, 在web框架裡,比較突出的就是play和lift了,play也已經被typesafe收購,我也是因為 play 接觸到 sbt,進而又接觸 Scala。
5、sbt - The interactive build tool Scala專案構建工具

6、http4s:用來寫寫http server/client

7、doobie:mysql的client

參考:

相關閱讀:

相關推薦

Scala筆記Scala簡介

Scala 是 Scalable Language 的簡寫,網上沒有發現誰問 Scala 怎麼讀,你是按 Scalable 的發音讀作 ['skeɪlə] 還是喜歡讀作斯卡拉? Scala 是一門多正規化的能夠運行於JVM和.Net平臺之上的程式語言,一種類似java的程式語

快學Scala學習記錄(scala簡介

一、概述 1.1面向物件特性 Scala是一種純面向物件的語言,每個值都是物件。物件的資料型別以及行為由類和特質描述。 類抽象機制的擴充套件有兩種途徑:一種途徑是子類繼承,另一種途徑是靈活的混入機制。這兩種途徑能避免多重繼承的種種問題。 1.2函數語言程式設計 Scala也是一種

Scala筆記》緣起 3天就搞了一個 hello world

有小夥伴向我諮詢 play framework 的問題,我就想了解一下 play framework ,按照官方的文件,要使用 SBT 安裝,就掉進了 SBT 的坑。第一坑:國外倉庫太慢安裝完成後,執行$ sbt命令後,提示:Java HotSpot(TM) 64-Bit S

es6 筆記()---let,const,解構,字串模板

let  全面取代var 大概相似於C++的定義,一個變數必須得先定義後使用,沒有預編譯 注意let的作用域,一個{}就是一個作用域,上述規則須在一個作用於內 坑:for(let i =0;i < 10; i++){     let i=20;   } 這

Scala基礎教程():簡介環境安裝

Scala基礎語法 如果有很好的瞭解Java語言,那麼將很容易學習Scala。 Scala和Java間的最大語法的區別在於;行結束符是可選的。考慮Scala程式它可以被定義為通過呼叫彼此方法進行通訊的物件的集合。現在,簡要地看看什麼叫做類,物件,方法和臨時變數。 ·    

Scala門第十篇--Akka實現簡易版的spark通訊框架

本次我們介紹使用Akka實現簡易的Spark通訊框架,主要分為: Akka簡介 提出需求 需求分析 程式碼示例 Akka簡介 Akka基於Actor模型,提供了一個用於構建可擴充套件的(Scalable)、彈性的(Resilient)、快速響應的(Resp

spark學習筆記scala語言基礎

這篇文章是《scala程式設計》的筆記。 Scala基於java,是一種函數語言程式設計+程序式程式設計的混合語言。 可以使用直譯器互動執行,也可以編譯成jar包。 變數 Scala 有兩種變數, val (引用不可變)和 var(引用可變) 變數的定義和賦值語句是: v

spark學習記錄(scala與java編寫wordCount比較)

 新增依賴: <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12<

小程序)---如何引入iconfont 字體圖標

tex 兩種 pid 不用 tencent 16進制 點心 想是 方便 最近一直忙於日常任務,其實是懶癌又犯了。。。。。。。。。。不過因為自己的“懶癌”,“不思進取”給自己挖了不少坑。 一,小程序工具的安裝 打開簡易小程序的官網https://mp.weixin.qq.c

《JavaScript高級教程》學習筆記變量和數據類型

body 統一 () 邏輯 obj mas 沒有初始化 關系 可變 JavaScript的核心語言特性在ECMA-262中是以名為ECMAScript的偽語言的形式來定義的。 一、變量和數據類型 1. 變量 JavaSript是弱類型語言,可以通過var定義任

Sql函數筆記case when

lag 設有 根據 接下來 group 等級 and birt 返回 Case具有兩種格式。簡單Case函數和Case搜索函數。 簡單Case函數 CASE sex WHEN ‘1‘ THEN ‘男‘ WHEN ‘2‘ THEN ‘女‘ ELSE ‘其他‘ END

Maven簡介

mil 第一次 都是 AD 程序 基礎 table alt 運行 一、Maven簡介 (一)什麽是Maven Maven是apache下的開源項目,項目管理工具,管理java項目。 1、項目對象模型 (Project Object Model)

Spring簡介

簡單 nat 聲明 sta ack ioc容器 title https 結構 Spring是一個開放源代碼的設計層面框架,他解決的是業務邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個系統應用。Spring是於2003 年興起的一個輕量級的Java 開發框架

JavaScript簡介

服務 dom ava cms 瀏覽器 成語 行為 文檔對象模型 平臺 JavaScript的組成 ECMScript:JavaScript的組成語法和基本對象 DOM:文檔對象模型,描述處理網頁的內容方法和接口 BOM:瀏覽器的對象模型,描述

CentOS6.5下如何正確下載安裝Intellij IDEAScalaScala-intellij-bin插件Scala IDE for Eclipse助推大數據開發(圖文詳解)

scala 建議 strong 安裝jdk rgs 默認 tell launcher eclipse 第二步:安裝Intellij IDEA   若是3節點如,master、slave1、slave2,則建議將其安裝在master節點上   到https:/

spring入門筆記-()spring boot HelloWorld

etc sample pid edi ren ref tin del result 什麽是spring boot Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而

VUE 系列 雙向綁定

發生 span 2-2 htm lap tro col inpu 綁定 html代碼 <div id="app"> <p>{{message}}</p> <span>message1</span>

VUE 系列 事件

htm apt view 退格 tar play nbsp min vue html代碼 <div id="app"> <button v-on:click="counter += 1">加1</button> <but

es6 筆記(四)---非同步處理

promise 用於js的非同步處理 形式: 1.申明一個promise的物件 let p = new Promise(function(成功時的引數,失敗時的引數){   if(。。。。){     成功時的引數(成功時想傳的值);   }else{     失敗時的引數(失敗時想

es6 筆記(二)---函式擴充套件,箭頭函式,擴充套件運算子...

函式擴充套件 1.函式可以有預設值 function demo( a = 10,b ){} 2.函式可以使用解構  function demo( { a = 0,b = 0 } = {} ){ } 3.函式引數最後可以多一個逗號 function demo(a,b,