V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  FrankHB  ›  全部回复第 29 页 / 共 92 页
回复总数  1830
1 ... 25  26  27  28  29  30  31  32  33  34 ... 92  
2021-04-06 04:12:27 +08:00
回复了 Jooooooooo 创建的主题 程序员 Google 和 Oracle 的官司终于打完了
标准结局。
Public API 这种存在意义就是能拿出来给外人 use 的东西要是因为 copyrightable 就能随便加条件事后算账,那就翻天了……
2021-04-06 04:08:44 +08:00
回复了 xiaotianhu 创建的主题 程序员 (开源的 Nintendo Switch 模拟器)每当看到这样的项目就很羡慕
羡慕个啥。
牛逼到一定程度前你会发现总是还有人比你更牛逼,你就不算个什么事儿;
等更加牛逼到不需要在乎这个的时候,就发现问题不是有没有人比你牛逼了,而是又方便自己干完的活早干完了,剩下的活尽是长期找不到足够的资源(比如能跟得上你陪你牛逼一起干活的)没法收场的;
一个人什么都得干,弃坑了又总是发现更多一个人干不完的牛逼玩意儿,反而更苦逼……
2021-04-06 03:54:29 +08:00
回复了 Frankhong 创建的主题 Java 刚学多线程,请问下面这段程序为什么停不下来啊?
@az467 原问题是“说的不清楚……具体是什么原因呢?”光看这里,你回答一个具体实现的表现倒也算是对路。
但后面的疑问很明显是为什么允许这样做。拿实现行为就没解决问题。
关键是什么允许,直接的答案就是 JLS 里的规则。(事实上这段 JSR133 里也有。)
虽然跟你之后说的一样,最好看看整个 JMM,但直接原因是 JLS 就确定的,到这里跟 JVM 还不需要有关系。
(可能这里是该强调一下所谓编译器包括 JVM 的 JIT 而不只是 javac 。不过没看出一开始这里是不是有疑问。)
拿 JSR133 主要是说明背景。具体来说,用到的是 Chapter 13 里的第一段文字描述。
Figure 27 是一个典型的例子,有了 synchronize 都允许不让出 CPU,比这里的条件还强。(另外别忘了 happens before 在线程内就有效,不过这个和这里的问题没直接关系。)
(后面那个 Figure 28 例子是反过来限制优化的,和这里也不直接相关。)
重新回顾重点:不是“优化”(而是为什么允许优化)。实际上考虑这里仍然不需要关心“编译器怎么优化”。说白了,编译器就算不是以优化的目的变换代码,直接编译成这样按规范也没话说。
没讲清楚这条线,讲实现细节只会更混乱。
用 volatile 等避免问题也是之后的延伸话题。
(道理上 happens before 也该弄明白,但尴尬的是这个只用线程内的就能直接踩上调度问题了,又不像 C/C++ 直接有 sequence before,还不如默认知道 program order 不言自明了……)
住院用这个倒是可以,不过自觉充电是个问题。
也不需要防拆,拆下来有记录就行了。
2021-04-05 13:10:44 +08:00
回复了 Frankhong 创建的主题 Java 刚学多线程,请问下面这段程序为什么停不下来啊?
(当然 C++ 的 volatile 就够了只是说看起来的死循环不被优化没掉,多线程还是该 atomic 就 atomic 该加锁就加锁,否则 data race 了死得更难看。)
2021-04-05 13:02:42 +08:00
回复了 Frankhong 创建的主题 Java 刚学多线程,请问下面这段程序为什么停不下来啊?
怎么随便进一个楼都是各种不到点上的……
根本原因是 Java 语言不保证这里的调度公平性,所以明确允许把你 = true 饿死了不管。
这玩意儿跟可见性看起来表面上是有点关系,但不巧,Java 里这条恰恰是单独拎出来授权的:

https://docs.oracle.com/javase/specs/jls/se16/html/jls-17.html#jls-17.4.9

Programs can hang if all threads are blocked or if the program can perform an unbounded number of actions without performing any external actions.

这样设计的理由,在 JSR-133 Chapter 13 里有提,是个妥协:

https://www.cs.umd.edu/~pugh/java/memoryModel/jsr133.pdf

(老实说这样设计挺欠扁的,虽然还有人居然认为这个“容易理解”: https://stefansf.de/post/non-termination-considered-harmful/ ←注意这人说的 C 和 C++ 在这里 undefined behavior 这个明确是错的。)

@az467 你确定这问题真经?

和你说的恰恰相反,除了 JVM 自己高兴是不是愿意这样搞,这跟 JVM 没有半点关系。
关掉 JIT 也不保证一定顶用。

@ipwx C++ 和这个明显不一样。

C++ 是明确允许 forward prograss,反面允许把整个 while 直接优化没掉而不是 blocking:

C++17 § 4.7.2 Forward progress ¶ 1

The implementation may assume that any thread will eventually do one of the following:

- terminate,
- make a call to a library I/O function,
- perform an access through a volatile glvalue, or
- perform a synchronization operation or an atomic operation.

[Note: This is intended to allow compiler transformations such as removal of empty loops, even when termination cannot be proven. — end note]

虽然只是允许,所以实现上可能刚好一样……

另外注意 C++ 这里是每线程内的约束。Java 的 volatile 自 JDK 1.4 后跟 C++11 的 std::atomic 语义类似,但这里 C++ 可是 volatile 就够了。
2021-04-05 12:09:41 +08:00
回复了 EscYezi 创建的主题 程序员 git 仓库同步到坚果云上后损坏了
公司穷到连自建 GitLab 实例都负担不起的话直接 Gitee 吧。
2021-04-05 12:01:59 +08:00
回复了 qdwang 创建的主题 程序员 Rust 最神奇的地方
@no1xsyzy 那个外行的就别提了。
GC 语言小白就算了,很难想象一个有接触正经优化编译器的居然不学无术到理解不了 uniqueness alias 的意义。
亏他老师还搞出来 call/1cc 。
(虽然 substructurual logic 确实不是什么新鲜玩意儿,Rust 用这个的动机也不是这个。)
2021-04-05 11:54:47 +08:00
回复了 qdwang 创建的主题 程序员 Rust 最神奇的地方
体感辣鸡的地方种类跟大体 C++ 差不多,程度上差距不大,比如“难学”、编译慢。
然鹅 C++ 辣鸡的地方多十倍以上,要感知到抹平差距(首先是要自觉不手贱),要求可比会用高得多了……
至于都熟练到一定程度的八成就懒得评价了,因为工程上叫搭伙的半吊子 C++ 用户闭嘴还是需要花些力气的,而 Rust 很大一部分教育的活就交给编译器了。Rust 用起来虽然恶心一点,这方面毕竟省事。(而且 C++ 不管你功力多高,整清楚个包管理确实可能是要死要活的……)
会上 SO 之类的除了 noob 大概很多是在苦于怎么让半吊子同伙闭嘴的层次上,所以好评如流也很正常。
至于再往上的……严肃点说 Rust 比 C++ 更垃圾的地方主要是没有 spec,不过 SO 之类的用户大概确实不太计较这个。
2021-04-05 11:43:12 +08:00
回复了 cxytz01 创建的主题 程序员 golang 是不是云时代的 PHP ?
PHP 是最好的语言会被狗头。
Golang 是最好的语言怕是会被打。
2021-04-05 11:21:55 +08:00
回复了 pabupa 创建的主题 C++ 请教一个 STL 的问题
@ipwx 麻烦先记清楚 map::operator[] 要求 non-const 再来科普,谢谢。

怎么这么久都没个提出来 map::operator[] 早就改用 try_emplace 定义的?

WG21 N4860
22.4.4.3 Element access
[map.access]
mapped_type& operator[](const key_type& x);
1 Effects:
Equivalent to:
return try_emplace(x).first->second;
mapped_type& operator[](key_type&& x);
2 Effects:
Equivalent to:
return try_emplace(move(x)).first->second;

真折腾源码也行,给你个现成没到处 __ 的实现好了,C++11 下实现 C++17+ API,附加保证 incomplete value_type 能用:

https://github.com/FrankHB/YSLib/blob/master/YBase/include/ystdex/map.hpp#L313
https://github.com/FrankHB/YSLib/blob/master/YBase/include/ystdex/tree.h#L1885

不过可能不如理解个外挂式 try_emplace 的逻辑顶用点:

https://github.com/FrankHB/YSLib/blob/master/YBase/include/ystdex/container.hpp#L1039
2021-04-05 11:08:45 +08:00
回复了 ufan0 创建的主题 程序员 也许是最后一次以程序员身份发帖
又不一定要是职业的。
2021-04-05 11:07:50 +08:00
回复了 ch2 创建的主题 Windows 任务管理器认为挖币软件能耗并不高
你这一个 UI 前端不是内核本来就不占什么资源吧。电源使用只看到第一个进程?
我这离谱的是 N 卡 ethminer (其实是 nsfminer )的占用率居然直接读不出来……都 20Mh/s 来着……
2021-03-31 18:23:32 +08:00
回复了 AceCandy 创建的主题 程序员 问一个关于无锁编程的问题
无锁指的是没等一直傻等在锁上,无死锁 /活锁。
CAS 只是个 primitive,自身不保证 non-blocking 。
2021-03-31 18:10:16 +08:00
回复了 yazoox 创建的主题 Google google 的一个小众工具 keep 有替换品,竞品,或者增强版么?
我是自己编译 Basilisk 装 MozArchiver 保存 MAFF 。
Pale Moon 官方版本应该也在维护。
2021-01-30 17:22:33 +08:00
回复了 lbmjsls1 创建的主题 Linux 不同版本的 Linux 编译的 c/c++程序是否通用
Linux 系统调用看 11L 。
glibc:
https://abi-laboratory.pro/?view=timeline&l=glibc
libstdc++ 在 GCC 5 以后是明确有 ABI brakage 的(为了 C++11 conformance )。比起 MSVC 已经靠谱得多了,但考虑到 Linux 上 C++ 运行时基本是当系统库部署的,基本不会打包(除非 nix/guix 那种)。但如果你已经会自己对付这种部署问题,就问不出来问通用不通用的问题了。所以凉拌。
还有库的各种 ABI bug 得看具体版本。
2021-01-16 17:59:23 +08:00
回复了 maocat 创建的主题 程序员 在尽力保证代码质量的情况下,多少行代码算大型项目
……还是提一下,cloc 看代码布局加 exclude 。
漏 exclude Doxygen 输出和中间文件的后果示例↓
46781 text files.
43547 unique files.
34322 files ignored.

github.com/AlDanial/cloc v 1.88 T=126.44 s (178.4 files/s, 38595.5 lines/s)
---------------------------------------------------------------------------------------
Language files blank comment code
---------------------------------------------------------------------------------------
SVG 9966 1542 335083 2176438
XHTML 4757 57977 23785 1116573
D 2285 30320 0 377237
TeX 1919 83885 259 254049
C/C++ Header 608 33011 113036 112729
JavaScript 2451 207 274 64269
C++ 161 6744 6978 37622
C 4 588 384 9949
XML 80 17 68 9509
Windows Module Definition 6 4 0 5135
HTML 258 0 4369 4895
diff 1 207 1565 2904
CSS 5 350 48 1943
MSBuild script 1 0 0 1670
Bourne Shell 24 243 354 1208
make 14 325 327 900
Markdown 4 306 0 381
XSLT 1 28 2 202
YAML 1 2 11 83
DOS Batch 14 13 0 62
Python 1 0 0 38
JSON 1 0 0 6
---------------------------------------------------------------------------------------
SUM: 22562 215769 486543 4177802
---------------------------------------------------------------------------------------
2021-01-16 17:29:35 +08:00
回复了 maocat 创建的主题 程序员 在尽力保证代码质量的情况下,多少行代码算大型项目
@ripperdev 大约说明废话太多。
我一个就几千行的( https://github.com/FrankHB/YSLib/blob/master/YFramework/source/NPL/NPLA1Forms.cpp )就能让 GCC 爆炸,4 小时吃 8GB RAM 然后链接失败,不得不 -fno-lto -fno-var-tracking-assignments (
(这还是拆过的,之前直接炸穿 i686 cc1plus 地址空间了。)
2021-01-16 17:25:32 +08:00
回复了 maocat 创建的主题 程序员 在尽力保证代码质量的情况下,多少行代码算大型项目
楼上某位,一个 cloc . 搞定的东西怎么还要敲 find ……
1 ... 25  26  27  28  29  30  31  32  33  34 ... 92  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1088 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 296ms · UTC 18:56 · PVG 02:56 · LAX 11:56 · JFK 14:56
Developed with CodeLauncher
♥ Do have faith in what you're doing.