1樓:
Rust可以寫執行在只有幾KB RAM/ROM的STM32F103微控制器上的程式,並且不是愛好者折騰出來的,是官方認可的目標。Haskell……?
對題主這樣的PLT學習者/愛好者來說,可能暫時不太關心現實世界的工程問題。
2樓:陸海綿
感謝網友提醒,我說錯了,這個問題幾年前就有了,我就說嘛,現在的Rust那還看得上Haskell。
這兩年Rust到處碰瓷,果然Haskell沒逃過。
這個問題你問「Haskell相較於Rust有哪些優勢」更好回答,因為除了FP,真沒什麼優勢。
所以Rust贏了!
下次該輪到彙編了吧?
趕快安排上,我都等不及要回答了!
3樓:AlseinX
二者根本就沒有可比性。
Rust本就是為在不以效能為代價的前提下,解決C++記憶體安全問題而生的語言,本質上就是乙個原生的系統級的生產力程式語言。
Rust的原作者是OCaml愛好者,因此Rust在不破壞對面向底層的命令式程式設計的表達能力的前提下,盡可能地加入了函式式語言特色的型別系統和語法設計。它本就不是乙個函式式程式語言,它只是利用了函式式程式語言的一些設計來增強了它的表達能力,根本就與ML、與Haskell沒有交集。
而Haskell是學術血統純正的函式式程式語言。
它們是從設計意圖到實現底層都差異巨大,並且從根源來講沒有任何衍生關係的,完全不同作用,不同層級的程式語言。
乙個工程生產用的指令式的底層程式語言,跟乙個學術研究用的函式式的解釋型GC語言,你想對比,這合理嗎?這不合理。
4樓:孫逸豪
這兩個語言定位根本不一樣啊,rust是system級別的語言,haskell根本就沒想過做system級別要做的東西……這個比較沒有意義。卡車和轎車相比有啥優勢?0v0,用的地方不一樣啊
5樓:原子筆
最可怕的就是這種話:
「這些在Haskell中早已實現。」
「協程幾十年前就在使用了」
「中中國人幾百年前就把火藥玩的很溜了」
「那啥足球什麼的,中中國人2023年前就在玩了」
這種話在工作裡其實是最傷人的,別人倖倖苦苦做了很多優化和完善,你(可能是新來的領導)丟擲來一句:
「XX部門不早都實現了嗎」
6樓:Martin awodey
實現了部分類似 Substructural type system 才有的特性(這些型別系統可以實現編譯時限制資源只能使用一次,最多使用一次等特性),這個是Haskell 沒有的。這篇文章有詳細解釋:
The Pain Of Real Linear Types in Rust
節選:let x = vec![1, 2, 3];
let y = xNOTE: x moved here
println!("", x); // ERROR: use of moved value x
pritnln!("", y); // OK
double free error :重複釋放記憶體
dangling references : 懸空指標
詳情請看 The Rust Programming Language
沒有gc而使用 region inference,這個Haskell有特別的編譯器實現和庫,只是好像並沒有廣泛使用
regions: Provides the region monad for safely opening and working withscarce resources.
其他應該沒有了,但是實現類似 Substructural type system 的功能,相對於Haskell 98/2010(不清楚是否有ghc 擴充套件實現類似特性) 是本質上的不一樣。Rust語法上非常不優美,型別標記和函式定義混雜。。
7樓:
最近折騰GraphQL,這裡提到了DSL,就拿幾個GraphQL的實現對比下(排除動態型別,都是文件裡的例子):
scala
import sangria.schema._
val PictureType = ObjectType(
"Picture",
"The product picture",
fields[Unit, Picture](
Field("width", IntType, resolve = _.value.width),
Field("height", IntType, resolve = _.value.height),
Field("url", OptionType(StringType),
description = Some("Picture CDN URL"resolve = _.value.url)))
haskell
type Calculator = Object "Calculator" '
'[ Argument "a" Int32 :> Argument "b" Int32 :> Field "add" Int32
, Argument "a" Int32 :> Argument "b" Int32 :> Field "subtract" Int32
]rust
#[macro_use] extern crate juniper;
struct Person
graphql_object!(Person: () |&self| {
field name() -> &strself.name.as_strfield age() -> i32self.age
ocaml
let user = Schema.(obj "user"
~doc:"A user in the system"
~fields:(fun _ -> [
field "id"
~doc:"Unique user identifier"
~typ:(non_null int)
~args:Argresolve:(fun ctx p -> p.idfield "name"
~typ:(non_null string)
~args:Argresolve:(fun ctx p -> p.namefield "role"
~typ:(non_null role)
~args:Argresolve:(fun ctx p -> p.rolelet schema = Schema.(schema [
field "users"
~typ:(non_null (list (non_null user)))
~args:Arg.
~resolve:(fun ctx () -> users)])
8樓:Qihui Sun
祖與佔@ 就擼DSL而言, Haskell, Ruby屬第一梯隊 -- Lisp完爆各種語言,每個程式設計師都能輕鬆搞個自己的DSL。
gerryxiao@ 講特性的話,haskell完爆所有語言。-- 估計你沒了解過Lisp方言Racket ! 可以去看Racket之父在youtube上的演講。
9樓:Scott Huang
好在不是純函式式的,但又參考了Scala等函式式語言的些好的語法。
好在不像Haskell從教科書式起家,更注重工程性一點,好在他是乙個新開發的語言:)
還有Rust可以不用gc,可以寫非常底層的系統程式。
相較於 Dubbo,Spring Cloud 有何優缺點?
穿條紋睡衣的男孩 Dubbo只是乙個遠端呼叫 RPC 框架 預設基於長連線,支援多種序列化格式 框架集提供了一整套微服務解決方案 全家桶 基於http呼叫,Rest API Andy springcloud就是用springboot把很多微服務框架各個元件重寫了,都是拿來主義。這不,springcl...
Kpl相較於lpl的優點?
寒江雨徹 我覺的,是當年那個出於無法做好平衡性,而天天導致的公馬大戰,而進行的全域性bp制度。我覺得以前這個是無奈,但是現在是種創新了。 五六柒 不能說有什麼優缺點吧,賽制都不同,各有各的優勢。lpl包括LOL所有比賽,不管是msi還是s賽都用的是常規bp。kpl在2018年秋季賽之前都是用的常規b...
Golang 相較於 Python 前景如何?
陳文煜 不能一概而論,單單指web後端開發的話,Golang比Python有較明顯的優勢。Golang 協程的MGP模型在web後端高併發有著天然優勢 非阻塞IO IO多路復用 阿偉Jeffrey 大公司後端有用 golang 的基本不見用 python 的。知乎的後端經歷了從 python 到 g...