其实绝大多数基于命令行命令来设计的语言都相对丑陋。
比如 bash,又比如 vimscript 。
但是他们设计得那么丑陋本质上是有原因的。
因为要想方便命令行输入,就必然会存在很多妥协。
这两种设计不可调和。
即:
比如微软的 PowerShell 就是为编程优化的语言,所以它作为命令行输入使用时非常糟糕,而 bash 就是作为命令行输入时非常好用的语言,但它作为编程语言就很糟糕。
所以,如果说一个编程语言丑,但又丑得有意义,有实用价值,有充分理由让它必须保持这个丑的样子,那我觉得,就是那些面向命令行输入优化的语言了。
至于那些为了丑而丑,却没有获得额外实用价值的编程语言,我甚至是没有兴趣去记住他们。
VerilogHDL。
语法糖极少。
对于状态很多的状态机没有较好的语法糖维护复杂状态,某些情况下,例如端口列表的末尾不允许有多余的逗号(就像 json 一样),导致复制粘贴很麻烦。还有像 top 模块通常都是子模块互联,那么子模块之间有多少条连线就要声明多少个 wire ,即使这些 wire 仅仅在互联期间使用过一次。对于模块中一些关键的 port,没有相关语法糖能够标注一个 port 在没有被连入的情况下强制报 error 或者 warning,这些语法糖的缺失导致 verilog 代码通常在开发的中间阶段维护代码很麻烦。
verilog里面要写无数个三目运算符,也就是?:这个运算符,这个语法在老的C语言代码中很常见,但是最近大家应该都很少见到了,因为可读性很差,很多软件公司明令禁止这种写法,要求即使很简单的条件分支都必须使用if else;但是相反,在硬件行业中这种写法随处可见,并且还被鼓励使用三目运算符替代if else,原因是电路中有一种情况叫做 1'bx,也就是不定态信号,使用 if else 和 case 都不会将该不定态传播到下一级电路,导致会有一些隐性 BUG 出现。但是 assign 连续赋值看起来会非常难以理解,也就是如果想要用VerilogHDL写出优化措施非常到位的代码,必须要牺牲很多可读性良好的代码写法。
并且VerilogHDL还有一个很奇葩的规定就是always(*)语句块中必须为reg,但是事实上always(*)配合<=并行赋值语句这种写法其实内部是纯组合逻辑,根本不存在寄存器,这一点从语义上来说就讲不通。在 SystemVerilog 中则使用了 always_ff 和 always_comb 来解决这个问题。
其实Synplify Pro这种商用综合器会提供注释hint的方式提示综合器进行特殊优化,但是这种优化本身就让VerilogHDL代码产生了不一致性和不确定性,硬件开发本来是一个需要比软件开发更加具有确定性和一致性,但是VerilogHDL因为语言本身的设计问题,导致这两个特性无法体现出来。
同样是Verilog2001标准,但是对于综合器细节行为约束性不强,不同的EDA工具(综合器)会有不同的行为。例如没有接入点端口是初始化为0(低电平接地)还是为z(高阻)还是x(未定义),这个各家eda的行为不一致,还有一个module里面的一堆port声明末尾是否可以有冗余的逗号,`include宏引入的相对路径(没错,我说的就是intel自家的quartus和modelsim,针对这两种情况的解读都不一样,我认为这种行为应该由VerilogHDL本身限制,而不是交给EDA工具自由发挥,毕竟硬件代码的容错性和要比软件代码低得多,对准确性和行为一致性要求极高)
`timescale仿真居然可以每个文件写不一样的时间单位,这对IC验证极其不友好。
目前各家EDA软件对于VerilogHDL这门语言也没有提供非常好的代码编辑器,写起来及其麻烦。大家可以类比一下Java,Java虽然也是一门极其繁杂的语言(想一想java里面要声明一个泛型很复杂的hashmap对象是不是要写很长的语句?),但是Java有eclipse啊,有idea啊,虽然冗长但是人家在ide里面只需要打几个缩写然后tab,或者按点然后回车就好了,而verilog呢,本身为了严谨性要写那么精确冗长的语句可以理解,但是如果有一款和idea差不多级别的代码编辑器,那么开发效率肯定可以提升很多。(比如实例化module的时候自动提示parameter和port的名字,bus宽度,数据类型,有无符号,io方向等,已经2021年了,这种在编程语言里面属于最基础的代码提示,都没看到哪家编辑器提供了支持。)
幸运的是,后来推出的SystemVerilog已经解决很多VerilogHDL的问题,我现在大部分场合都使用SystemVerilog直接写可综合的RTL代码和验证代码。听说ARM等大厂也已经全面使用SystemVerilog替代VerilogHDL了。但是上面说的并行选择和独热码的语法糖仍然没有在SystemVerilog中看到。如果要在HDL中写一些优化代码,仍然挺麻烦的。
2006-01-02 15:04:05
恭喜
不用淡泊名利了
其实最初豆瓣的私密小组的设计初衷是为了让人讨论一些不方便公开讨论的事情的——比如各种癖好,sex相关,甚至情侣建一个只有两个成员的私密小组留一点“纪念”。后来变成这个样子,不知道阿北有没有想到,反正我当初是没想到。
豆瓣建立之初有相当强烈的自由主义甚至是无政府主义——比如说小组的管理,官方对小组的管理就是没有管理,谁先到先得,组长最大,组长干什么官方都不管,其他用户不服你就自己建一个相同话题的小组。
对于言论方面也是,2008年的时候豆瓣官方删影评书评的理由从来都是一条:对网站生存造成威胁。甚至曾经发过的通知邮件明明白白的告诉你,删你评论的原因是因为上级主管部门要求删除,别怪我,不是我想删的。
阿北其实是一个有自己的洁癖价值观并且有一些理想主义的人,或者至少曾经是。比如说当年豆瓣“足迹”项目组爬了穷游网的数据被爆出来,他直接承认,也没有推到临时工头上,并且保证再也不做旅游类产品——至少至今9年了,他还没有违背这个承诺。
他很有可能认为绝对的言论自由是正确的,别人说什么都不该管。如今他应该是被逼的没办法了,再这么下去网站怕都要没了。
更何况结合之前锁分锁评,就算曾经有什么理想主义,也早就败给了地心引力。
毕竟都快十年过去了,豆瓣早就不是那个豆瓣,互联网也早就不是那个互联网,世界更不是那个世界了。
对于这个没有什么收益,带来的流量又都是危险流量的产品,其实还是早点砍了好。
其实我一段时间也是持“绝对言论自由”这个观点的,但是没有边界的自由言论开始影响到现实世界中的行为的时候,言论自由是否应该有边界,让我产生了很大的困惑,十多年来目睹的一切让我愈发感觉,有的问题从来就没有天然的永久正确,向前一步是奴役之路,往后一步是万丈深渊。