小编Zen*_*Zen的帖子

在同一解决方案中混合使用F#和C#的模式

我研究了很少的函数式语言,主要用于学术目的.然而,当我必须投影客户端 - 服务器应用程序时,我总是开始采用域驱动设计,严格来说是OOP.

用.Net框架编写的复杂解决方案可以使用多种语言获得优势,有时甚至超过范例.将C或C++与LUA或Python混合是一种常见的做法,有时嵌入prolog可能非常有趣.我从未试图将OOP和功能范例混合在一起.

F#是一种更新的功能和面向对象的语言,我看到在同一解决方案中将C#与F#库混合在技术上非常容易.但我想知道它是否有意义:我使用LINQ来满足我的许多功能要求.

何时以及如何,您认为将这两种语言混合在一起是一个好主意吗?我想知道是否存在一组试图这样做的模式.

你真的在C#解决方案中使用F#吗?

.net c# f# design-patterns

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

为什么Java,C#和C++没有范围?

Ada,Pascal和许多其他语言支持范围,一种子类型整数的方法.范围是有符号整数值,其范围从值(第一个)到另一个(最后一个).实现一个在OOP中执行相同操作的类很容易,但我认为本机支持该功能可以让编译器进行额外的静态检查.

我知道静态验证在一个范围内定义的变量不会"溢出"运行时,即由于输入错误,我无法进行验证,但我认为可以做一些事情.我想到了契约设计方法(Eiffel)和Spec#(C#Contracts),它们提供了更为通用的解决方案.

是否有一个更简单的解决方案,至少在编译时检查C++,C#和Java中的静态越界赋值?某种静态断言

编辑:我知道"范围"可以用于不同的目的:

  1. 迭代器
  2. 统计员
  3. 整数子类型

我会专注于后者,因为前者很容易在C*语言上映射.我考虑一组封闭的值,比如音乐音量,即从1到100的范围.我想用一个值递增或递减.我希望在静态溢出的情况下出现编译错误,例如:

volume=rangeInt(0,100);
volume=101;  // compile error!
volume=getIntFromInput(); // possible runtime exception
Run Code Online (Sandbox Code Playgroud)

谢谢.

c# c++ java typing spec#

10
推荐指数
1
解决办法
2667
查看次数

c ++ 0x概念和c#约束之间有什么区别?

C++ 0x引入了概念,基本上可以定义一种类型.它指定了类型所需的属性.

C#允许您使用" where "子句指定泛型的约束.

它们之间是否存在语义差异?

谢谢.

c# c++ constraints c++-concepts semantics

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

使用concurrent.futures一次消耗许多出列消息

我正在使用来自RabbitMQ频道的消息,我希望我一次可以消耗n个元素.我想我可以使用ProcessPoolExecutor(或ThreadPoolExecutor).我只是想知道是否可以知道池中是否有免费执行程序.

这就是我想写的:

executor = futures.ProcessPoolExecutor(max_workers=5)
running = []
def consume(message):
    print "actually consuming a single message"

def on_message(channel, method_frame, header_frame, message):
    # this method is called once per incoming message
    future = executor.submit(consume, message)
    block_until_a_free_worker(executor, future)

def block_until_a_free_worker(executor, future):
    running.append(future) # this grows forever!
    futures.wait(running, timeout=5, return_when=futures.FIRST_COMPLETED)

[...]
channel.basic_consume(on_message, 'my_queue')
channel.start_consuming()
Run Code Online (Sandbox Code Playgroud)

我需要编写函数block_until_a_free_worker.此方法应该能够检查是否所有正在运行的工作程序都在使用中.

在替代方案中,我可以使用任何阻塞executor.submit选项(如果可用).

我尝试了一种不同的方法,并在完成后改变期货清单.我试图从列表中明确添加和删除期货,然后像这样等待:

futures.wait(running, timeout=5, return_when=futures.FIRST_COMPLETED)
Run Code Online (Sandbox Code Playgroud)

这似乎不是解决方案.

我可以设置future.add_done_callback,并可能计算正在运行的实例...

任何提示或想法?谢谢.

python multiprocessing rabbitmq pika concurrent.futures

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