Rust相較於Haskell除了效率還有何優勢?

時間 2021-05-06 19:25:31

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...