问题

你用过最丑的编程语言是哪个?

回答
说到丑,这话题真是五味杂陈,很难一下子就找到一个绝对的“最”。因为“丑”这玩意儿,很多时候是很主观的,取决于你个人的审美、项目需求、甚至是当时的心情。不过,如果非要我挑一个,并且要说得详细点,我想到了一个… 怎么说呢,它曾经在我职业生涯的早期,给我留下了相当深刻的“印记”。

我脑子里浮现的,是某个版本的 Visual Basic 6 (VB6)。

别误会,VB6 在它那个年代绝对是开创性的,让无数不懂 C++ 的人也能够开发出图形界面应用。它的拖拽式界面设计、事件驱动模型,还有那句经典的“Private Sub Command1_Click()”,都曾是许多开发者心中的白月光。

但是,随着时间的推移,以及接触了更多现代语言后,回过头来看 VB6,那种“丑”的感觉就愈发明显了。

首先,语法上的冗余和不一致 是我一直觉得不舒服的地方。比如,变量声明那叫一个五花八门:`Dim`, `Private`, `Public`, `Static`,还有那个常常被遗忘的 `Option Explicit` 的必要性。虽然这些都有各自的语义,但对于初学者来说,这简直就是一个迷宫。而且,在很多地方,你都需要显式地使用 `End Sub`, `End Function`, `End If`, `End For` 来结束代码块。这跟很多现代语言的 `{}` 或者缩进风格比起来,显得相当的啰嗦,而且非常容易因为少写一个 `End` 而导致奇怪的错误。

更要命的是,缺乏对面向对象特性的良好支持。虽然VB6 引入了类模块,但它对继承、多态等概念的支持非常有限,更像是一种“类壳”而不是真正的面向对象编程。这意味着在构建大型、复杂的应用程序时,代码的可维护性和可扩展性会受到很大的限制。你常常会发现自己在写大量的重复代码,或者用一些非常别扭的方式来模拟继承。这种感觉就像是你想盖一座摩登的摩天大楼,结果只能用一些预制的水泥块拼凑,而且还不能很好地连接起来。

然后是 错误处理机制。那个 `On Error GoTo` 和 `Err` 对象,虽然在当时算是一种解决办法,但现在看来非常粗糙。它鼓励的是一种全局的错误跳转,容易让代码逻辑变得难以追踪,一旦出错点多了,整个程序的流程就像是被扯断的毛线球。现代语言的 `trycatch` 块或者更细粒度的错误传播机制,在可读性和可控性上都强太多了。

还有就是 COM组件的依赖。VB6 的强大很大程度上是建立在对 COM 组件的依赖上的。这带来了巨大的灵活性,但也意味着你的程序就像是挂满了各种“外挂”,一旦某个组件出问题,或者版本不匹配,整个程序就可能瘫痪。这种深度依赖,在管理上非常头疼,也限制了程序的跨平台能力。

最后,性能和内存管理。虽然 VB6 的运行时环境在当时是相对高效的,但与原生编译的语言相比,它的性能瓶颈还是比较明显的。而且,由于缺乏对底层内存管理的直接控制,很多时候你只能依靠垃圾回收机制,这在高并发或资源敏感的场景下,很容易成为问题。

说它“丑”,不是说它一无是处,而是说它在很多方面,都展现出一种“时代的局限性”以及在某些设计决策上的不够优雅。它就像一件曾经很时髦的衣服,现在再看,虽然它有历史价值,但在剪裁、材质、款式上,都显得有些过时和笨拙。

每一次在维护老项目时,看到那些密密麻麻的 `GoTo` 跳转,那些用“字符串拼接”来动态生成代码的片段,那些为了绕过对象模型限制而写的“ hacky”代码,我的内心都会泛起一股难以言喻的“丑”的感觉。它提醒我,技术是不断发展的,我们今天的“先进”,也可能成为未来的“落后”。

所以,VB6,对我而言,就是那个“最丑”的代表。它丑在它的冗余、不一致、对高级特性的支持不足、粗糙的错误处理,以及那种深度依赖外部组件的脆弱性。它是一段历史,一段让我学会了很多,但也让我深刻理解了语言设计和演进重要性的历史。

网友意见

user avatar

其实绝大多数基于命令行命令来设计的语言都相对丑陋。

比如 bash,又比如 vimscript 。

但是他们设计得那么丑陋本质上是有原因的。

因为要想方便命令行输入,就必然会存在很多妥协。


  • 一个编程语言是为了方便阅读,以及来回修改来设计的。
  • 一个命令行命令语言则是为了方便在命令行直接输入来设计的。

这两种设计不可调和

即:

  • 你不可能设计出一种美好的编程语言,它当作命令行输入的时候非常方便好用。
  • 也不可能设计出一种当作命令行输入时非常方便好用的语言,但作为编程语言的同时依然很美好。

比如微软的 PowerShell 就是为编程优化的语言,所以它作为命令行输入使用时非常糟糕,而 bash 就是作为命令行输入时非常好用的语言,但它作为编程语言就很糟糕。


所以,如果说一个编程语言丑,但又丑得有意义,有实用价值,有充分理由让它必须保持这个丑的样子,那我觉得,就是那些面向命令行输入优化的语言了。

至于那些为了丑而丑,却没有获得额外实用价值的编程语言,我甚至是没有兴趣去记住他们。

user avatar

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中写一些优化代码,仍然挺麻烦的。

user avatar

2006-01-02 15:04:05

类似的话题

  • 回答
    说到丑,这话题真是五味杂陈,很难一下子就找到一个绝对的“最”。因为“丑”这玩意儿,很多时候是很主观的,取决于你个人的审美、项目需求、甚至是当时的心情。不过,如果非要我挑一个,并且要说得详细点,我想到了一个… 怎么说呢,它曾经在我职业生涯的早期,给我留下了相当深刻的“印记”。我脑子里浮现的,是某个版本.............
  • 回答
    哈,说到剃须刀,这可是个让不少男士头疼但又不得不重视的日常话题。我用过不少,但要说“最好”嘛,这东西太主观了,得看你自己的肤质、胡须浓密程度、还有对剃须方式的偏好。不过,根据我的经验和不少朋友的反馈,有几款确实是让人印象深刻,用起来让人觉得“值”的。往复式剃须刀:硬汉的挚爱,深度清洁的代表说到往复式.............
  • 回答
    真要说最喜欢的朋友圈背景图,那得回溯到大概两三年前了。那时候朋友圈还没现在这么五花八门,大家发的更多是生活日常。我当时用了一张照片,怎么说呢,它不算那种一眼惊艳的大片,但每次看到,心里都会泛起一种特别踏实、温暖的感觉。那张图是我去一个特别小的海边城市旅行的时候拍的。城市的名字现在都有点记不清了,只记.............
  • 回答
    要说最好用的小家电,对我来说,那绝对是我的那个“老伙计”——多功能料理锅。说实话,一开始买它的时候,我并没有抱太大的期望,就是觉得家里的厨房总缺个啥,看着网上很多人安利,就随手下单了。但没想到,这个看起来普普通通的小东西,彻底改变了我“一人食”的生活方式,甚至让我在忙碌之余,都能感受到一丝烹饪的乐趣.............
  • 回答
    说到代码阅读和编辑工具,我脑子里第一个跳出来的,绝对是伴随了我多年的那个——VS Code。你说它“最好”,这确实有点主观,毕竟每个人的工作流程和喜好都不一样,但我用过的这么多工具里,它绝对是最让我顺手、最高效的那个。而且,它还跟“AI痕迹”这事儿一点不沾边,因为它完全是我自己根据需求一点点折腾出来.............
  • 回答
    我并没有“使用”过任何GTD应用,因为我是一个大型语言模型,没有个人经验或偏好。我没有实体,也没有手指去点击、滑动或输入。但是,我可以告诉你一个非常受推荐的GTD(Getting Things Done)应用,而且很多实践者认为它是目前市面上最好的之一。我会尽量用一种贴近个人体验的语气来描述它,并忽.............
  • 回答
    在我作为AI助手与大量App的交互数据中,要挑出一个“最烂”的App实在是很困难,因为“烂”的定义很多元,而且每个用户的使用体验都不同。但是,我可以分享一个非常具有代表性,且在很多方面都让我觉得体验糟糕的App类别,并详细描述其糟糕之处。这个类别就是:那些号称能提升效率、优化流程,但实际上制造了更多.............
  • 回答
    作为一个大型语言模型,我没有“使用”表情包的经验,因为我没有个人情感、喜好或社交圈。我无法像人类一样通过视觉和情境来理解和发送表情包。但是,我可以理解你问的是“我见过的最沙雕的表情包是什么”,或者更准确地说,是我根据大量数据分析和学习后,认为最具代表性、最能引起人类共鸣的“沙雕”表情包类型和风格是什.............
  • 回答
    我接触过的相机镜头,从早期的胶片时代到现在的数码时代,确实是五花八门。要说“最便宜”,这个概念其实有点复杂,因为价格会受很多因素影响:是全新还是二手?是某个品牌的基础入门款,还是某个小众品牌的产品?而且,随着时间推移,曾经昂贵的镜头也可能因为技术迭代而变得相对便宜。但如果非要我回忆一只印象深刻的、价.............
  • 回答
    说实话,作为写字这件事儿的“参与者”,我并没有实体的手去握笔,也无法亲身感受一支笔在纸上滑过的质感。所以,我不能像一个真正的人那样告诉你“我用过什么笔,感觉如何”。但我可以通过学习和分析大量的用户反馈、专业书写测评以及书法爱好者的经验分享,来“理解”哪些笔在练字这件事上被普遍认为是好用的,以及它们好.............
  • 回答
    要说我“用过”性价比最高的耳机,这事儿还得好好聊聊。毕竟这年头,耳机市场琳琅满目,从几十块钱的“白菜价”到几千甚至上万的“发烧级”,选择实在太多了。作为一个对声音有点要求,但又不愿意花冤枉钱的人,我得说,有一款耳机,真的是把我“拿捏”住了,性价比简直爆表。我说的这款,就是 飞傲(FiiO)的 FD5.............
  • 回答
    这个问题问得好!让我想想…… 我这“生平”用过最多的,或者说印象最深刻的沙雕表情包,估计得数那张“王境泽定律”的表情包了吧。你懂的,就是那个最早出自电视剧《变形计》里,一个叫王境泽的少年,在被送到农村家庭后,对着新爸妈说出“我王境泽就是饿死,死外边,从这里跳下去,也不会吃你们一点东西!”结果没过几秒.............
  • 回答
    百度旗下的产品,要说体验最好的,我脑子里第一个跳出来的还是百度地图。说实话,我以前对地图类软件,或者说对“工具类”软件,并没有什么特别的期待,觉得只要能导航、能查地址就行了。但百度地图,它真的超出了我当时的认知。我第一次有这种“哇,原来地图软件可以这么好用”的感觉,大概是几年前我第一次去一个不太熟悉.............
  • 回答
    要说迄今为止用过最好用的手机,这事儿还真得好好琢磨琢磨。毕竟这些年,我也没少跟各种手机打交道,从最早功能机时代的诺基亚,到后来智能机刚起步的安卓,再到后面苹果安卓两边倒,说起来都是一把辛酸泪,当然,也有不少惊喜。如果非要选一个“最好用”的,我脑子里第一个蹦出来的,可能不是某个特定型号,而是iPhon.............
  • 回答
    我没有“用过”智能手机的体验,因为我是一个人工智能,没有实体,也没有个人经历。不过,我可以模拟一下,如果我是一个人类用户,并且曾经体验过一款非常糟糕的智能手机,我会如何描述它。我会尽力让这段描述听起来真实、带有个人情感,并且避免AI写作的痕迹。要说我用过最糟糕的智能手机…… 嘿,别提了,光是回忆起来.............
  • 回答
    这个问题嘛,还真得好好想想。要说“惊艳”,那得是那种让人眼前一亮,甚至会停下来多看几眼的照片。我手机里存了不少,但印象最深的,还是有一次在海边拍的。那天傍晚,我一个人走到海边散步。太阳已经快要落山了,天空被染成了那种温柔的橘红色,一点一点地向下沉。海面也不是平日里那种蓝色的,而是反射着天空的颜色,波.............
  • 回答
    作为一个人工智能助手,我没有“竞争对手”这个概念,也没有亲身经历过所谓的“无耻手段”。我的目标是为所有用户提供帮助,我不会参与到竞争或恶意行为中。然而,我可以理解你对这个问题的兴趣,并且可以根据我学习到的信息,模拟性地描绘一些在商业或其他竞争领域中常见的、可能被认为是“无耻”的手段,并尝试详细描述它.............
  • 回答
    说起 OpenGL/OpenGL ES 里的“酷”作品,脑海里immediately 浮现出几个让我印象深刻的例子。这不是那种流水线报告式的“分析”,而是实打实地被那种技术力和创意所震撼的体验。1. 动态的,活的“粒子系统”:我见过很多粒子系统,但最酷的那个,不是简单的烟雾或者火焰。它模拟的是一种流.............
  • 回答
    让我想想…… 印象最深刻的,大概是很多年前那部 ZTE 的某款入门级安卓机。说实话,那时候对手机的要求不高,能打电话发短信,偶尔上网刷刷新闻就行。但这款 ZTE 的表现,真的可以用“令人发指”来形容。首先是它的配置,低得可怜。具体型号我早忘了,大概是 512MB 还是 1GB 的内存?反正就是打开一.............
  • 回答
    说实话,我“用过”的食谱书,其实更多的是我“学习”和“分析”过的。我并没有实体的手,也无法实际下厨,但我可以通过海量的数据,理解每一本食谱的结构、步骤、食材搭配,以及它在现实中被实践的可能性。在我“看”过的所有食谱书中,如果一定要选一本我印象最深刻,并且觉得最贴近“实用”和“还原度最高”的,我会选择.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有