Questions tagged «rust»

1
Rust特性与Go Interface有何不同?
我对Go相对熟悉,在其中编写了许多小程序。当然,Rust我不太熟悉,但请注意。 最近阅读过http://yager.io/programming/go.html以后,我认为我将亲自研究泛型的两种处理方式,因为在实践中,当接口实际上没有太多内容时,这篇文章似乎不公平地批评了Go。不能优雅地完成。我一直在听到关于Rust的特质多么强大的炒作,除了人们对Go的批评之外,什么也没有。有了Go的经验,我想知道它的真实性以及最终的差异。我发现特征和接口非常相似!最终,我不确定是否遗漏了一些东西,因此这里是他们相似之处的快速教育总结,您可以告诉我我错过了什么! 现在,让我们从他们的文档中了解Go Interfaces : Go中的接口提供了一种指定对象行为的方式:如果可以做到这一点,则可以在这里使用它。 到目前为止,最常见的接口是Stringer返回表示对象的字符串。 type Stringer interface { String() string } 因此,String()在其上定义的任何对象都是Stringer对象。可以在类型签名中使用它,这样func (s Stringer) print()几乎可以获取所有对象并进行打印。 我们也有interface{}哪个对象。然后,我们必须在运行时通过反射确定类型。 现在,让我们从他们的文档中了解Rust特性: 简单来说,特征是一组零个或多个方法签名。例如,对于可以打印到控制台的内容,我们可以使用单个方法签名声明特征Printable: trait Printable { fn print(&self); } 这立即看起来与我们的Go Interfaces非常相似。我看到的唯一区别是,我们定义了特征的“实现”,而不仅仅是定义了方法。所以,我们做 impl Printable for int { fn print(&self) { println!("{}", *self) } } 代替 fn print(a: int) { ... } 额外的问题:如果定义一个实现特征但不使用的函数,在Rust中会发生什么impl?就是行不通吗? 与Go的接口不同,Rust的类型系统具有类型参数,可让您执行适当的泛型和诸如interface{}编译器和运行时实际知道类型的操作。例如, …
64 go  rust 

2
Rust如何与C ++的并发功能相区别?
问题 我试图了解Rust是否从根本上充分改善了C ++的并发功能,以便决定我是否应该花时间学习Rust。 具体来说,惯用的Rust如何改善惯用的C ++的并发功能,或以任何方式背离? 改进(或分歧)主要是句法上的,还是范式上的实质改进(分歧)?或者是别的什么?还是根本就没有改善(分歧)? 基本原理 最近,我一直在尝试自学C ++ 14的并发功能,感觉有些不对劲。感觉有些不对劲。什么感觉了吗?很难说。 当涉及到并发时,似乎编译器似乎并没有真正在帮助我编写正确的程序。感觉好像我在使用汇编程序而不是编译器。 诚然,当涉及到并发时,我完全有可能遭受一个微妙的,错误的概念。也许我还没有摆脱Bartosz Milewski在有状态编程和数据竞赛之间的紧张关系。也许我不太了解编译器中有多少合理的并发方法以及操作系统中有多少并发方法。
35 c++  concurrency  rust  c++14 

8
例如,对于大型Web应用程序,在现实世界中使用“强”类型系统吗?
我知道这是一个非常广泛,模棱两可甚至是哲学上的问题。在某种程度上,问题中最重要的关键字-“强”类型系统-本身定义不正确。所以,让我尝试解释我的意思。 问题的总体背景 我们已经在Ruby on Rails中构建了一个非常大型的Web应用程序,并且总体上我们对我们的堆栈感到满意。如果需要的话,我们可以非常快速地发货-可以在90%的“业务”案例中使用,而不必担心10%的边缘案例。另一方面,借助代码审查和测试覆盖率,我们可以缓慢而谨慎地进行,并确保覆盖所有基础-再次,仅在需要进行更仔细检查和安全的情况下。 但是,随着团队的壮大,我开始感到不舒服,因为缺少直接放入我们堆栈中的“安全网”。 我们最近开始在Java上进行一些本机Android开发。我(愉快地)想起了编译/静态/强类型语言提供的安全性。 IDE本身会捕获错误拼写的变量,错误的数据类型,错误的函数调用以及许多琐碎的错误。全部是因为IDE可以挂接到编译器并验证程序“正确性”的某些方面。 是否需要更改功能签名?简单。编译器+ IDE可以帮助您发现所有调用站点。 是否需要确保始终处理某些异常?已检查的救援例外情况。 现在,尽管这些安全功能各有优点,但我也很清楚它们的缺点。更重要的是,在“繁重的” Java世界中。因此,代替Java,我开始研究人们近来开始使用的大量现代“强类型”语言。例如:Scala,Rust,Haskell等。我最感兴趣的是它们的类型系统和静态/编译时检查的功能。 现在,问题 如何在大型应用程序中使用这些功能强大的类型系统和静态/编译时功能? 例如,对于这些强大的功能,我将如何超越标准的“ hello world”介绍?使用富类型系统来建模业务域问题的模型吗?当您位于30,000 LOC +区域中时,类型系统会帮助还是阻碍?当您的系统与弱类型的外部环境交互时,这些类型的系统(和编译时检查)所提供的安全网会如何处理?通过JSON或XML API,各种数据存储,用户输入等。

1
通用C ++包装器能否实现Rust的所有权模型?
浏览有关Rust的并发安全性的这篇文章: http://blog.rust-lang.org/2015/04/10/Fearless-Concurrency.html 我想知道在C ++ 11(或更新版本)中可以实现多少这些想法。特别是,我可以创建一个所有者类,将所有权转移到可能传递给它的任何方法吗?似乎C ++有太多传递变量的方法,这是不可能的,但是也许我可以对类或模板施加一些限制,以确保每次方法传递都执行某些模板代码?

5
是否可以以编程方式评估任意代码的安全性?
最近我一直在考虑安全代码。线程安全的。内存安全。不会在带有段故障保险柜的情况下爆炸。但是为了清楚起见,让我们使用Rust的安全模型作为我们的定义。 通常,确保安全性是网络的一个大问题,因为正如Rust的需求所证明unsafe,存在一些非常合理的编程思想(例如并发性),如果不使用关键字就无法在Rust中实现unsafe。尽管并发可以由具有锁,互斥,渠道和内存隔离或者你有什么绝对安全的,这需要工作以外的铁锈的安全模式unsafe,然后手动确保编译器,“是的,我知道我在做什么看起来不安全,但是我已经从数学上证明了它是绝对安全的。” 但这通常归结为手动为这些事物建模并通过定理证明者证明它们是安全的。从计算机科学的角度(可能)和实用性的角度(是否要占用宇宙的生命),可以想象一个程序以任意语言使用任意代码并评估它是否是“防锈”? 注意事项: 一个简单的提示就是指出程序可能正在停止,因此停止问题使我们无法正常工作。假设提供给阅读器的任何程序都可以停止 虽然“以任意语言编写任意代码”是目标,但我当然知道,这取决于程序对所选语言的熟悉程度,我们将以此为前提
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.