`
hideto
  • 浏览: 2686959 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Why OO sucks

阅读更多
为什么OO很恶心

原文: http://www.sics.se/~joe/bluetail/vol1/v1_oo.html
作者:Joe Armstrong

当我第一次知道OOP的概念时,我非常疑惑,但是不知道为啥——它仅仅在感觉上“不对”。
在OOP问世之后变得粉流行(稍后解释为什么),而批评OOP就像“在教堂里咒骂”。
OO成为了每个受尊敬的语言必须具备的一部分。

而当Erlang变得越来越流行时,我们经常问一个问题“Erlang是OO的吗?”
当然正确的答案是“当然不是”——但是我们没有大肆宣扬——我们只是换了种精心设计的说法,Erlang是某种OO但不是真的是。

这时我想起在法国巴黎时IBM的老板在7th IEEE逻辑编程大会上的演讲。
IBM prolog添加了许多OO扩展,当人们问起时他说:“我们的客户想要OO的prolog,所以我们构建了OO的prolog”

我想到了“多么简单,没有良心的疑虑,没有灵魂的搜索,没有‘这是正确的事情’的问题。。。”

为什么OO很恶心

我对OOP的反对原则源自一些基本的概念,我将概述其中一些反对意见。

反对之一——数据类型和方法应该绑定在一起
对象将方法和数据结构绑定在一起成为不可分割的单元。我认为这是基本的错误,因为方法和数据结构属于完全不同的世界。为啥哩?

1,方法做事情。它们是输入和输出。输入和输出的是方法所改变的数据结构。
在大部分编程语言里,方法由命令式语句顺序构建:“做这件事然后那件事。。。”
理解方法首先得理解做事情的顺序(在懒惰函数编程语言和逻辑语言中这个限制被放宽了)
2,数据结构是结构。它们不做任何事情。它们本质上是声明。“理解”数据结构比“理解”方法简单多了。

方法作为黑盒子来转换输入和输出。如果我理解输入和输出,这样我就理解了方法。这并不意味着我可以写这个方法。

方法通常理解为在一个计算系统里用来将数据结构T1转换为数据结构T2的东西。

既然方法和数据结构是完全不同类型的动物,那么将它们锁在一个笼子里就是完全错误的。

2,反对之二——任何东西都必须为对象
考虑“时间”。在OO语言里“时间”也必须是对象。但是在非OO语言里一个“时间”是一个数据结构的实例。
例如,在Erlang里有许多不同类型的时间,它们可以使用类型声明来明确指定:
-deftype day() = 1..31.
-deftype month() = 1..12.
-deftype year() = int().
-deftype hour() = 1..24.
-deftype minute() = 1..60.
-deftype second() = 1..60.
-deftype abstime() = {abstime, year(), month(), day(), hour(), min(), sec()}.
-deftype hms() = {hms, hour(), min(), sec()}.
...

注意这些定义不属于任何特殊的对象。它们很普遍,并且数据结构表示的时间可以被系统中的任何方法处理。

没有相关联的方法。

反对之三——在一个OOP语言里数据类型定义散布到任意位置
在OOP语言里数据类型定义属于对象。
这样我就不能在一个地方找到所有的数据类型定义。
在Erlang或者C里我可以在一个单独的include文件或数据字典里定义我所有的数据类型。
在一个OOP语言里我不能——数据类型定义散布到任意位置。

让我举一个例子。假设我想定义一个通用的数据结构。通用数据类型是一个数据类型,它在系统中的任意位置出现。

lisp程序员知道,拥有一个较小数量的通用数据类型和在它上面的大量的小方法会更好。

通用数据类型就比如linked list,或者一个array或者一个hash table或者更高级的对象如time或者date或者filename。

在一个OOP语言里我不得不选择一些base对象来在里面定义通用的数据结构,所有其他想使用这些数据结构的对象必须继承该对象。
假设现在我想创建一些“time”对象,那么它应该属于哪个对象呢。。。

反对之四——对象拥有私有状态
状态是所有罪恶的根源。特别是有副作用的方法应该避免。

在编程语言里状态是令人讨厌的,而真实世界里状态却千奇百怪的存在着。
我对我的银行账户的状态很感兴趣,当我从我的账户存钱或取钱时我希望我的银行账户状态成功更新。

既然状态在真实世界里存在,那么编程语言应该提供什么能力来处理状态呢?

1,OOP语言说“将状态隐藏”。状态仅仅通过访问方法来隐藏和可见。
2,传统编程语言(C,Pascal)说状态的可见度由语言的scope规则来决定。
3,纯声明式语言说没有状态。系统的全局状态转移到方法里然后从方法里出来。
类似于monad(函数式编程语言)和DCG(逻辑语言)等机制被用来隐藏状态,这样它们可以像“有没有状态无所谓”一样来编程,但是对系统状态的完全访问是必需的。

OOP语言所选择的“隐藏状态”可能是最坏的选择。
它们不是将状态显示出来并寻找减少状态的坏处的方式,而是将状态隐藏起来。

为什么OO粉流行?

1,原因1——它被认为很容易学
2,原因2——它被认为让代码更易重用
3,原因3——它被大肆宣传
4,原因4——它创建了一个新的软件工业

我看不到原因1和原因2的证据。原因看起来像是技术背后的驱动力。
如果一个编程语言技术如此之差,然后它创建了一个新的工业来解决它自己本身的问题,则它会成为想从中牟利的人的好工具。

这就是OOP背后真正的驱动力。

以及一篇回复:Why "Why OO Sucks" Sucks
分享到:
评论
133 楼 lyl0035 2008-08-24  
为啥就没人想想,其实在面向对象的代码中也流露着面向过程的思想,同时在面向过程的代码中也多少受到一些面向对象的影响。
虽然Linux是用C写的,但是其中一些代码的设计确实体现了OOP的思想,只不过形式上还是C罢了。
132 楼 hurd 2008-08-23  
数学为真实世界服务。

如果原来工作好好的数学理论在某领域出了问题,这个真实世界领域的问题还是要依靠数学来解决。

数学理论是否能解释现实世界,附加条件和应用场景是人设定的,而这个附加条件和应用场景我们可能定义错误或不准确。

数学理论发展过程中也一直推翻之前的理论或重新界定之前理论的基础。
131 楼 sungine 2008-08-23  
大师们 。。。。停一下!!!
您们觉得  用科学(或数学、诺依曼等等)来证明哲学(形而上、oo等等)有意义么??
有位磨眼睛片的哲学大师曾用几何论证的方式证明过哲学。。可他毕竟没能完全解释世界(他的理论基础是我思故我在)
还有位疯掉的哲学大师不相信理性的推论,结果也没能完全解释世界。
无论是数学能证明哲学还是不能证明,都有人为此付出了一生。。。
您们还是继续讨论OO 和 诺依曼的问题吧,这个比较容易出成果。。 我会很认真的拜读 各位大师的文笔。。。
130 楼 hideto 2008-08-22  
感觉回到了中药好还是西药快的争论上来了
inshua 写道
Trustno1 写道
inshua 写道
Trustno1 写道
引用
搞笑,你不會用眼睛看啊,還要用數學來測量,你用的測量工具是數學變出來的?

你没听说过什么叫做指鹿为马么?


我還聽說過什麽是畫蛇添足呢。

你的意思,海王星是靠眼睛看出来的?数学计算是多余的?


你的意思是,海王星沒有用眼睛觀測,直接在數學的感召下冒出來了?

129 楼 inshua 2008-08-22  
Trustno1 写道
inshua 写道
Trustno1 写道
引用
搞笑,你不會用眼睛看啊,還要用數學來測量,你用的測量工具是數學變出來的?

你没听说过什么叫做指鹿为马么?


我還聽說過什麽是畫蛇添足呢。

你的意思,海王星是靠眼睛看出来的?数学计算是多余的?


你的意思是,海王星沒有用眼睛觀測,直接在數學的感召下冒出來了?
128 楼 Trustno1 2008-08-22  
inshua 写道
Trustno1 写道
引用
搞笑,你不會用眼睛看啊,還要用數學來測量,你用的測量工具是數學變出來的?

你没听说过什么叫做指鹿为马么?


我還聽說過什麽是畫蛇添足呢。

你的意思,海王星是靠眼睛看出来的?数学计算是多余的?
127 楼 inshua 2008-08-22  
Trustno1 写道
引用
搞笑,你不會用眼睛看啊,還要用數學來測量,你用的測量工具是數學變出來的?

你没听说过什么叫做指鹿为马么?


我還聽說過什麽是畫蛇添足呢。
126 楼 inshua 2008-08-22  
Trustno1 写道
引用
你理解有誤。太陽系模型和攝動理論都是理論,觀測結果是事實,理論和事實失配,怎么辦,修改理論,總不能爲了理論造假吧。怎么修改,照觀測結果,猜測有一個還沒觀測到的星,要么也可能是攝動理論的問題,這些人的懷疑很有道理,科學本來就是要這么折騰。要么攝動理論有問題,要么太陽系模型有問題,不然怎么會和觀測結果不符。最後觀測到了海王星,ok,那就修改太陽系模型,攝動理論成功的保留。

黑烏鴉是經驗,黑烏鴉之所以黑的數學模型就是你喜歡的理論,白烏鴉是之前經驗外的事實,因為這個事實的存在,前面的理論就被推翻了。

觀測結果是經驗,攝動理論,太陽系模型是你喜歡的理論,觀測結果和理論失配是理論無法解釋的事實,因為這個事實的存在,理論就有毛病,所以後面理論被修改了。


太阳系模型是什么模型呢?物理模型哦,

摄动理论是什么理论呢?数学理论哦,




好極,原來是物理理論錯了,數學理論沒錯,那我問你,《幾何原本》是不是數學理論?
125 楼 Trustno1 2008-08-22  
引用
搞笑,你不會用眼睛看啊,還要用數學來測量,你用的測量工具是數學變出來的?

你没听说过什么叫做指鹿为马么?
124 楼 Trustno1 2008-08-22  
引用
你理解有誤。太陽系模型和攝動理論都是理論,觀測結果是事實,理論和事實失配,怎么辦,修改理論,總不能爲了理論造假吧。怎么修改,照觀測結果,猜測有一個還沒觀測到的星,要么也可能是攝動理論的問題,這些人的懷疑很有道理,科學本來就是要這么折騰。要么攝動理論有問題,要么太陽系模型有問題,不然怎么會和觀測結果不符。最後觀測到了海王星,ok,那就修改太陽系模型,攝動理論成功的保留。

黑烏鴉是經驗,黑烏鴉之所以黑的數學模型就是你喜歡的理論,白烏鴉是之前經驗外的事實,因為這個事實的存在,前面的理論就被推翻了。

觀測結果是經驗,攝動理論,太陽系模型是你喜歡的理論,觀測結果和理論失配是理論無法解釋的事實,因為這個事實的存在,理論就有毛病,所以後面理論被修改了。


太阳系模型是什么模型呢?物理模型哦,

摄动理论是什么理论呢?数学理论哦,


123 楼 inshua 2008-08-22  
Trustno1 写道
引用
你夢吧,我早就說了,必須拿到現實世界檢驗,檢驗不成功,管你數學多嚴密,推理多正確,必須推翻。


是啊,这个我很同意啊.我有说过不检验么?但是问题是怎么检验呢?答案需要依靠数学.
你说乌鸦是白的,我说乌鸦是黑的.恩怎么办呢?怎么检验呢?答案数学,大家测量乌鸦身上的色值,然后互相比较数据.
数据相等吗?相等,说明我们两个没分歧.
因此我说
引用
第二,抛开数学,你又如何论证物理和化学特性?




搞笑,你不會用眼睛看啊,還要用數學來測量,你用的測量工具是數學變出來的?
122 楼 inshua 2008-08-22  
Trustno1 写道
inshua 写道
Trustno1 写道
引用
模型不推翻怎么加入海王星,以前的行星模型里都沒有海王星這個事物。

怎么推翻了?发现误差之前,天文学家已经有行星摄动理论,也就是说没有发现海王星之前,天文学家已经知道行星的轨迹会被受到其他天体影响. 他们已经在他们的模型里考虑了土星,木星的摄动影响.结果还是不准,于是有人猜要么是摄动理论错了,要么是少了未知的条件。结果他们假设了一个未知条件,再根据原来的摄动理论计算,得出新星的轨道.然后在轨道附近找到了新星.
http://news.xinhuanet.com/theory/2006-11/08/content_5304012.htm


當時攝動理論還不是生死未卜,提丢斯還曾經猜测那里可能存在一颗火星或木星的卫星,假如沒有觀測到天王星,理論同樣要修改,後面觀測到天王星了,修改的就只是太陽系的數學模型了。一切還是要尊重事實啊。修改攝動理論是大改,修改太陽系的數學模型照樣也是改,一開始理論就和觀測結果失配,不修改理論難道修改觀測結果。


太阳系模型就是太阳系模型,摄动理论就是摄动理论.照你的说法是,前者是经验,后者是理论.黑乌鸦是经验,白乌鸦就是数学模型了?




你理解有誤。太陽系模型和攝動理論都是理論,觀測結果是事實,理論和事實失配,怎么辦,修改理論,總不能爲了理論造假吧。怎么修改,照觀測結果,猜測有一個還沒觀測到的星,要么也可能是攝動理論的問題,這些人的懷疑很有道理,科學本來就是要這么折騰。要么攝動理論有問題,要么太陽系模型有問題,不然怎么會和觀測結果不符。最後觀測到了海王星,ok,那就修改太陽系模型,攝動理論成功的保留。

黑烏鴉是經驗,黑烏鴉之所以黑的數學模型就是你喜歡的理論,白烏鴉是之前經驗外的事實,因為這個事實的存在,前面的理論就被推翻了。

觀測結果是經驗,攝動理論,太陽系模型是你喜歡的理論,觀測結果和理論失配是理論無法解釋的事實,因為這個事實的存在,理論就有毛病,所以後面理論被修改了。
121 楼 Trustno1 2008-08-22  
引用
你夢吧,我早就說了,必須拿到現實世界檢驗,檢驗不成功,管你數學多嚴密,推理多正確,必須推翻。


是啊,这个我很同意啊.我有说过不检验么?但是问题是怎么检验呢?答案需要依靠数学.
你说乌鸦是白的,我说乌鸦是黑的.恩怎么办呢?怎么检验呢?答案数学,大家测量乌鸦身上的色值,然后互相比较数据.
数据相等吗?相等,说明我们两个没分歧.
因此我说
引用
第二,抛开数学,你又如何论证物理和化学特性?


120 楼 Trustno1 2008-08-22  
inshua 写道
Trustno1 写道
引用
模型不推翻怎么加入海王星,以前的行星模型里都沒有海王星這個事物。

怎么推翻了?发现误差之前,天文学家已经有行星摄动理论,也就是说没有发现海王星之前,天文学家已经知道行星的轨迹会被受到其他天体影响. 他们已经在他们的模型里考虑了土星,木星的摄动影响.结果还是不准,于是有人猜要么是摄动理论错了,要么是少了未知的条件。结果他们假设了一个未知条件,再根据原来的摄动理论计算,得出新星的轨道.然后在轨道附近找到了新星.
http://news.xinhuanet.com/theory/2006-11/08/content_5304012.htm


當時攝動理論還不是生死未卜,提丢斯還曾經猜测那里可能存在一颗火星或木星的卫星,假如沒有觀測到天王星,理論同樣要修改,後面觀測到天王星了,修改的就只是太陽系的數學模型了。一切還是要尊重事實啊。修改攝動理論是大改,修改太陽系的數學模型照樣也是改,一開始理論就和觀測結果失配,不修改理論難道修改觀測結果。


太阳系模型就是太阳系模型,摄动理论就是摄动理论.照你的说法是,前者是经验,后者是理论.黑乌鸦是经验,白乌鸦就是数学模型了?


119 楼 inshua 2008-08-22  
Trustno1 写道
引用
你無非是想證明數學有的時候能先驗,但這種所謂的“先驗”必須在經驗基礎上,事後還要經過事實檢驗才行,在檢驗成功前還只是假設。

要反駁假設可以從其所依據的實驗數據,數學推導過程入手


引用
第二,抛开数学,你又如何论证物理和化学特性?


露出狐狸尾巴了吧。所以我说你就是在重复我说过的话.我才不管是先验还是后验,证伪数学推导的真理也好,证实经验堆积起来的猜测也好.反正你要检验,你要检验就需要数学.没有数学语言,就没有客观的验证基础,没有客观的验证基础,也就谈不上你所谓的检验经验规律.




你夢吧,我早就說了,必須拿到現實世界檢驗,檢驗不成功,管你數學多嚴密,推理多正確,必須推翻。
118 楼 Trustno1 2008-08-22  
Readonly 写道
好好的帖子,被你们2个给水了...
偶发现只会google的T1,其策略就是避而不谈别人提的(他很难google到的)问题,然后找到一个能够google到的问题,用来做陷阱反问,等你掉进去。
这样帖子的楼层就一下子被盖起来了,JavaEye论坛规律第7条:
当T1开始大量贴链接和引用的时候,这个帖子就可以转到灌水版了。

 

你要掉进来,也不能怪我不是?
117 楼 inshua 2008-08-22  
Trustno1 写道
引用
模型不推翻怎么加入海王星,以前的行星模型里都沒有海王星這個事物。

怎么推翻了?发现误差之前,天文学家已经有行星摄动理论,也就是说没有发现海王星之前,天文学家已经知道行星的轨迹会被受到其他天体影响. 他们已经在他们的模型里考虑了土星,木星的摄动影响.结果还是不准,于是有人猜要么是摄动理论错了,要么是少了未知的条件。结果他们假设了一个未知条件,再根据原来的摄动理论计算,得出新星的轨道.然后在轨道附近找到了新星.
http://news.xinhuanet.com/theory/2006-11/08/content_5304012.htm


當時攝動理論還不是生死未卜,提丢斯還曾經猜测那里可能存在一颗火星或木星的卫星,假如沒有觀測到天王星,理論同樣要修改,後面觀測到天王星了,修改的就只是太陽系的數學模型了。一切還是要尊重事實啊。修改攝動理論是大改,修改太陽系的數學模型照樣也是改,一開始理論就和觀測結果失配,不修改理論難道修改觀測結果。
116 楼 Trustno1 2008-08-22  
引用
你無非是想證明數學有的時候能先驗,但這種所謂的“先驗”必須在經驗基礎上,事後還要經過事實檢驗才行,在檢驗成功前還只是假設。

要反駁假設可以從其所依據的實驗數據,數學推導過程入手


引用
第二,抛开数学,你又如何论证物理和化学特性?


露出狐狸尾巴了吧。所以我说你就是在重复我说过的话.我才不管是先验还是后验,证伪数学推导的真理也好,证实经验堆积起来的猜测也好.反正你要检验,你要检验就需要数学.没有数学语言,就没有客观的验证基础,没有客观的验证基础,也就谈不上你所谓的检验经验规律.







115 楼 Readonly 2008-08-22  
好好的帖子,被你们2个给水了...
偶发现只会google的T1,其策略就是避而不谈别人提的(他很难google到的)问题,然后找到一个能够google到的问题,用来做陷阱反问,等你掉进去。
这样帖子的楼层就一下子被盖起来了,JavaEye论坛规律第7条:
当T1开始大量贴链接和引用的时候,这个帖子就可以转到灌水版了。

 
114 楼 Trustno1 2008-08-22  
引用
模型不推翻怎么加入海王星,以前的行星模型里都沒有海王星這個事物。

怎么推翻了?发现误差之前,天文学家已经有行星摄动理论,也就是说没有发现海王星之前,天文学家已经知道行星的轨迹会被受到其他天体影响. 他们已经在他们的模型里考虑了土星,木星的摄动影响.结果还是不准,于是有人猜要么是摄动理论错了,要么是少了未知的条件。结果他们假设了一个未知条件,再根据原来的摄动理论计算,得出新星的轨道.然后在轨道附近找到了新星.
http://news.xinhuanet.com/theory/2006-11/08/content_5304012.htm

相关推荐

    大师品软件_Why Software Sucks

    《大师品软件_Why Software Sucks》是一本深入探讨软件设计缺陷和用户体验问题的书籍,由David S. Platt撰写。这本书旨在揭示为什么某些软件在使用过程中让人感到困扰,并提出改善软件设计的策略。作者Platt是一位...

    Why.Software.Sucks

    Any book is the product of a team effort. In this one, I've had an out- standing supporting cast. Everyone at Addison-Wesley understood and got behind the concept of a book for the users of ...

    itsucks-0.4.1开源爬虫

    【itsucks-0.4.1开源爬虫】是一个针对初学者友好的网络爬虫工具,它的出现使得没有编程背景的用户也能轻松进行数据抓取。这个最新版本的itsucks,不仅提供了完整的爬虫功能,还引入了一个简洁的图形化用户界面(GUI...

    itsucks-0.4.1.zip

    【itsucks-0.4.1.zip】是一个包含开源Java Web Spider项目的压缩包,这个项目被称为itSucks。itSucks的设计目标是帮助用户轻松构建网络爬虫,它使用了Web机器人技术,允许用户通过定义下载规则来抓取网页内容。项目...

    itsucks开源代码

    爬虫源码,开源 java 很好 强大 可扩展

    信息安全_数据安全_Why_the_role_of_CISO_sucks_and_w.pdf

    信息安全_数据安全_Why_the_role_of_CISO_sucks_and_w 信息安全研究 金融安全 安全人才 安全对抗 法律法规

    why-your-test-suite-sucks

    标题“why-your-test-suite-sucks”暗示了我们讨论的主题是关于测试套件存在的问题以及如何改进它们。测试套件是软件开发过程中的重要组成部分,它确保代码的质量、稳定性和可靠性。然而,当测试套件出现问题时,...

    Atc Sucks-crx插件

    【Atc Sucks-crx插件】是一款针对英文用户的浏览器扩展程序,主要目的是表达用户对“ATC”(可能是某个网站、服务或功能的缩写)的不满情绪。这款插件由开发者创建,用于向用户展示ATC存在的问题,或者提供某种方式...

    Smooth Scroll Sucks-crx插件

    因此,【Smooth Scroll Sucks-crx插件】致力于让浏览器的滚动条重获自由,释放用户在浏览时可能遇到的困扰。它通过禁用页面上的平滑滚动特效,使鼠标滚轮和触摸板的操作更加直接,使浏览体验更接近传统习惯。 现代...

    Vegandale Sucks-crx插件

    【Vegandale Sucks-crx插件】是一款专为英文用户设计的浏览器扩展程序,主要功能是替换网络上关于“Vegandale”的相关信息,将其转化为“Gentrified Parkdale”。这款插件针对的是那些可能对“Vegandale”这一名称...

    itsucks:http

    ItSucks 网络爬虫 描述 这个项目是一个具有下载(和恢复)文件能力的java网络蜘蛛(网络爬虫)。 它还可以使用正则表达式和下载模板进行高度定制。 所有后端功能也可在单独的库中使用。 官网 执照 本地开发使用 将 ...

    IE Sucks-crx插件

    IE SUCKS这么糟糕,实际上是有趣的观看失败! IE样式信息条在页面中的障碍码时发光。 无广告! Internet Explorer是一个浏览器的F ****笑话,并字面上持有进步! 在逐步淘汰之前庆祝最终几天,用IE吸收插件。 每当...

    rabbit sucks!-crx插件

    【标题】:“rabbit sucks!-crx插件”是一个针对特定网站或应用的浏览器扩展,其主要功能是优化用户界面,提供更加个性化的浏览体验。这个插件的名称可能具有一定的幽默感,暗示它可以帮助用户摆脱某些他们不喜欢的...

    DuPont Sucks FTP-开源

    DuPont Sucks FTP(DPS-FTP)是一个开源的FTP客户端工具,专为用户提供便捷的文件传输服务。这个项目的名称“DuPont Sucks FTP”可能源于一种幽默或反讽的表达,暗示它并非由杜邦公司开发,而是由社区驱动的独立项目...

    kevingreen.sucks

    【标题】"kevingreen.sucks" 是一个网站项目,基于 "Simple Next App" 构建,主要用于表达对个人或事物的不满或者批评。在互联网上,".sucks" 域名通常被用来创建一个平台,让人们可以公开讨论他们认为有问题的事物...

    IE吸盘「IE Sucks」-crx插件

    使用IE Sucks插件庆祝淘汰前的最后几天。 每当遇到旨在帮助Internet Explorer像老人一样上楼的代码时,我们都会像过去一样发出经典的IE信息栏。 您知道,这意味着您只有更多无用的废话可以破坏您的浏览器,除非这次...

    sucks:用python制作的小CRUD

    标题中的“sucks:用python制作的小CRUD”表明这是一个使用Python编程语言开发的简单创建、读取、更新和删除(Create, Read, Update, Delete,简称CRUD)应用程序。CRUD是数据库操作的基础,是任何数据管理系统的基石...

    your-band-sucks-v2:通过不良专辑封面分享音乐

    【标题解析】:“your-band-sucks-v2”很可能是一个音乐相关的项目或应用,可能是由开发者创建的一个幽默或者讽刺性的音乐分享平台。"v2"表示这是项目的第二个版本,通常意味着在原有基础上进行了改进和优化。 ...

    Moments Sucks-crx插件

    如果您确实讨厌Twitter内的Moments标签,并且在尝试查看通知时始终单击此处,则只需安装此… 如果您确实讨厌Twitter内的Moments选项卡,并且在尝试查看通知时始终单击此处,则只需安装此轻量级扩展程序即可将其发送...

Global site tag (gtag.js) - Google Analytics