ãæ¾ç»æ人é®Javaçåå§äººé«æ¯æè¿æ ·ä¸ä¸ªé®é¢ï¼âé¤äºJavaè¯è¨ä»¥å¤ï¼æ¨ç°å¨è¿ä½¿ç¨JVMå¹³å°ä¸çåªç§ç¼ç¨è¯è¨?âä»æ¯«ä¸ç¹è±«ç说æ¯Scalaã
ããScalaå°åºæ¯ä»ä¹?å¨ç®åä¼å¤çJVMè¯è¨å½ä¸ï¼Scalaæ çæ¯æå¼äººæ³¨æçè¯è¨ä¹ä¸ãScalaæ¯ä¸ä¸ªéæè¯è¨ï¼æ´éå大åå·¥ç¨é¡¹ç®ï¼Scalaç´æ¥ç¼è¯æJavaåèç ï¼æ§è½æ¥è¿JavaãScalaæ¯ä¸ä¸ªå¤èå¼çè¯è¨ï¼ä½ å¯ä»¥æ··å使ç¨å½æ°å¼åé¢å对象ç¼ç¨ï¼æ··å使ç¨å¯åç±»åä¸åç±»ï¼æ··å使ç¨Actoråä¼ ç»çJava并ååºã
ããççä¸ä¸ªæçæ¶é´ï¼Scalaäºæ¬æå²è¿äºTIOBEçåäºååãä¸ä¸ª Twitter çå¼å人å说è¿ï¼Scala å°ä¼æ为ç°ä»£ Web2.0 çåèµ·è¯è¨ãLinkedIn ä¹ç¨è¿ç§è¯è¨ãåæ ·è®¸å¤å
¶ä»å¤§çå
¬å¸å¦ Sony Picture, EDF, SAP ä¹å¼å§ä½¿ç¨è¿ç§è¯è¨ã为ä»ä¹Scalaåå±è¿ä¹è¿
çï¼å¯ä»¥è·å¾å¦æ¤ççç社åºæ¯æã
ããæ¾å ä¸è¿è¡¨ç¤ºï¼Scalaä¸æ¯Javaçææï¼å®æ æ³å代Javaçå°ä½ï¼ä¹çªç ´ä¸äºJVMçéå¶ãJavaå®ç°ä¸äºçåè½å®ä¹å®ç°ä¸äºãæ们å¯ä»¥å°Scala形象çç解æ大éè¯æ³ç³çJavaã
ããScala å¼åå¢éåå¸äºææ°ç2.9.2稳å®çæ¬ï¼Scala è¯è¨çç¹æ§æ许å¤ï¼ä¾å¦é«é¶å½æ°å对象ãæ½è±¡ç±»åç»å®ï¼actor 使å¾å½æ°å¨ Scala ä¸è½æ¯ä¸ä¸ªåç±»æ为å¯è½ï¼Scala ä¸ç设计模å¼ä½¿å¾é¢å对象åå½æ°ç¼ç¨æ ç¼ç»åãAkka æ¯ä¸ä¸ªç¨ Scala ç¼åçåºï¼ç¨äºç®åç¼å容éçãé«å¯ä¼¸ç¼©æ§ç Java å Scala ç Actor 模ååºç¨ãå®å·²ç»æåè¿ç¨å¨çµä¿¡è¡ä¸ãSpark æ¯ä¸ç§å¯æ©å±çæ°æ®åæå¹³å°ï¼å®æ´åäºå
å计ç®çåºå
ï¼å æ¤ï¼ç¸å¯¹äº Hadoop çé群åå¨æ¹æ³ï¼å®å¨æ§è½æ¹é¢æ´å
·ä¼å¿ãSpark æ¯å¨ Scala è¯è¨ä¸å®ç°çï¼å¹¶ä¸å©ç¨äºè¯¥è¯è¨ï¼ä¸ºæ°æ®å¤çæä¾äºç¬ä¸æ äºçç¯å¢ãScala ç¼è¯å¨å¯ä»¥çæåèç ï¼ç´æ¥è¿è¡å¨ä½¿ç¨JVMä¸ã该è¯è¨(å®å®é
ä¸ä»£è¡¨äºå¯æ©å±è¯è¨)被å®ä¹ä¸ºå¯ç´æ¥éæå°è¯è¨ä¸çç®åæ©å±ã
ããScalaä½ä¸ºä¸é¨éæè¯è¨ï¼å®ç主è¦ç¹æ§æåªäº?
ãã· Scalaæ¯é¢å对象ç
ããScalaæ¯ä¸ä¸ªçº¯é¢å对象è¯è¨ï¼å¨æç§æä¹ä¸æ¥è®²æææ°å¼é½æ¯å¯¹è±¡ã对象çç±»ååè¡ä¸ºæ¯ç±classåtraitæ¥æè¿°çãClassçæ½è±¡å¯ç±åç±»ååä¸ç§çµæ´»çåºäºmixinçç»åæºå¶(å®å¯ä½ä¸ºå¤é继æ¿çç®åæ¿ä»£æ¹æ¡)æ¥æ©å±ã
ãã· Scalaæ¯å½æ°å¼ç
ããScalaè¿æ¯ä¸ä¸ªå½æ°å¼è¯è¨ï¼å¨æç§æä¹ä¸æ¥è®²ææå½æ°é½æ¯æ°å¼ãScala为å®ä¹å¿åå½æ°æä¾äºä¸ç§è½»é级çè¯æ³ï¼å®æ¯æé«é¶(higher-order)å½æ°ãå
许å½æ°åµå¥ãæ¯æå±é¨å¥ç¨(currying)ãScalaçcaseç±»åå
¶å
ç½®æ¯æç模å¼å¹é
模å代æ°ç±»åå¨è®¸å¤å½æ°å¼ç¼ç¨è¯è¨ä¸é½è¢«ä½¿ç¨ã
ãã· Scalaæ¯éæç±»åç
ããScalaé
å¤äºä¸å¥å¯æ表ç°åçç±»åç³»ç»ï¼è¯¥æ½è±¡æ¦å¿µä»¥ä¸ç§å®å
¨çåä¸è´çæ¹å¼è¢«ä½¿ç¨ã
ãã· Scalaæ¯å¯æ©å±ç
ããScalaç设计æ¿è®¤äºå®è·µäºå®ï¼é¢åç¹å®åºç¨å¼åé常éè¦é¢åç¹å®è¯è¨æ©å±ãScalaæä¾äºä¸ä¸ªç¬ç¹çè¯è¨ç»åæºå¶ï¼è¿å¯ä»¥æ´å 容æå°ä»¥ç±»åºçå½¢å¼å¢å æ°çè¯è¨ç»æï¼
ããä»»ä½æ¹å¼å¯ä»¥è¢«ç¨ä½ä¸ç¼(infix)æåç¼(postfix)æä½ç¬¦éå
æç
§æææçç±»å(ç®æ ç±»å)èªå¨å°è¢«æé
ãã两è
ç»å使ç¨å¯æ¹ä¾¿å°å®ä¹æ°è¯å¥ï¼æ éæ©å±è¯æ³ï¼ä¹æ é使ç¨ç±»ä¼¼å®çå
ç¼ç¨å·¥å
·ã
ãã· Scalaå¯ä¸Javaå.NETè¿è¡äºæä½
ããScala设计æ¶å°±èèäºä¸æµè¡ç¼ç¨ç¯å¢è¯å¥½äº¤äºï¼å¦Java 2è¿è¡æ¶ç¯å¢(JRE)å .NETæ¡æ¶(CLR)ãç¹å«æ¯ä¸ä¸»æµé¢å对象è¯è¨ï¼å¦JavaåC#å°½éæ ç¼äº¤äºãScalaæåJavaåC#ä¸æ ·çç¼è¯æ¨¡å(ç¬ç«ç¼è¯ï¼å¨æè£
载类)ï¼å
许访é®æåä¸ä¸çé«è´¨éç±»åºã
ããå¨å¹¶åæ§æ¹é¢ï¼ä¸ Scala å¨ .NET é¢åä¸çå§å¦¹è¯è¨ F# ç¸ä¼¼ï¼Scala æ¯é对 â并åæ§é®é¢â ç解å³æ¹æ¡ä¹ä¸ï¼è®©å¼å人åè½å¤æ´å è½»æ¾å°ä¸æ³¨äºé®é¢çå®è´¨ï¼èä¸ç¨èè并åç¼ç¨çä½çº§ç»èãActor ç¼ç¨æ¨¡å¼è®©é«åº¦å¹¶è¡åºç¨ç¨åºçå¼åæ´å ç®åãScalaæErlangé£æ ¼çåºäºactorç并å带è¿äºJVMãæ们å¯ä»¥å©ç¨Scalaçactor模åå¨JVMä¸è®¾è®¡å
·ä¼¸ç¼©æ§ç并ååºç¨ç¨åºï¼ä»¥èªå¨è·å¾å¤æ ¸å¿å¤çå¨å¸¦æ¥çä¼å¿ï¼èä¸å¿
ä¾ç
§å¤æçJava线ç¨æ¨¡åæ¥ç¼åç¨åºãScala 为并åæ§æä¾äºä¸¤ç§çº§å«çæ¯æï¼è¿ä¸å
¶ä»ä¸ Java ç¸å
³ç主é¢æ为类似ï¼
ããé¦å
ï¼å¯¹åºå±åºçå®å
¨è®¿é®(æ¯å¦è¯´ java.util.concurrent)以å对 âä¼ ç»â Java 并åæ§è¯ä¹çæ¯æ(æ¯å¦è¯´çæ§ç¨åºåwait()/notifyAll())ãå
¶æ¬¡ï¼è¿äºåºæ¬æºå¶ä¸é¢æä¸ä¸ªæ½è±¡å±
ããScala æä¾äºå¨ç¨³å®çé«æ§è½å¹³å°(Java èææº)ä¸çæçè½ååæ¶ä¹æ¯ä¸é¨ææ·æ§è¯è¨ãè¿ä¸ç±»åçè¯è¨ä¹æå
¶ä»çéæ©ï¼ä¾å¦ Jython, JRuby, Groovy å Clojure, ä½æ¯è¿äºé½æ¯è¿è¡å¨ JVM ä¸çå¨æç±»åè¯è¨ãOpen Class çææ让大家ä¼è§å¾Scalaæ¯å¨æè¯è¨ï¼ä½å®æ¯éæ©éå¼è½¬æ¢æ¥å®ç°çï¼è¿ä¹æ£å¥½è¯æäºScalaæ¯éæè¯è¨ãéå¼è½¬æ¢(Implicit conversion)使 Scala å
·æç±»åå®å
¨æ§ï¼æ£å¦æ©å±æ¹æ³(extension method)ä¹äº C#ï¼å¼æ¾ç±»(open class)ä¹äº rubyãå³ï¼åæªæ¾å®ä¹çç±»åæ·»å æ¹æ³(å¦å符串ãå表ãæ´æ°)ãè¿æ¯ä½¿å¾ Scala 符å DSL(ç¹å®é¢åè¯è¨)模åçç¹æ§ä¹ä¸ã
ããScalaç»åäºé¢å对象åå½æ°ç¼ç¨çä¼å¿ï¼å½æ°ç¼ç¨çä¸ä¸ªå¥½å¤å°±æ¯ä½ è½å¤åè¿ç¨ä¸ä¸ªæ°æ®é£æ ·è¿ç¨å½æ°ï¼å¯ä»¥ç¨æ¥å®ä¹çæ£é«å±çº§çåºï¼æè
å»å®ä¹æ°çé¢åç¹æ®è¯è¨(DSL)ã
ããå¨è°åJavaä¸Scalaç对æ¯æ¶ï¼æ¾å ä¸è¡¨ç¤ºï¼Scalaè½è°ç¨ç»å¤§é¨åçJavaï¼èJavaè°ç¨Scalaç¬æçä¸è¥¿ä¼æ¯è¾é¾ãJava æ¥æé常强çæ¦å¿µè§èï¼å æ¤ä»»ä½ä¸ä¸ª Java ç¨åºä¹é´å
·æé常å¤çç¸ä¼¼ä¹å¤ï¼å¹¶ä¸è¿æ ·è½å¤æ¹ä¾¿çè¿è¡ç¨åºå交æ¿ãä½æ¯ Scala 并没æè¿æ ·çç»ä¸æ§ï¼å 为è¿æ¯ä¸é¨å¾æ表ç°åçè¯è¨ãç°åºæ¾å ä¸ä¸ºæ们æ¼ç¤ºäºå®é
æ¡ä¾ï¼å¦ä¸å¾æ示ï¼
ããæ£æè°ï¼éæ 足赤ï¼äººæ å®äººãScala对äºè¿å¶ä¸å
¼å®¹ï¼è¯æ³ä¹è¶æ¥è¶å¤æï¼ä¸è½çªç ´Bytecodeçéå¶ãç¼è¯é度ææç¼æ
¢ãå½å®è¢«å¹¿æ³ç¨äºåå
æµè¯ãå¼åå·¥å
·ãSocketå¼åã以åé¢å¯¹å¤æ ¸ææç并ååºç¨ãæ»èè¨ä¹ï¼Scalaæ¯ä¸ç§å½æ°å¼é¢å对象è¯è¨ï¼å®èæ±äºè®¸å¤åææªæçç¹æ§ï¼èåæ¶åè¿è¡äºJVMä¹ä¸ãæ£å¦JRuby å建è
ä¹ä¸Charles Nutter æ宣称çé£æ ·Scalaå°±æ¯ Java çä½çåæ³ç»§æ¿äººãéçå¼åè
对Scalaçå
´è¶£æ¥å¢ï¼ä»¥åè¶æ¥è¶å¤çå·¥å
·æ¯æï¼æ çScalaè¯è¨å°æ为广大软件工ç¨å¸æä¸ä¸ä»¶å¿
ä¸å¯å°çå·¥å
·ãæ´å¤ç²¾å½©å
容ï¼è¯·å
³æ³¨ä¸é¢ï¼
http://www.it168.com/remen/qcon/