标签: f#

是否可以完全以托管.NET语言编写JIT编译器(本机代码)

我正在编写一个编写JIT编译器的想法,我只是想知道理论上是否有可能在托管代码中编写整个东西.特别是,一旦你将汇编程序生成为字节数组,你如何跳转到它开始执行?

.net c# f# jit

82
推荐指数
4
解决办法
5777
查看次数

F#显式匹配vs函数语法

很抱歉这个模糊的标题,但这个问题的一部分是这两种语法样式的调用:

let foo1 x = 
    match x with
    | 1 -> "one"
    | _ -> "not one"

let foo2 = function 
    | 1 -> "one" 
    | _ -> "not one"
Run Code Online (Sandbox Code Playgroud)

另一部分是两者之间的区别,当我想要使用其中一个时?

syntax f#

78
推荐指数
6
解决办法
1万
查看次数

F#:让mutable与ref

首先,我承认这个问题可能是重复的; 请告诉我

我很好奇当需要可变性时,对于那些情况,一般的"最佳实践"是什么.F#似乎为此提供了两种工具:let mutable绑定,它似乎像"大多数"语言中的变量一样工作,而参考单元(使用ref函数创建)需要显式解除引用才能使用.

有一对夫妇的情况下,其中一个是"被迫"转化为一种或另一种:.NET互操作倾向于使用可变带<-,并在工作流程的计算必须使用ref:=.所以这些案例非常明确,但我很好奇在这些场景之外创建自己的可变变量时该怎么做.一种风格比另一种风格有什么优势?(也许对实施的进一步了解会有所帮助.)

谢谢!

f# mutable

78
推荐指数
4
解决办法
2万
查看次数

从C#调用F#代码

我正在玩F#和C#,并希望从C#调用F#代码.

我设法让它在Visual Studio中以相反的方式工作,方法是在同一个解决方案中有两个项目,并在F#项目中添加C#代码的引用.这样做之后,我可以调用C#代码,甚至在调试时逐步执行它.

我想要做的是F#代码来自C#而不是来自F#的C#代码.我在C#项目中添加了对F#项目的引用,但它的工作方式与以前不同.我想知道如果不手动完成这是否可行.

c# f# interop

77
推荐指数
3
解决办法
4万
查看次数

F#中命名空间和模块之间的区别是什么?

我刚开始学习F#(之前几乎没有.NET经验),请原谅我可能是一个非常简单的问题:F#中命名空间和模块之间的区别是什么?

谢谢

戴夫

编辑:谢谢Brian的回答.这就是我想知道的.只是澄清:您是否也可以打开命名空间(类似于C#using语句)?

f# namespaces module

77
推荐指数
1
解决办法
1万
查看次数

何时使用F#中的序列而不是列表?

我知道列表实际上包含值,序列是别名IEnumerable<T>.在实际的F#开发中,我何时应该使用序列而不是列表?

以下是我可以看到序列更好的原因:

  • 与其他需要的.NET语言或库交互时 IEnumerable<T>.
  • 需要表示无限序列(在实践中可能不是很有用).
  • 需要懒惰的评价.

还有其他人吗?

f# list

75
推荐指数
5
解决办法
1万
查看次数

是否(或将)C#包含副作用验证功能?

我知道C#获得了很多并行编程支持,但是AFAIK仍然没有副作用验证的构造,对吧?

我认为现在C#已经布局了,现在更棘手了.但是有计划将其纳入其中吗?或者F#是唯一具有副作用验证结构的.NET语言吗?

.net c# parallel-processing f# immutability

72
推荐指数
3
解决办法
1万
查看次数

C#默认关键字的F#中的等价物是什么?

我正在寻找相当于C#的default关键字,例如:

public T GetNext()
{
    T temp = default(T);
            ...
Run Code Online (Sandbox Code Playgroud)

谢谢

c# f# default keyword c#-to-f#

72
推荐指数
2
解决办法
8835
查看次数

F#中的应用程序架构/组合

我最近在C#中将SOLID做到了非常极端的水平,并且在某些时候意识到我现在基本上没有做太多的事情.在我最近再次开始研究F#之后,我认为对于我现在正在做的很多事情,它可能是更合适的语言选择,所以我想尝试将一个真实的C#项目移植到F#作为概念的证明.我想我可以推出实际的代码(以一种非惯用的方式),但我无法想象一个架构会是什么样的,它允许我以与C#类似的灵活方式工作.

我的意思是我有很多小类和接口,我使用IoC容器编写,我也使用了像Decorator和Composite这样的模式.这导致(在我看来)非常灵活和可演化的整体架构,使我能够在应用程序的任何位置轻松替换或扩展功能.根据所需更改的大小,我可能只需要编写一个新的接口实现,在IoC注册中替换它并完成.即使更改更大,我也可以替换部分对象图,而应用程序的其余部分只是像以前一样.

现在使用F#,我没有类和接口(我知道我可以,但我认为这与我想要进行实际函数式编程的时间不同),我没有构造函数注入,而且我没有IoC容器.我知道我可以使用更高阶函数做类似Decorator模式的东西,但这似乎并没有给我带有构造函数注入的类的灵活性和可维护性.

考虑这些C#类型:

public class Dings
{
    public string Lol { get; set; }

    public string Rofl { get; set; }
}

public interface IGetStuff
{
    IEnumerable<Dings> For(Guid id);
}

public class AsdFilteringGetStuff : IGetStuff
{
    private readonly IGetStuff _innerGetStuff;

    public AsdFilteringGetStuff(IGetStuff innerGetStuff)
    {
        this._innerGetStuff = innerGetStuff;
    }

    public IEnumerable<Dings> For(Guid id)
    {
        return this._innerGetStuff.For(id).Where(d => d.Lol == "asd");
    }
}

public class GeneratingGetStuff : IGetStuff
{
    public IEnumerable<Dings> For(Guid id)
    {
        IEnumerable<Dings> dingse;

        // somehow knows how to …
Run Code Online (Sandbox Code Playgroud)

f# inversion-of-control composition solid-principles

72
推荐指数
1
解决办法
5240
查看次数

F#在科学计算中的表现

我很好奇F#性能与C++性能的对比情况如何?我问了一个关于Java的类似问题,我得到的印象是Java不适合重编码.

我已经读过F#应该具有更高的可扩展性和更高的性能,但这种真实性能与C++相比如何呢?关于当前实施的具体问题是:

  • 浮点数有多好?
  • 它是否允许矢量指令
  • 对优化编译器有多友好?
  • 它有多大的记忆足迹?它是否允许对内存位置进行细粒度控制?
  • 它是否具有分布式内存处理器的容量,例如Cray?
  • 在涉及大量处理的计算科学中,它可能具有哪些特征?
  • 是否有使用它的实际科学计算实现?

谢谢

c++ parallel-processing performance f# scientific-computing

71
推荐指数
6
解决办法
2万
查看次数