
这里有狂热的电影,游戏,书籍或音乐-他们非常喜欢一个紧密联系的社区,专业人士和评论家。 但是,没有商业上的成功和广泛的普及。 在这种情况下,我通常会很痛苦。
在开发中,好的技术也不会总是普及。 例如,F#。 我只知道他是一种非常酷的语言,但是完全不受欢迎,因此开发人员不能再回到原来的语言了。
我试图找出原因。 通常来说-谁在上面写东西?为什么在业务不需要某种语言的情况下他们会这样做呢? 为此,我敲门去与Telegram的俄语F#社区交谈。 这是我们的圆桌会议。
如何开始学习F#
Airat Khudaigulov (
Szer ):我本人来自C#。 我们有与Akka.NET相关的工作,该网站是从Akka移植到Scala的。 该端口非常出色,但是没有罕见的文档案例的例子;它们总是在Scala码头中。 当我阅读此扩展坞时,一个问题浮现在脑海-为什么一切都用Scala编写成两行,而我却遭受C#的困扰?
找到了出路-F#。 从此,并没有流泪。
Roman Liman (
kagetoki ):事实证明,它是解决任何程序员非常实际的日常问题的强大工具。 在C#和Java的OOP世界中,被认为是规范性和不可避免性的困难根本不是不可避免的,可以轻松地避免而不是克服这些困难。
Phil Ranzhin (
fillpackart ):在Habré上,我读了Vagif Abilov的一次大型采访。 那时,我根本不了解函数式编程范式,有关它的任何信息都使我非常恼火。 这样面试。
Vagif Abilov :
可以在这里阅读该材料 。 这是我在莫斯科DotNext会议上发表演讲后不久。 简而言之,我出于编写更紧凑的代码(更少的代码-更少的邪恶)并使用不可变数据结构的愿望而开始研究F#。 当然,没有人阻止C#或Java程序员将其数据结构定义为不可变的,但是实现OOP的语言的基础是数据结构发生突变的可能性,而且这种可能性不会消失。 函数式编程使您不必花费精力在多线程环境中保护数据免受不正确的更改-数据将自理,它们是不可更改的。
Phil Rangin :
Wagif一直说,在使用C#和Java进行礼仪之后,F#似乎更适合于开发。 我当时不知道Vagif是谁,但是,当然,我立即自己决定他什么都不懂。 C#不是礼仪性的,C#恰恰是应该的。 强大而美丽。 我决定写一篇关于函数式编程是多么荒谬的文章。 我完成了一个简单的任务,并开始在C#和F#中实现它来说明我的观点。 过程中的F#非常吸引我,以至于我还没写完这篇文章。 我开始研究这项技术。
罗曼·利曼(Roman Liman) :许多在运行时已在C#中测试过的东西现在已经迁移到comp上了,所以似乎就像我第一次尝试静态类型一样-直接启示了下来。
在F#上,您需要七行代码,而在C#上,等效代码将扩展到200-300,而不会夸张(这仅是有用的代码)。 编译器本身会为您生成一堆样板,例如,结构相等性。
Phil Rangin :我从未
公开过F#代码,因为在我的F#代码中,所有错误均在编译阶段捕获。 我不是在开玩笑
学习F#难吗
罗曼·莱曼(Roman Lyman) :学习有多难? 对我来说一点都不难。 如果您首先遇到功能性范例和不可变类型,那么一开始唯一的事情就是有点紧张。 但这不是语言的改变,而是范式的转变。
起初的语法并不明显,因此最好是放任不管,然后阅读有关该语言的信息,而不是希望C#的知识足够。
Ayrat Khudaigulov :F#支持C#中的所有内容,但goto除外(该语言完全基于表达式,在所计算的表达式中进行命令式转换会很奇怪)和protected关键字(这是设计使然,因为这样做显然并不困难)。 当然,我们喜欢OOP的所有其他东西-抽象类,接口,自动属性,用法和三段式-都是。 对于计数字节的支持者来说,所有内容也都存在:ref / out参数,可变性,跨度,非托管,指针,stackalloc。
与F#相比,C#的所有功能都滞后了几年(泛型,异步/等待+任务,LINQ,模式匹配等等)。 一般而言,许多功能我都怀疑它们是否会出现(以有区别的联合表示的求和类型,本机函数curring)。 在新的C#8.0中,它们承诺带来记录和递归匹配模式。 注意问题-为什么要等待?
还有另一个问题:为什么要学习一种完全相同的新语言来写作呢? 为了获得F#所带来的好处,而C#没有,您必须了解“力量”的另一面。 这并不容易。
John Doe :作为C#开发人员,我感谢F#的创建者在C#中实现泛型和与人脸异步的功能。 如果有人不知道,则由于F#,这些宏调整出现在C#中。
Vagif Abilov :在著名的“ Pragmatic Programmer”一书中,建议开发人员每年学习一种新的编程语言。 我不能夸耀我完全遵循了这个建议,但是我认为主要的是作者想告诉他们的内容-程序员应该随时准备修改编写程序的原则。
许多人通常将编程语言当作生活的信条来忙。 如果您从Java切换到Clojure,有时会像对待基督徒已信奉伊斯兰教一样对待他们。 实际上为什么会如此关注? 学习新的编程语言通常可以使您重新考虑我们使用旧语言的习惯。 那些熟悉F#的人用C#编写的内容有所不同。
Roman Melnikov (
neftedollar ):在F#中,OOP更正确(尽管它与C#中的OOP完全兼容),因为 鼓励在抽象接口而不是显式类上进行编程。
他们如何看待语言的创造者
Nikolay Matyushin :我曾经为.NET Core上的
Tipe提供者的支持做出了贡献。 他们很长一段时间都没有工作,一个来自俄语社区的人和我决定找出问题所在。 环顾四周,我们发现在.NET Core中,没有将程序集(对象)保存到文件中的功能-提供者使用了该功能。
我们花了一两个星期来做一个原型。 事实证明这是一个可怕的拐杖,但是部分起作用。 我们一直在github上讨论这个问题,然后Don Syme来了,写了“几小时的工作”,并修复了tipe提供者。
Vagif Abilov :Don Syme语言的创建者负担得起且民主。 我希望他参加一些俄罗斯会议,以便俄罗斯开发人员可以认识他。
罗曼·莱曼(Roman Lyman) :西米(Syme)是一个天才。 令人惊讶的是,他几乎独自创造了所有这些美丽。
帕维尔·斯米尔诺夫(Pavel Smirnov) :他是我的编程偶像。
Airat Khudaigulov :顺便说一句,Don Syme将泛型推入.NET,否则我们将坐在C#上,并且
硬编码从对象到对象的所有内容,就像Java中(部分是)一样。 Syme正在着眼于C#开发该语言,以使其与新功能兼容,这在策略上可能是正确的。 但这意味着C#中错误决策的回波也可能进入F#。 他还反对引入“深奥”的FP功能(hi Scala),并且反对重新安排语言,例如 他们可以吓other其他人,并夸大标准库(Hello C ++)。
我认为Syme是英雄。 我同意他将语言视为多范式的观点,但是我将在上面介绍该语言。
为什么语言不流行
罗曼·莱曼(Roman Lyman) :我认为该语言并不流行,因为通常来说FP不如OOP流行。 另外,还有一个进入门槛。 然后-技巧22。F#上的项目不编写,因为市场上的程序员很少,并且程序员不学习这种语言,因为市场上没有项目。
Phil Rangin :我不认识会练习函数式编程的人,但是他们更喜欢面向对象。 这里的F#尤其不幸-它只适合那些相信这些范例共生的人。
帕维尔·斯米尔诺夫(Pavel Smirnov) :由于微软的政策,许多人认为他已经死了-F#只是一个击败C#功能的平台。 但是该语言最初定位于数据科学而非工业发展。
罗马·梅尔尼科夫(Roman Melnikov) :Resharper。 对于C#,这是一个重要的主题,许多人已经花了很多时间。 没有解析器,用C#编写会有点恶心,您需要用笔写很多东西,例如突出显示分配。 收割者减轻了糖浆的很多痛苦。 F#并没有这样的痛苦,但是那些怀有尖锐态度的人无法体会不依赖绘图的语言的所有魅力。
Vagif Abilov :在我看来,Scala成功背后的滞后原因在于微软的主导地位,而微软的主导地位仍然决定了Windows平台的优先级。 尽管F#由Microsoft Research开发,但它始终被公司定位为发烧友的语言。 Microsoft的度量标准显示了根据当前销售额开发特定技术的经济可行性,当然,根据这些度量标准的任何SharePoint看上去都比F#更具吸引力。 但是一滴水会磨掉一块石头。
菲尔·兰金(Phil Rangin) :我相信他会解雇。 .NET的所有功能,加上历史上最现代的语法和最惯用的方法,无不为之震撼。
罗曼·梅尔尼科夫(Roman Melnikov) :前景是惊人的。 例如,由于类型提供程序,F#正在逐步进入数据分析。 js和elmish魔术库(本质上是.NET的Elm)中有编译器。
Miguel De Icaza积极支持F#,在Xamarin中,他的支持一直像C#。 ErlangCore中有一个编译器,它也非常酷。 在F#中,您可以编写完整的后端和前端。
SAFE-Stack是一个怪异的东西,带有类型化的api调用,在websockets(Elmish.Bridge)之上的很酷的包装器以及更多其他东西。
Vagif Abilov :我很高兴使用F#。 我在挪威的一个广播项目中工作,我们的系统将电视和广播节目的媒体文件上传到“云”中,以使它们可用于从计算机和移动设备进行查看和收听。 该系统使用F#编写,并使用Akka.NET。 这不是我们组织中唯一使用F#的项目,特别令人高兴的是,此类项目的数量正在增长,并且愿意切换到该语言的开发人员的数量也在增加。
F#适用于什么?
Phil Rangin :F#非常适合AI开发。 这种语言的字面意思是使我摆脱困境并专注于主要事物。 当您执行AI时,您的任务是规划对机器行为的思考方式。 在这种情况下,代码是您的中间语言,无法表达过于复杂的内容。 在这里,F#能够如此抽象,以至于不会干扰您和您的汽车制造历史。
Vagif Abilov :它适用于任何任务,尤其
擅长领域建模任务。 在去年对Habré的采访中,我毫不客气地说,功能语言更适用于算法和后端,而在较小程度上则不适用于编程用户界面和网页。
然后,在评论中,有人注意到有这样一种功能语言Elm,它是专门为编程Web页面编写的。 评论员绝对正确。 从那以后,我开始使用Fable,它使您可以通过在JavaScript中编译Web应用程序以F#编写。 F#+ Fable(和Fable-Elmish库)的组合带来了令人惊奇的体验,为像我这样不懂CSS的开发人员打开了对Web编程的访问。
Pavel Sirnov :数据驱动的开发-一种支持类型提供程序的简洁FP语言。 演员模型-标准库中的MailboxProcessor是一个童话。
罗曼·梅尔尼科夫(Roman Melnikov) :它完美解决了网络任务,并与
react组件集成在一起。 数据分析和机器学习(
fslab.org )的任务,ETL任务和业务逻辑设计任务正在
解决 -类型系统允许您编写,以确保没有错误的状态。
很棒的解析任务(Fparsec)。 非常适合编写自己的语言。 相同的TypeScript最初是用F#编写的。
编写了用于GPU的
代码 。
我自己在计算机上写fsx脚本,而不是bash和python。
是的,在微控制器下您将无法获得它。 但是我认为很多人可以不用它。
在哪里获取信息
书本
互联网
电报
关于社区的几句话
罗曼·利曼(Roman Liman) :社区很酷,每个人都渴望为钱而写F#,因此,所有新来者都极大地帮助了社区,增加了他们找到工作的机会。
Phil Rangin :危险的
崇拜者 。 但是他们是对的。
帕维尔·斯米尔诺夫(Pavel Smirnov) :俄语社区F#是一个非常舒适的地方。 最重要的是,我喜欢它们对他们的语言无动于衷,就像其他知名的生态系统一样。
尼古拉·马图申(Nikolai Matyushin) :也许是因为该语言不是很流行,而且有毒的人不会流连忘返。
罗马·梅尔尼科夫(Roman Melnikov) :有些戏剧不会影响语言。 但是生活变得更加有趣。