V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  geelaw  ›  全部回复第 32 页 / 共 176 页
回复总数  3520
1 ... 28  29  30  31  32  33  34  35  36  37 ... 176  
2022-06-30 15:58:18 +08:00
回复了 fpure 创建的主题 程序员 这算不算是静态类型系统的缺憾
>我的问题是有没有可能制造一种类型系统在实际类型匹配的情况下自动地做这个类型断言

不能,因为判定“实际”类型是否匹配是不可计算问题(确切来说,否认“实际”类型匹配是不可识别问题)。如果只考虑有限定义域(因为实际的电脑是有限大小的内存之类的),确认“实际”类型匹配处于多项式层级的第二层并且是 Sigma_2 完备问题。
2022-06-29 00:47:54 +08:00
回复了 MXXXXXS 创建的主题 分享创造 组内技术分享, 准备了一篇正则的介绍文章
>多组模式之一
>使用()来表示一组模式
>
>/[(a-c)(e-g)]/
>匹配
>
>"a", "b", "c"
>"e", "f", "g"

这似乎是误解,在 [] 里面 () 没有特别的含义,/[(a-c)(e-g)]/ 恰好匹配 abcefg() 这 8 个字符里的任意一个,等同于 /[abcefg)(]/。

>扩展阅读
>正则表达式的定义

这里你应该让读者注意实用中的正则表达式和计算理论意义下的正则表达式是不同的,实用意义的正则表达式(例如 JavaScript )的可以描述 non-regular language ,例如 /[01]*\1/ 所匹配的串的集合就不是 regular ,也不是 context-free 。再比如,零宽断言(包括 \b 等)也不能直接用计算理论意义下的正则表达式表达。

>正则表达式 R 是一种 language, P64

这是误解,正则表达式描述了一个 regular language ,但本身不是一个 language ,给定字母表的所有正则表达式的集合是另一个 language ,且后面这个 language 不是 regular 。

>JS 正则表达按照定义来看, 1-6 条可以分别对应
>2. /./对应任意字符
>3. //对应空

这是误解,2 (\varepsilon) 对应的是 //,它匹配长度为 0 的字符串,3 (\varnothing) 对应的是 /[]/,它不匹配任何字符串。

>正则表达式的局限性
>正则表达式只能处理有限的 context-free language
>像嵌套匹配的括号就没法用一个正则去描述
>是否是 context-free language 可以用 Pumping lemma 去判断

什么是“有限的 context-free language”?有限 language 都是 regular 。此外,pumping lemma 不能用来证明一个语言是 regular (可以用来证明一个语言不是 regular )。
2022-06-24 09:10:04 +08:00
回复了 oyp 创建的主题 程序员 问下大家,这种情况会不会扣钱?
肯定是不能的,但如果 PayPal 通过了交易,你可能会被催收
2022-06-21 23:35:23 +08:00
回复了 Mateverse 创建的主题 分享发现 今天(6 月 15 日)微软将会正式关闭 Internet Explorer
@yin1999 #11 可是 Windows PowerShell “自带”的 curl 是 Invoke-WebRequest ,默认也是要用 IE 的(除非用 -UseBasicParsing 取消)。
2022-06-19 12:55:52 +08:00
回复了 kgdb00 创建的主题 Linux gcc 为什么连这种代码都能编译通过?
@mingl0280 #32 我觉得您开始混淆应然和实然的问题了,从 #18 以来的问题并不考虑 argc[argv-1] 在最近常见的电脑的常见操作系统的常见编译器上是否对应 argv[argc-1]。

> argc[argv-1] = *((argc) + *((argv) - (1)))

这个想法也是错误的,argc[argv-1] 等价于 *(argc + (argv - 1)),改成 *(argc + *(argv - 1)) 是完全不同的意思,后者等价于 argc[argv[-1]],很明显也是不可移植代码。

认为指针的运算等于“地址数值”的运算也是错误的,更不能认为 p - 1 + 1 等同于 p ,最简单的例子:

int a[1] = {};
int *p = a - 1 + 1;

这段代码里 p 的初始化表达式蕴含着未定义行为,因为 a - 1 是不存在的概念。改成下面这样就没问题了:

int a[1] = {};
int *p1 = a + 1 - 1;
int *p2 = a - (-1) + (-1);
int *p3 = (int *)((uintptr_t)a - sizeof(int) + sizeof(int));

前两个版本的运算从来没有离开 a 的元素或元素之后的位置,第三个版本里,无符号数的加减运算无溢出,并且 uintptr_t 和指针之间的转换保证数值上的返程关系。
2022-06-19 11:09:35 +08:00
回复了 kgdb00 创建的主题 Linux gcc 为什么连这种代码都能编译通过?
@mingl0280 #27 您的翻译是错误的,但您的错误不止于此。

>如果其中**一个**没有越界,则结果**不**应该溢出

If BOTH the pointer operand AND the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.

这句话的意思是:如果指针运算数和结果都指向同一个数组对象里的元素或该数组对象最后一个元素之后的位置,求它的值无溢出;否则,行为无定义。

假设 (P)+N 或 N+(P) 或 (P)-N 里的 P 指向数组里的下标是 i 的元素(如果是最后一个元素之后的位置,则令 i=M 为数组里的长度),令 i+N 或 i-N 为 j (取决于运算),这个定义要求 0 <= i <= M 且 0 <= j <= M ,否则行为未定义。

以上是英语和汉语的问题。下面是数学问题

> P 是 argv ,N 是-1 ,先求得 argv-1 的指针,该指针没有越过 argv 的最后一个项,因此值合法且指向数组最后一项

#18 已经说明 argv 可以指向某数组的第一个元素(即下标是 0 的元素),此时 argv-1 是“第一个元素之前的位置”(这个概念只存在于你我的想象中,不存在于 C 语言里),您怎么会认为 argv-1 是该数组的最后一个元素呢?
2022-06-19 01:55:14 +08:00
回复了 kgdb00 创建的主题 Linux gcc 为什么连这种代码都能编译通过?
@mingl0280 #20 #21 我帮你节选了你需要关注的部分:

If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.

现在你能理解 #18 的意思了吗?
2022-06-18 14:14:32 +08:00
回复了 kgdb00 创建的主题 Linux gcc 为什么连这种代码都能编译通过?
argv[argc-1] 是正确的,这不必多说。

argc[argv-1] 是语法正确的,楼上已经解释过了。然而这段代码是错误的(不可移植),见 C89 2.1.2.2 和 3.3.6 。

2.1.2.2 规定了 int main(int argc, char *argv[]) 的实参含义,满足该要求的实现里,argv 可以是一个长度为 (argc + 1) 的数组,此时依 3.3.6 对指针加减一个整数定义,(argv - 1) 是 undefined behavior ,因为它不能指向 argv 数组的任何一个元素,也不能指向 argv 数组最后一个元素之后的位置。该 undefined behavior 不要求算出的指针被解引用。

注意 argc[argv-1] 等同于 *(argc + (argv - 1)),因此是错误的。但 *(argc + argv - 1) 就不是错误的了(除非 argc 等于 0 )。
2022-06-15 12:52:32 +08:00
回复了 James369 创建的主题 程序员 看到另外一种“图灵完备”的解释
单从这句话确实看不懂,至少我并不知道 RNN 和它“所计算的函数”是如何定义的(有很多细节会影响结论是否成立、结论是否令人意外)。

看这篇应该就明白了 https://www.sciencedirect.com/science/article/pii/089396599190080F

另外,这并不是 Turing 完备的“解释”,这句话是在利用 Turing 完备的词义,而不是在告诉你 Turing 完备的词义。(类比:这家火锅很辣,这句话没有在解释什么是“辣”,而是在利用“辣”的意思给那家火锅下判断。)
2022-06-12 02:06:37 +08:00
回复了 codingBug 创建的主题 问与答 有没有可能直接将网络盘挂载为本地磁盘?
在 This PC (也就是 Computer / My Computer )里的 Compute 额 选项卡点 Map Network Drive ,输入地址就可以了。

除了 UNC 路径(如 \\server\share ),也可以用 HTTPS ,比如 OneDrive 是 https://d.docs.live.net/ 后面跟上你的 CID 。在 Office 系列应用里,如果你让 Office 处理 OneDrive 同步,打开 OneDrive 同步的文件后另存为,出现的默认地址也是这个。
2022-06-09 17:13:37 +08:00
回复了 Livid 创建的主题 Atom GitHub 宣布会放弃 Atom 项目
@villivateur 是啊,如果有一个不基于 Electron 的 VSCode 的话我会倾向于使用那个想象中的版本。
2022-06-09 05:42:48 +08:00
回复了 Livid 创建的主题 Atom GitHub 宣布会放弃 Atom 项目
支持,天下苦 Electron 久矣
2022-06-08 01:37:00 +08:00
回复了 liuidetmks 创建的主题 程序员 什么软件会存活一百年?
软件的新版本或许很容易延续很久,然而同一个版本的软件用很多年比较难。BibTeX 算是相当古老的软件了,最近的稳定版本是 2010 年 3 月,而且学术写作会经常使用。
2022-05-17 10:09:40 +08:00
回复了 vocaloid 创建的主题 问与答 如何禁止 OneDrive 自动删除 OneNote 文档
从实用角度来说以文件的形式同步 OneNote 笔记到 OneDrive 是相当不可行的。

OneDrive 上通常的文件冲突会导致保存多个副本,或者选择一个副本保存而另一个副本删除,这无法处理多个修改的合并,为了解决该问题,Office 文档有自己的一套和 OneDrive 同步的方法。对于 OneNote 来说这是相当必要的,因为 OneNote 笔记并不是一整个文件,而是一堆文件夹和文件之间相关连组织的(一个分区是一个文件)。如果用普通文件同步的方式同步 OneNote 笔记,会有两个问题:

1. 多处修改的时候数据结构错乱,导致笔记本损坏——同理,你也不应该用 OneDrive 同步 Git 仓库,因为多处修改之后可能导致 Git 内部数据结构错乱而完全不能使用。
2. 修改一个页面导致整个分区需要重新同步。

另外移动笔记本最好不要直接移动文件,应该用 OneNote 的 Share or Move ,以及把分区 Move or Copy 的功能。

如果你想获得云端笔记本的本地版本,可以打开之后导出。
2022-05-07 05:22:52 +08:00
回复了 billowssun123 创建的主题 Windows 有没有一款软件可以同步不同软件之间的响度。
除了用响度均衡还可以用音量混合,但是我不记得 Windows 是否会记忆音量混合的比例了(可能是基于窗口 /进程的,那样的话就不能记忆;如果是基于文件名,则可以记忆,但我不记得是否会记忆)。
2022-04-27 15:03:13 +08:00
回复了 zzzkkk 创建的主题 问与答 掌握技术机密 威胁贪婪资本家要走人 要到了 8 万美元一年
@kuxuan #35 我感觉楼主说的时薪单位是人民币 🤣 因为 35*16*22*12/6.5 = 22744.6154
2022-04-25 15:29:21 +08:00
回复了 albert0yyyy 创建的主题 Windows win7 上的 onedrive 怎么和 win10/11 上不一样?
占位符功能是 Windows 8 引入,Windows 10 去掉后又重新引入的。
2022-04-07 08:51:01 +08:00
回复了 zeronofreya 创建的主题 问与答 windows 上的硬链接修改内容的疑问?
因为 Photoshop 使用了保存、删除、重命名的安全保存操作序列——如果直接写文件,可能会出现 Photoshop 写到一半崩溃,导致文件完全损坏的情况。

Windows 文件系统隧穿功能只能保持长短文件名、创建日期,不能保持硬链接,参考:
https://devblogs.microsoft.com/oldnewthing/20050715-14/?p=34923
2022-03-05 16:23:01 +08:00
回复了 huzhikuizainali 创建的主题 数学 向量乘法为什么等同于点积?
从符号上推测诸 y_i 是数(投影的长度,带符号),然后 y_i = x_i^T u 右边是列向量的转置乘列向量,即 1x1 矩阵。虽然我个人觉得把 1x1 矩阵和数等同会带来很多混乱,但这似乎是习惯了。

注意数和数相乘,就是数和自己的转置相乘,因此 (x_i^T u)(x_i^T u) = (x_i^T u)^T (x_i^T u) = u^T x_i x_i^T u ,这就是最后一个等号,其目的大概是提取左右公因式 u^T 和 u 。
1 ... 28  29  30  31  32  33  34  35  36  37 ... 176  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2501 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 52ms · UTC 00:18 · PVG 08:18 · LAX 16:18 · JFK 19:18
Developed with CodeLauncher
♥ Do have faith in what you're doing.