请, 解释为什么 并列出您知道的(MIS)功能的(MIS)功能。

发布您认为的有害功能,而不是您不喜欢的功能。

有帮助吗?

解决方案 2

默认情况下允许null,“万亿”*美元错误。对不起,托尼·霍尔(Tony Hoare)。几乎每种语言都可以在星球上使用。

托尼·霍尔(Tony Hoare)解释了

*我调整了托尼·霍阿尔(Tony Hoare)创造的表达,以反映当今的实际损失:-)

其他提示

在PHP中注册Globals

信息 : http://php.net/manual/en/security.globals.php

出于可读性原因和安全原因,这是迄今为止最糟糕的功能。基本上,收到的所有GET参数都转化为变量。

例如,使用此URL:/index.php?value = foobar

您可以执行以下操作:

<?php
echo $value; // return foobar
?>

当您阅读代码时,知道变量来自何处是非常困惑的。

另外,如果该功能被滥用,则可能导致安全漏洞。这是php.net中的代码示例,该示例显示了如何被滥用:

<?php
// define $authorized = true only if user is authenticated
if (authenticated_user()) {
    $authorized = true;
}

// Because we didn't first initialize $authorized as false, this might be
// defined through register_globals, like from GET auth.php?authorized=1
// So, anyone can be seen as authenticated!
if ($authorized) {
    include "/highly/sensitive/data.php";
}
?>

C和C ++宏。如果我由于选择了其宏的标准函数名称而必须看到另一个编译器错误,这搞砸了我的代码,我将要尖叫。让我们看看最后一个犯罪:

#define vector(int) new VARIANT[int];

aaarg!您对我的STL矢量做了什么!?

默认情况下,C和C ++开关语句中的秋季。

当在之间转换的类型时,隐式类型转换没有明显的关系。例如,转换一个随机的非数字 string 进入 int, ,就像php一样。

: :尽管在极少数情况下还可以,但它经常被滥用,并导致难以阅读的程序。

没有任何

仅仅因为一个功能经常被滥用并不能使其有害。

恕我直言,整个“被认为有害”是 还原广告希特勒姆 编程语言讨论。

大多数(如果不是全部)“有害”功能中具有或最初具有非常有效的用例,或者首先是便利方法。由开发人员据此理解优点和缺点和编码。

如果您的问题本来是按照“哪些语言特征具有常见的陷阱或不幸的副作用”的路线,那么我的答案将有所不同。

编辑]要清楚:我并不是说继续使用不推荐的方法。如果开发人员正在折旧/删除功能,则应使用替换。我指的是该语言的当前部分被认为是有害的,因为有些人不喜欢它的鼓励或使用它所涉及的权衡,许多人讨论了它。

自动化(或其他绑定可变量(分配|使用)功能)是我发现给我最多的错误的功能。

PLEASE 在Intercal中。不要用足够的时间,它抱怨。使用太多,抱怨。

尽管有些人不同意他所说的男人或各种各样的话,但许多道格拉斯·克罗克福德(Douglas Crockford) JavaScript:好部分 基本上,这个问题适用于JS。克罗克福德的抱怨:

  • 默认情况下,全局范围(DC显示了如何将函数/对象用作名称空间和范围定界符来解决此问题。)

  • 陈述类似 with, ,其失败行为是在全球名称空间上定义事物。 (gah!就像JS座右铭是如果您失败了,那就 尽可能难!)

  • 意外行为与 == 操作员,基本上要求您始终使用 === 操作员。

  • 半插入。

确实,很多JS应该被认为是有害的,甚至是整个语言,但是好部分是如此的好,以至于它可以弥补它(至少对我来说)。

“默默失败”作为默认行为

好的,不是真正的语言本身功能,但仍然密切相关。

突然,您的Flash/Flex应用程序停止工作,没有人能给您丝毫提示F*发生了什么。没有错误消息,没有堆叠条件,没有任何错误。只是突然间,屏幕过渡不会发生(或以完全错误的方式发生),或者按钮不再反应点击,或者组合蛋白是空的,而不是被某些条目填充。

单独的“功能”就是几个 耸耸肩的报告 还有一堆我一直在得到的白发。 -.-当用户脸上弹出一些隐秘消息时,也不是可取的,但至少可以帮助开发人员解决问题。

但是Flash Player会使您在黑暗中刺伤,并依靠用户的描述(而问题实际上可能源自代码中完全不同的位置,而这些位置与用户所做的事情无关)。仅当您使用调试播放器时,您实际上您才能获得带有错误消息和stacktrace的弹出窗口。

但是,观看某些新闻网站上的Flash嵌入式电影并从使用的嵌入式播放器SWF中获得无效引用的重复消息可能非常有趣。 :d

在C/C ++中:分配也是表达式与非常相似的分配=和比较==运算符的结合。本身并不是有害的功能,但是通过意外误解操作员,可以轻松引入(有时是微妙的)错误。

int i = 10;

someCode();

if(i = 5)
{
    /* We don't want this block to be executed, but it is */
    moreCode();
}

使用包装私有语言默认和私人编程公约默认值访问Java中的修饰符。

用外壳中的空字符串替换未定义的变量,没有任何警告: rm -rf $nosuchvar/*.

在徽标上逆时针转动的能力。 WTF,让我们顺时针旋转 360 - x 学位。

从另一个线程停止线程

在Java和其他语言中,您可以任意停止另一个线程,而无需给您停止正确完成的线程的时间。这个能力已经 弃用 考虑到几乎所有情况都可能带来的大量问题。

变量 在PHP中

只是因为你 $can 并不意味着你 $$should

With 尽管有有用的情况,但我想到了Delphi中的陈述。

从索引开始尴尬阵列 1!

在珀尔, 标量上下文与列表上下文 可能很棘手。有一些优点使某些操作方便,但偶尔您会遇到可怕的事情,例如 完全改变操作员的含义 (可能与代码中的很大距离之遥)。

sub foo { (1..5) }
my @list = foo();           # (1,2,3,4,5)
my $length = scalar @list;  # 5. the length of the list.
my $length2 = scalar foo(); # '' (the empty string. because it's false)

那是不对的。

(这是由于试图制作某种类似常规范围操作员的作用而产生的,因此您可以在循环中说些什么 next if /start_regex/ .. /end_regex/).

Python 2.x的相对导入语法。假设我有一个包裹 x.plugins 这增加了对其他各种库的支持 x. 。假设我有一个 sqlalchemy 模块IN x.plugins 因此我可以将SQLalchemy支持添加到 x. 。如果我将以下行添加到sqlalchemy.py,您会认为会发生什么?

import sqlalchemy

答案是该模块将尝试导入自身。该语法的作用实质上使得不可能导入实际的全局SQLalchemy软件包。 Python 2.5添加了一种指定这是相对导入的方法:

from . import sqlalchemy

...但是直到python 3才真正摆脱了第一个语法(尽管可以在Python 2.6+中禁用它 from __future__ import absolute_import).

sun.misc.unsafe 是我一直以来的最爱;收集“我们需要它来实施事物,但真的,真的不认为您应该使用它。”

fortran共同块。如果您犯了一个简单的错误,则应用程序的一部分可以抓住另一部分的全球群体。

Fortran分配了goto语句 / COBOL ALTER语句。自修改代码。危险,警告,飞行的意大利面条怪物!

对象方向(来自所有静态键入语言)。我将赌注此功能拥有并将继续以付费 非常 不仅仅是无效的指针。对象方向仅在动态中很好 消息传递 语。因此,它也应该从像Python这样的动态语言中删除(因为它不使用消息传递而是传统的子例程调用)。

magic_quotes 在PHP中.

未经经验的开发人员要么依赖它可以启用它,因此假设所有用户输入都可以逃脱用于SQL查询,或者依靠它被禁用,从而始终逃脱其输入。

假设它已启用,然后在不在的系统上运行代码时,它会打开宽大的SQL注入孔。

当假设它是残疾而不是,它将导致后斜切实际上存储在DB中,从而导致丑陋/不正确的字符串。

也没有非常简单的方法来处理这两种情况 - 您需要检查是否使用 get_magic_quotes_gpc() 然后申请 stripslashes() 在所有值 $_* 阵列 - 自从 array_map 不是递归,您需要一个自定义功能。

允许程序员可以编写未注听或毫无意义的代码的语言功能。

在此处稍微走出一点 - 空隙函数。函数总是做某事,因此,它应该返回结果或有关其成功或失败的其他一些信息。

戳基本...

我不得不说垃圾收集。它并没有消除考虑内存管理的需求,但它消除了 洞察力 需要考虑内存管理,这常常消除实际思想,然后您获得巨大的资源猪,不知道为什么。特别是什么时候 无论如何,现代世代GC的行为都可以描述为“无论如何,都没有夸张的夸张。

C,绝对是C ++:指针算术。允许人们将整数转换为内存地址,这要解决问题。

甚至可以完全访问指针?

在C ++中,您的参考文献几乎完全不必要。对于其余案例,应将智能指针视为强制性。

Java也证明了您 能够 制作一种编程语言,该语言使用指针,而不允许人们访问指针价值本身。

除了 null ...但这是一个不同的故事。

许可以下: CC-BY-SA归因
scroll top