V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  secondwtq  ›  全部回复第 77 页 / 共 123 页
回复总数  2460
1 ... 73  74  75  76  77  78  79  80  81  82 ... 123  
2019-10-27 13:58:34 +08:00
回复了 sunnyadamm 创建的主题 问与答 冬天用鼠标手冷你们如何解决?忍着?
TNT 了解一下
2019-10-27 13:07:13 +08:00
回复了 shaoyaoju 创建的主题 程序员 在 Map 遍历中使用 async 函数
恭喜你重新实现了 mapM 的某个实例
Office 365 的 web 版我在公司用过,不知道是版本比较老还是为啥,感觉不好用,相比而言 Google 的 GSuite 在浏览器里效果好很多

用不用 Linux 桌面没必要吵,就是一个基于实际情况的选择,你要是用 Windows 软件为主那就装 Windows + Linux 虚拟机,用 Linux 软件为主就用 Linux + Windows 虚拟机,前者比后者会多一个虚拟机的钱

当然有条件的话可以不用虚拟机,我们公司虽然依赖 Office (包括 Outlook,Skype,OneNote,Sharepoint 甚至什么 Teams ),一般是用 Windows 本,开发的话再给个台式机就能装 Linux 了
2019-10-27 03:25:05 +08:00
回复了 Kcelone 创建的主题 git git 技能复习进阶(开局一个键盘,内容全靠抄)
@Allianzcortex 就是不能做。实际上有些项目是鼓励控制 commit size 的
2019-10-27 03:22:45 +08:00
回复了 crella 创建的主题 问与答 自写计算器的疑惑
@winterbells @Sanko
给楼主打个预防针

我发 #2 之前第一行写的是“编译原理”,但是发之前最后改成了“解释器”
因为之前看了 https://v2ex.com/t/607304 这个帖子,就有直接回复“编译原理”的话是非常 misleading 的直觉

首先,楼主“编程的概念太宽泛”这个观察是对的,有很多人(包括很多面向工资编程的人)认为世界上有 10 种人,一种是程序员,另一种是非程序员。我认为所谓“程序员”和“非程序员”之间并不存在明确的界限,非要说的话只有“面向工资编程”和不是面向工资编程的区别
具体来说,很多看上去和编程无关的东西,都是要涉及到编程的,比如 VFX 领域其实很先进,已经普及了 Dataflow Programming,Visual Programming 和以 Python+Qt 为基础的辅助工具。普通人可能用个 AE,虽然 AE 智商兼容性稍微高点,不过也是要写表达式的。
在所谓 “H5” 流行起来之前的桌面时代很长一段时间 Flash 有很高的地位,Flash 的编程内容就更直接了。
还有 Apple 买的 Workflow,虽然 Apple 自己说这东西做的是“task automations ... without requiring familiarity with programming”,但是这东西本质上就是个 Visual Script
那为什么 Apple 要说它不需要“programming”呢?就是因为大众对“programming”这个东西有一种本能的距离感,你只要提了,那我觉得你这东西门槛高,不是给我用的,我就不用了。(这其实也多亏了 Apple 等公司多年来对用户苦心孤诣的“教育”)所以 Apple 要让 Workflow 在大众中流行起来,就必须明确和“programming”划清界限,哪怕这纯属一个此地无垠三百两的行为。

而杀伤力最大的例子,其实是 Excel,你用 Excel/Google Sheets 等软件时用过 公式 么?用了,你就写过程序
(这不是我自己 claim 的,至少 Shriram Krishnamurthi 和 Simon Peyton Jones 都持类似观点)
甚至广义的说,所有的管理人员都是程序员,只不过他们编程的不是机器,而是人而已
(这也就是前两天那个帖子 https://v2ex.com/t/611574 的终极解决方案:扩大“程序员”一词的定义,解构“程序员”这个概念本身

而社会主流,甚至包括 V 站,对“程序员”的定义是如此之狭窄,就好象只有写 Java Web 才能叫写程序,前端怎么能叫程序员呢(那是切图的,跟我念 qie 切 tu 图 de 的)?做硬件怎么能叫程序员呢?美术怎么能叫程序员呢?音乐人怎么能叫程序员呢?测试怎么能叫程序员呢?运维怎么能叫程序员呢?会计怎么能叫程序员呢?做科研怎么能叫程序员呢?不是,程序员就是 ATMPB 里面,写 Java Web 的那群人,给我记住了不许反驳

那么这些不是“传统”程序员的人,用的很多不是 C/Java 一类的语言,而是针对于他们自己领域(如数据处理、特效制作)的专门语言,计算机里管这东西叫 DSL ( Domain Specific Langauge )。要理解 DSL 这个词的话 ... 我好像给不出严格的定义,因为貌似并不存在。这么说吧,Excel 的公式是面向数据处理的 DSL,AE 的表达式是面向动画的 DSL,正则表达式是面向字符串匹配的 DSL,Markdown/LaTeX 等是面向文档写作排版的 DSL ( LaTeX 好像更像个数学公式 DSL ...),MATLAB 是面向数值计算的 DSL,Windows 常用的 INI 是做配置的 DSL,Shell/BAT 则是做命令行交互与自动化的 DSL,HTML 是用来描述超文本的 DSL,CSS 则是用来描述样式的 DSL。
DSL 的另一面是通用编程语言( General Purpose Language,就简称 GPL 吧),就是大众认知中的 C,C++,Java 这一类。一个 GPL 在使用了特定的框架和库之后其实也可以变成 DSL,比如 C++ 的 Boost 里面有个叫 Spirit 的东西,这东西可以直接在 C++ 里面写 parser (至于 parser 是啥 ...)。而 DSL 也可以变成 GPL,比如 JavaScript 一开始就是 Web 前端的 DSL,看起来是逆袭成 GPL 了(还派生出了 JSON 这个新的 DSL ),PHP 则偏后端,虽然有点 GPL 的意思,不过好像差了 JavaScript 两步

啰嗦了这么多,主要就是楼主要明白你要做的这个东西不叫计算器,叫 DSL
这个思维的转型首先要到位。举个例子,我们专业有个什么课,有一个作业就是写个计算器,作业要求其实很简单,大多数人就写了个加减乘除,稍微好一点的加了图形界面,就是楼主说的“按键的四则运算”。但是吧我有一个学弟,他就肝了几个晚上,把楼主的“多语句”“自定义变量”“自定义函数” 之类的都做出来了。当然他是有编译方面基础的,所以其实是按照 DSL 来做的,而不是“计算器”

楼主需要实现的也并不是把用户的代码放在 perl/ruby 里面跑,而是 按照实现 DSL 的方法实现一个 DSL。楼主现在路走的有点偏,你生成个脚本运行,然后还暴露在 CGI 上,就不说各路脚本小子要拿你 shell,就是写个死循环你也没办法啊,你见过哪家计算器会死循环的 ...

至于这个“实现 DSL 的方法”到底是什么,很大程度上就取决于你搜的是“编译原理”,还是“解释器”了
“编译原理”其实是一个科班课程(并且是非常局限于计算机的那种 ...),原则上会讲一个编译器(也就是 GCC )所涉及到的所有基础理论知识(之所以说是 GCC,因为 GCC 在这方面其实可以大概说是 Ruby/Perl 的超集,一般的课程安排也会更倾向于这个方向)
这是上交 ACM 班编译原理课程的课程设计: https://acm.sjtu.edu.cn/wiki/Compiler_2019,他们要实现的东西的文档: https://acm.sjtu.edu.cn/w/images/3/30/M_language_manual.pdf (该文档慎点,有减寿风险)
本质上和楼主要实现的东西是没有区别的,只是更 general 一点(比如楼主的“计算器”只支持计算数值,这个还能支持字符串操作和布尔逻辑)
真写起来的话,就这个课程设计的实现思路两只手数不过来,不过核心思路大差不差,只是选择的具体算法和工具选择不太一样。

但是不是说楼主要写计算器,就要去上这个课并且把讲的东西弄明白,划重点:人家要求的是生成“x86-64 Assembly”,并且学生做大作业是要评分的,你只要东西喂进去,算出结果来就行,写起来越短平快越好。
然后楼主去搜“编译原理”,搜出来的东西不仅可以写这个课程设计,甚至足够写 GCC——因为“编译原理”是对所有编译相关技术的(非常奇葩的)一个 umbrella term
但是楼主只是想要写个复杂一点的计算器 ...

具体来说吧,一个科班的编译原理课程,可能会教你什么呢,首先是编译器前端:什么 NFA,DFA,LL,LR,LALR,就是先把源码变成语法树,还有类型检查什么的,然后是中端,什么 IR,CFG,DFA,Alias Analysis, Dominator Tree, CSE, SROA, LICM, IPO,然后后端,Instruction Selection, Register Allocation, Instruction Scheduling
(大多数的课程一般都是大概按我上面写的顺序来的,为什么说是“一般”,因为后面有反例)
我就直说了吧,对于楼主的目的来说,我上面列的这些东西,有一个算一个,全都没用,看到了直接拉黑(我特意漏了 Symbol Table 和 Activation Record 之类,因为这些还是有用的 ...)
(哦对就算这些,一般本科也不会全都学,能学一半就不错了,SJTU 这个课貌似还是有基本的完成度的,也只是讲了基本的东西,我们专业 Compiler 课居然是选修 ...)

对于非编译器领域的人(这个“编译器领域”其实不算小 ... 做深度学习框架的其实有一半都能算,就连 Graphics 大佬,PBRT 的作者之一 Matt Pharr 也来插了一脚)来说,学“编译原理”很多时候只和前端部分沾一点边,至于后面的优化和代码生成部分,我说实话真觉得有点屠龙之计的意思 ...
并且很巧合的是,编译器领域所主要集火的中端和后端,与编译器领域之外的人主要集火的前端,虽然都是编译器里面的东西,但是是完全不同的两个东西。很多工业编译器不用 parser generator,而是直接用 Recursive Descent 堆前端,萌新不会玩,搜到啥就看啥(特别还是考虑到国内网络十分缺乏高质量的相关资源),上来就看龙书,从第一页一直看到第 302 页,然后说“编译原理”难(何况就算用 parser generator,也不需要你理解 parser generator 是怎么工作的啊)
我也很无奈啊 ...

相比而言,“解释器”的相关资料一般就友好很多,一般写“解释器教程”的,对读者的 assumption 是:熟悉某一门 GPL (没忘记 GPL 是什么意思吧 ...),但是对“编译原理”完全不了解,认为“编译原理”和编程语言的实现本身很神秘的萌新。这就很适合楼主。这类教程的最后作品一般也和楼主的“计算器”很类似。

https://v2ex.com/t/554319,https://v2ex.com/t/607304 这些帖子都出现了类似的现象

(当然严格来说,“解释器”也可以做得很复杂,不过一般意义上的“解释器”最多止于 bytecode 这一层,之后如果要做什么 JIT 之类的,这些内容就和传统意义上的“编译原理”直接重合了。)
(为什么搜“编译原理”或者“Compiler”不是正道,我再举个例子,你说你想写个 DSL,找个 Compiler 的课程看吧,结果好死不死选了 CMU 的 15-411,这就爽了,你还没理解第一个 Slides 说的“Focus on code generation and optimization”是什么意思的时候,第二节课就开始 Instruction Selection 了,然后 Register Allocation,然后第一个 Lab 就让你实现一个 Code Generator ...)
2019-10-27 00:50:13 +08:00
回复了 crella 创建的主题 问与答 自写计算器的疑惑
关键字:解释器( Interpreter )
一定要学 fq

我见过最好用的计算器是 Jupyter Notebook
另外我非常好奇你为什么会用 perl6/raku ...

"执行一万次运算时 ruby 太慢所以改为 c++写计算文件,ruby 调用 g++编译、执行" G++ 有时候可以比 Ruby 还慢 ... 虽然这里应该不会有太大问题
2019-10-27 00:28:30 +08:00
回复了 echofather 创建的主题 程序员 程序员缺少一个工具#
前端其实也事有的 https://arewefastyet.com
不过这个更有意思 http://arewechromeyet.com
2019-10-27 00:27:14 +08:00
回复了 echofather 创建的主题 程序员 程序员缺少一个工具#
2019-10-27 00:24:04 +08:00
回复了 Kcelone 创建的主题 git git 技能复习进阶(开局一个键盘,内容全靠抄)
@marco25 老哥有没有在大项目用过 magit,我感觉巨卡无比 ... 就没再用了


@wysnylc 有些时候是禁止 force push 的 ...
所以大佬这个页面点击的火花效果能不能在点链接的时候也出现 ...
我的测试表明这东西只会在我习惯性在页面乱点的时候才会出现,但是跳转的时候不会,就少了点 feel ... 你懂我意思吧
我不喜欢 Deepmind,比较喜欢用 Skynet,CABAL,LEGION,Jarvis,ctOS 等,EVA 也能凑合用
可惜了 Cortana 是微软的
另一个有意思的现象(和楼主的 append 有点关系),C/C++ 其实是没有官方推荐的变量命名规范的(可能是有,但是就算有也没法 mandate ),每个项目的规范都不太一样
于是 LLVM 一开始用了以 camelcase 为主的命名方案,具体来说是类型名,变量名(包括局部变量和成员变量),用 UpperCamelCase,函数名是 lowerCamelCase。
但是后来发现一个问题,比如我有一个变量的类型是 MemorySSAUpdater,那么按照命名规范,我不能把它命名成 MemorySSAUpdater,因为会和类型名冲突,现在的解决方案是取首字母 acronym 命名成 MSSAU。这种情况在整个仓库里十分广泛: https://github.com/llvm/llvm-project/blob/734c74ba14be0f4421ccd9f720e5b9309248e0f7/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp#L709 感受一下
但是这种命名多了就会十分奇怪,看代码必须先要熟悉这些奇怪的缩写才能看得下去

于是现在有个 proposal 就是把变量命名从 UpperCamelCase 变成 lowerCamelCase,这样我就直接命名成 memorySSAUpdater 就行了: https://llvm.org/docs/Proposals/VariableNames.html

不过 acronym 不能完全避免,任何一个专业领域都少不了 acronym,像什么 AST,CFG,BB,SCEV 之类的出现在编译器的代码中其实都正常,这些东西在学术界和工业界都有认知,问题对于一个项目来讲,很多类是项目独有的,写 acronym 就会让人摸不到头脑,至于 Loop 的变量名写成 L 之类的更是没啥必要
如果在这两者之间摇摆不定,不如结合起来一块用吧

OCaml 一般是用 underscore 的,但是语法要求一些结构(比如 Constructor 和 Module )必须以大写字母开头(语法强制的哦),于是就出现了这种 https://github.com/ocaml/ocaml/blob/79f1c734621ea75bfacaed9ea20ebef7479194b2/typing/env.ml#L77 “首字母大写的 underscore”
2019-10-26 17:51:46 +08:00
回复了 lysS 创建的主题 问与答 关于化腾更新 Linux 版 QQ 的引申思考?
最近几年时代的进程:
Web 暂时稳固了整体上第一跨平台技术栈的地位
很多应用向 Web 迁移,对非跨平台软件的依赖在逐渐变少
微软在拥抱开源的同时自己家的东西在送人头
在中国大城市的角落里,Mac 开始成为 Windows 的竞争者。虽然某果最近也在开始送人头
同样对于中国来讲,川普在送人头
Linux 桌面自身整体上风平浪静
2019-10-26 13:04:31 +08:00
回复了 penghh 创建的主题 问与答 你们是在哪购买正版软件的?
App Store
2019-10-26 11:37:36 +08:00
回复了 oahebky 创建的主题 程序员 有哪些用起来就像飞机仪表盘一样专业 IDE(或组合)
体量上能和 VS 比的 IDE 我还见过两个,Eclipse 和 Delphi
Xcode 算小弟吧

Adobe (Macromedia) 其实也有类似产品,比如 Flash
Unreal 和 Unity 都有自己的 IDE 的,不过编程体验如何我就不知道了(我跑过 Unreal 的编辑器,不知道是不是打开方式不对,1066 开起来居然巨卡无比,就没再搞了)
2019-10-26 11:26:42 +08:00
回复了 oahebky 创建的主题 程序员 有哪些用起来就像飞机仪表盘一样专业 IDE(或组合)
SideFX Houdini
不过这个用的组件库得换套样式,搞成 Adobe 那样的
VTune, Instruments
VTune 建议用老版,新版貌似是 Electron 的,信我,现在的前端绝对没人能写出你要的效果(哦对,有一个例外是浏览器自带的 Developer Tools,虽然这仪表盘有点卡 ...)
SuperColider,我没用过只看过维基
IDA 应该也能算

另外还有实物仪表盘,比如 3Dconnexion,Loupedeck。不过这个很明显不“程序员”。
我理想中的输入设备其实是一个每个键帽都自带一个 LCD (嘛,其实 OLED 更好)屏的键盘
2019-10-22 23:24:20 +08:00
回复了 CrisTao 创建的主题 程序员 最近打游戏发现视力影响好大
Life Pro Tip:只用右眼看屏幕,这样只有右眼的视力会下降,你依然可以保留看清远处的能力

亲测 ... 左右眼视力不对称并不会在双眼都睁开的时候对实际看到的画面有明显影响,至少比两眼都近视好得多
长期下来你就拥有了一只专门看近处的眼,和一只专门看远处的眼
半导体里面这貌似叫 Chip Specialization
2019-10-22 23:19:20 +08:00
回复了 wangyzj 创建的主题 程序员 大家在选择暴露端口号的时候喜欢使用什么骚逻辑?
中国特色国际化通用端口号:找一个汉字,用对应的 Unicode 码点做端口号即可

如: http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=4E60
1 ... 73  74  75  76  77  78  79  80  81  82 ... 123  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1363 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 17:28 · PVG 01:28 · LAX 09:28 · JFK 12:28
Developed with CodeLauncher
♥ Do have faith in what you're doing.