问题标签 [design-rationale]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
precision - IEEE-754 单精度和双精度格式是如何确定的?
我对如何确定这些感兴趣:
- 单精度有:8 位 e 和其余(23 位)是尾数
- 双精度:11 位 e 和其余(52 位)是尾数 ofc 有 1 位符号。
那么如何确定尾数的位数,以及e的位数。我想这是菜鸟问题,但我想知道答案。
c - 为什么 drand48() 和朋友已经过时了?
毕竟,它们似乎优于标准的 libc rand()。我错过了什么吗?
(我花了一些时间在网上搜索这个问题,我能找到的这个问题的唯一其他实例是在分布偏差的背景下,并且没有得到答案。)
rand() 和 drand48() 的手册页似乎也不一致。第一个推荐第二个,第二个声明它已经过时,应该使用第一个。(不过,公平地说,许多了解 PRNG 背后数学的人对这些函数的手册页有疑问,因为它们措辞不佳,在某些情况下是错误的。)
尽管如此,我仍然找不到“过时”状态的理由。
java - 使用按方法/字段访问规范的基本原理是什么?
在 C++ 中,字段或方法的访问说明符基于其在先前声明的第一个访问说明下的位置:
Java 通过将访问说明符添加到每个方法/字段来指定访问的设计原理是什么?
python - 为什么 [line in open("text.txt")] 会产生换行符?
(注意:我不是想改变任何东西——只是想理解)
查看在 python 中读取文件的解决方案,每次都应该删除换行符:
虽然直观的行为(根据一些关于此的问题的受欢迎程度来判断) 只是产生剥离的线条?
这背后的原因是什么?
- 编辑 -
诚然:“直觉”是主观的。然而,“一致”就不是那么回事了。显然,其中的“线”概念与"line1\nline2".splitlines()
由以下处理的概念不同iter(open("text.txt"))
:
很确定人们确实被这个抓住了。
所以我错了:也许我的直觉正好符合splitlines
解释:拆分的东西不应该包括分隔符。也许我的问题的答案不是技术性的,而更像是“因为 PEP-xyz 被不同的人批准而不是 PEP-qrs”。也许我应该将它发布到一些 python 语言论坛。
java - Java中的FilterWriter和Writer有什么区别?
来自https://docs.oracle.com/javase/7/docs/api/java/io/Writer.html和https://docs.oracle.com/javase/7/docs/api/java/io/FilterWriter .html,我发现这FilterWriter
是一个抽象类,它扩展Writer
并且没有额外的方法。
我只是好奇:
- 定义
FilterWriter
为精确副本的Writer
基本原理是什么? -
FilterWriter
和有什么区别Writer
?
c++ - std::promise::set_{value|exception}_at_thread_exit 的用例
我什么时候必须使用std::promise::set_value_at_thread_exit
/ std::promise::set_exception_at_thread_exit
over std::promise::set_value
/ std::promise::set_exception
?
唯一的区别是前者保证只有thread_local
在调用线程的 s 被销毁时才准备好相关的未来。但是,我想不出任何有用的非合成示例。
c# - 为什么编译器认为 Environment.Exit 可以返回?
示例代码:
它不会编译,因为编译器认为执行可以从 Exit() 返回。编译器显然是错误的。
没有技巧。System.Environment.Exit()
是真的。
返回不仅完全不合逻辑System.Environment.Exit()
,而且我跟踪了代码,它最终调用ExitProcess(exitCode);
了无法返回的方法。
c++ - 引用一个空的可选值
我已经多次看到以下模式:
这与适当的命名空间和命名相结合,为t
变量的用户提供了一个new
令人愉快的接口(你可以看到它在这里工作。
现在,std::aligned_storage
很简洁,但是 C++17 为我们提供了一个用于存储与对象生命周期分割的新工具,即std::optional
.
但是,访问std::optional
(value()
和operator*
) 值的两种方法都需要一个值才能实际存在。否则value()
将 throw std::bad_optional_access
,而operator*
将触发未定义的行为(根据[optional.observe]§5中的requires子句)。
std::optional
以某种方式仍然可以使用这种用法吗?
如果没有,阻止它的原因是什么?
haskell - 为什么 <$> 是左结合的?
fmap
也是<$>
因为它是$
函子范畴中的函数应用( )。
然后我想,在那种情况下<*>
是应用函子类别中的函数应用程序,这应该可以工作:
因此,<$>
仅适用于因为fmap
for 函数恰好是后合成,所以(+5) <$> (*10)
变成(+5) . (*10)
然后应用于[1,2,3]
.
然而,在我看来,所有应用程序运算符(<<=
包括)的左关联性似乎是一个糟糕的设计选择,尤其是在他们认识到与$
已经右关联的相似性之后。还有其他原因吗?
c++ - 为什么`std::basic_ios` 有一个公共构造函数?
IMO,类具有公共构造函数的唯一原因是在程序中使用该类的独立实例。如果一个类的存在只是为了让其他类从它派生出来(似乎是这种情况basic_ios
),那么该类的所有构造函数都应该是protected
. 的构造函数std::ios_base
都受到保护。但是,出于某种原因,该标准的设计者basic_ios
公开了这一构造函数。
basic_ios
被用作几种流类型的基类,我无法想象一个用例,你会有一个至少不是 abasic_istream
或basic_ostream
. 有吗?