小编Gre*_*ite的帖子

跨平台是Google的Protocol Buffer在实践中处理浮点类型的方式吗?

Google的协议缓冲区允许您在邮件中存储浮点数和双精度数.我查看了实现源代码,想知道他们是如何以跨平台的方式设法做到这一点的,我偶然发现的是:

inline uint32 WireFormatLite::EncodeFloat(float value) {
  union {float f; uint32 i;};
  f = value;
  return i;
}

inline float WireFormatLite::DecodeFloat(uint32 value) {
  union {float f; uint32 i;};
  i = value;
  return f;
}

inline uint64 WireFormatLite::EncodeDouble(double value) {
  union {double f; uint64 i;};
  f = value;
  return i;
}

inline double WireFormatLite::DecodeDouble(uint64 value) {
  union {double f; uint64 i;};
  i = value;
  return f;
}
Run Code Online (Sandbox Code Playgroud)

现在,一个重要的附加信息是这些例程不是进程的结束,而是对它们的结果进行后处理,以便以小端顺序放置字节:

inline void WireFormatLite::WriteFloatNoTag(float value,
                                        io::CodedOutputStream* output) {
  output->WriteLittleEndian32(EncodeFloat(value));
}

inline void WireFormatLite::WriteDoubleNoTag(double value,
                                         io::CodedOutputStream* …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point cross-platform protocol-buffers ieee-754

22
推荐指数
1
解决办法
5104
查看次数

reactive-banana:包含行为最新值的触发事件

假设我有一个事件触发器,我想在触发时做两件事.首先,我希望它更新某些行为的价值.其次,如果满足其他条件,我希望它使用更新的行为值触发另一个事件send_off.以代码形式表示,假设我有

trigger :: Event b
trigger = ...

updateFromTrigger :: b -> (a -> a)
updateFromTrigger = ...

conditionFromTrigger :: b -> Bool
conditionFromTrigger = ...

behavior :: Behavior a
behavior = accumB initial_value (updateFromTrigger <$> trigger)

send_off :: Event a
send_off = ?????? (filterE conditionFromTrigger trigger)
Run Code Online (Sandbox Code Playgroud)

然后问题是:我把什么放在?????? 以便send_off发送最新的行为值,我的意思是包含刚刚应用于它的触发器更新的值.

不幸的是,如果我理解正确,行为的语义是这样的,更新的值不会立即可用,所以我这里唯一的选择是复制工作并重新计算行为的更新值,以便我可以立即使用它在另一个事件中,即填写?????? 喜欢的东西

send_off =
    flip updateFromTrigger
    <$>
    behavior
    <@>
    filterE conditionFromTrigger trigger
Run Code Online (Sandbox Code Playgroud)

现在,有一种感觉我可以通过使用Discrete而不是Behavior来立即使我 …

haskell frp reactive-programming reactive-banana

16
推荐指数
1
解决办法
363
查看次数

可以链接到黑线鳕的锚点吗?

链接到URL时,可以提供一个标签,指明读者将看到的内容; 例如,<http://www.haskell.org haskell>链接文本将具有"haskell".不幸的是,文档没有提供标记链接到锚点的明显方法; 链接"Data.FooBar#foo"将为链接文本提供"Data.FooBar",这样读者就不会明白此链接是否会发送到锚点.

所以我的问题是:是否有一个技巧来标记链接到黑线鳕的锚点,或者这是不可能的?

haskell haddock

16
推荐指数
1
解决办法
363
查看次数

谷物与二进制

我所知道的用于在Haskell中序列化和反序列化数据的两个主要竞争包是二进制和谷类.什么时候应该选择其中一个包呢?还是有其他我忽视的选择?

serialization haskell deserialization

11
推荐指数
1
解决办法
1854
查看次数

读取TChan会导致阻塞还是轮询?

首先,一些背景.我想要一个队列,我想以两种不同的模式之一操作.在第一种模式中,我希望能够检索队列中存在的元素,但是如果没有元素则不能阻止.在第二种模式中,我希望能够阻塞,直到队列中有一个元素.(我知道我可以为每种模式使用专门的机制,但我想分解一些常用代码,因此如果我可以对两种操作模式使用相同的机制,那将是最简单的.)

我可以使用Chan,但根据我不应该使用的文档,isEmptyChan因为它可能会因为死锁而被弃用.这让我失望了TChan.该tryReadTChan函数为我提供了我想要的第一种模式(即我可以检查元素是否存在而没有阻塞),但我不确定究竟是什么readTChan.我的心智模型是该atomically块将继续重试,直到通道中存在一个元素,这意味着它将忙于循环浪费CPU周期; 这是不同的readChan(即,非STM版本)(如果我理解正确的话)将实际阻止线程的执行,直到元素可用,因为运行时线程调度程序理解MVars.

那么,TChan就像Chan在,如果我使用readTChan了运行时是足够聪明,直到值可用不安排调用线程?或者它会浪费大量的CPU周期不断轮询到一个值到达?

haskell ghc stm

10
推荐指数
2
解决办法
476
查看次数

如何确定是将Haskell库作为一个包还是多个包发布?

有时,项目可以组织为单个包或多个包.当一个人处于这种情况时,应该如何决定哪个选项更好?

haskell packaging

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