草庐IT

c# - C#异步/等待如何与更通用的构造相关,例如F#工作流程还是monad?

C#语言设计一直(从历史上)一直致力于解决特定问题,而不是寻找解决潜在的一般性问题:例如,参见http://blogs.msdn.com/b/ericlippert/archive/2009/07/09/iterator-blocks-part-one.aspx中的“IEnumerablevs.协程”:Wecouldhavemadeitmuchmoregeneral.Ouriteratorblockscanbeseenasaweakkindofcoroutine.Wecouldhavechosentoimplementfullcoroutinesandjustmadeiteratorb

c# - C#异步/等待如何与更通用的构造相关,例如F#工作流程还是monad?

C#语言设计一直(从历史上)一直致力于解决特定问题,而不是寻找解决潜在的一般性问题:例如,参见http://blogs.msdn.com/b/ericlippert/archive/2009/07/09/iterator-blocks-part-one.aspx中的“IEnumerablevs.协程”:Wecouldhavemadeitmuchmoregeneral.Ouriteratorblockscanbeseenasaweakkindofcoroutine.Wecouldhavechosentoimplementfullcoroutinesandjustmadeiteratorb

c# - 避免嵌套 try catch block 的模式?

考虑这样一种情况,我有三种(或更多)执行计算的方法,每种方法都可能因异常而失败。为了尝试每次计算直到找到成功的计算,我一直在执行以下操作:doubleval;try{val=calc1();}catch(Calc1Exceptione1){try{val=calc2();}catch(Calc2Exceptione2){try{val=calc3();}catch(Calc3Exceptione3){thrownewNoCalcsWorkedException();}}}是否有任何公认的模式可以更好地实现这一点?当然,我可以将每个计算都包装在一个失败时返回null的辅助方法中,然后只使

c# - 避免嵌套 try catch block 的模式?

考虑这样一种情况,我有三种(或更多)执行计算的方法,每种方法都可能因异常而失败。为了尝试每次计算直到找到成功的计算,我一直在执行以下操作:doubleval;try{val=calc1();}catch(Calc1Exceptione1){try{val=calc2();}catch(Calc2Exceptione2){try{val=calc3();}catch(Calc3Exceptione3){thrownewNoCalcsWorkedException();}}}是否有任何公认的模式可以更好地实现这一点?当然,我可以将每个计算都包装在一个失败时返回null的辅助方法中,然后只使

multithreading - 我可以限制 Haskell 中每个函数/monad/线程的内存使用吗?

我正在从事一个旨在作为服务工作的研究编译器项目。其中一项要求是某些用户在处理其调用时可能具有有限的内存使用量(例如,“来自IPa.b.c.d的调用可能使用多达30mb的堆内存”)。我的原型(prototype)实现,用C语言编写,简单地使用了一个内存池,而不是直接使用malloc'ing(由于有效的类型,实际上很难做到正确)。不过,手动内存管理。在Haskell中是否有任何方法可以通过限制函数、monad或轻量级线程上的堆使用来实现这一点?(我会接受可能允许我这样做的其他功能语言的建议。) 最佳答案 在最新版本的GHC中,可以使用G

multithreading - 我可以限制 Haskell 中每个函数/monad/线程的内存使用吗?

我正在从事一个旨在作为服务工作的研究编译器项目。其中一项要求是某些用户在处理其调用时可能具有有限的内存使用量(例如,“来自IPa.b.c.d的调用可能使用多达30mb的堆内存”)。我的原型(prototype)实现,用C语言编写,简单地使用了一个内存池,而不是直接使用malloc'ing(由于有效的类型,实际上很难做到正确)。不过,手动内存管理。在Haskell中是否有任何方法可以通过限制函数、monad或轻量级线程上的堆使用来实现这一点?(我会接受可能允许我这样做的其他功能语言的建议。) 最佳答案 在最新版本的GHC中,可以使用G

c++ - 从 C++ 到 Haskell 类和状态

我必须转换这个C++代码classA{public:intx_A;voidsetX_A(intnewx){x_A=newx;}voidprintX_A(){printf("x_Ais%d",x_A);}};classB:publicA{public:intx_B;voidsetX_B(intnewx){x_B=newx;}voidprintX_B(){printf("x_Bis%d",x_B);}};main(){AobjA;BobjB;objA.setX_A(2);objA.printX_A();objB.printX_A();objB.setX_B(5);objB.printX_B

c++ - 从 C++ 到 Haskell 类和状态

我必须转换这个C++代码classA{public:intx_A;voidsetX_A(intnewx){x_A=newx;}voidprintX_A(){printf("x_Ais%d",x_A);}};classB:publicA{public:intx_B;voidsetX_B(intnewx){x_B=newx;}voidprintX_B(){printf("x_Bis%d",x_B);}};main(){AobjA;BobjB;objA.setX_A(2);objA.printX_A();objB.printX_A();objB.setX_B(5);objB.printX_B

c++ - C++ 中的 Monad 接口(interface)

我目前正在学习一点点Haskell并开始弄清楚monad是如何工作的。由于我通常编写C++代码,并且我认为monad模式(正如我现在所理解的那样)在C++中使用也非常棒,例如用于future等,我想知道是否有一种方法可以实现接口(interface)或基类来强制正确重载函数bind和return(原因与C++的return不同)用于派生类型?为了更清楚地说明我在想什么:考虑我们有以下非成员函数:autofoo(constintx)const->std::string;还有一个成员函数bar对于不同的类有不同的重载:autobar()const->const*Monad;如果我们现在想做

c++ - C++ 中的 Monad 接口(interface)

我目前正在学习一点点Haskell并开始弄清楚monad是如何工作的。由于我通常编写C++代码,并且我认为monad模式(正如我现在所理解的那样)在C++中使用也非常棒,例如用于future等,我想知道是否有一种方法可以实现接口(interface)或基类来强制正确重载函数bind和return(原因与C++的return不同)用于派生类型?为了更清楚地说明我在想什么:考虑我们有以下非成员函数:autofoo(constintx)const->std::string;还有一个成员函数bar对于不同的类有不同的重载:autobar()const->const*Monad;如果我们现在想做