![]() |
1
25
是的,这是一个风险-而且它被讨论了一个 许多 . 已经到了它的位置了 非常 很难从零开始收集C。幸运的是,情况有所稳定,C 3.0和C 4.0之间的语言变化相对较小。 事实上,我最近做了很多工作试图修复 CF generics problem 作为修复的一部分,实际上可能会发生代码几乎恢复到C 1.2技术(没有,或很少,泛型)。所以大多数问题 可以 用更简单的语言结构来处理。重点是: 做点什么应该有多难 ?
例如-匿名方法添加
批次
相对简单的好处。
我看到很多关于C的非琐碎部分的问题,我想我会努力教一个初学者。 全部的 从地面向上。像乔恩的《深度C》这样的书适合那些已经了解基本知识的人(至少是C 1.2;理想情况下是一些C 2.0),但它并不是专为新手设计的(我知道乔恩不会不同意)。 真是个棘手的问题。幸运的是,C团队设定了很高的标准(包括在内);一些新的东西 非常 有助于融入语言。 |
![]() |
2
7
在我看来,C没有太多的特性。几乎所有2.0和3.0中的新功能对我和我的同事来说都是每天都会用到的,甚至连vb的家伙也很快就把它们全部收集起来了。一些新特性使学习语言变得更加容易,比如使用内联lambda而不是委托、var关键字和对象初始值设定项,只需从C 3.0中列举一些(没有C 3.5,顺便说一下,您会把它与.NET 3.5混淆)。 C语言在大多数情况下都是简单的,强大的特性都很容易使用,不像C++,设计者们说你可以用C++做所有的事情,但是他们从来没有提到过很多事情都会变成真正的痛苦,这是因为C++确实能做所有的事情,包括很多程序员很少会做的事情。,如果有的话,使用。支持每件事意味着许多事情比必要的要复杂,这使得学习变得更加困难。这就是一种语言的区别,在这种语言中,功能使人难以学习,但却非常强大;在这种语言中,功能使人更容易使用,并提高了生产力,尽管理论上功能较弱。 而且,在纯数量的特征中,C是远离C++的,特别是如果你在这张图片中包含C++ 0x,尽管有些人有“太多的特征”,但是它更容易学习。我对C++的观点是,如果你想要的话,C语言实际上并没有那么多的特性。 |
![]() |
3
5
当我用C编码时,我几乎使用了它的所有特性。不是一下子就能做到的,记住,C的每一个特性都有它的位置。很多人不知道C有一个“::”操作符,而且从未听说过。 extern alias “,但我今天必须使用它来解决两个DLL之间的命名冲突。
“收益率回报”是我最喜欢的特性之一。我不是每天都使用它,但我曾经用C 1.0手工编写IEnumerator接口,这是一个巨大的痛苦,我不想重复。另外,它对写作真的很有用
coroutines
,甚至连不会产生任何输出的协程(
C具有内部功能和闭包。当我在C++中编码时,它们会被严重地忽略。 C有这么多不同的方法来编写一个内部函数,这似乎很愚蠢,
但是1只是出于历史原因,表格2和3各有其位置。
无论是扩展方法、运算符重载、泛型、泛型约束、默认参数、空合并、三元运算符、静态构造函数、选中/未选中、自动属性、预处理器指令、值类型…作为一名全职程序员,我至少偶尔会用到所有这些功能,并且消除其中的任何一个功能都会给我带来额外的工作和麻烦。(
我不认为它有太多的功能,我认为它还不够。每当我不得不一遍又一遍地写类似的代码时,我都会诅咒这种语言没有任何捷径。 诀窍是让那些没有全职工作来理解的程序员成为可能。(对于那些整天用C语言编程却仍然无法学习语言的人——嗯,解雇他们?)如果微软让功能更“谷歌化”或至少“F1化”,这可能会有所帮助。例如,当我把光标放在“??“或”=>“,然后按F1,我将获得这些操作员的帮助页。或者考虑静态构造函数:如果代码说“static constructor()”而不是“static myclassname()”,那么在Web上搜索它会更容易。 在我看来,比语言膨胀更大的问题是框架膨胀。.NET框架是巨大的,微软反复地重新实现相同的东西,每次都进行膨胀的、有缺陷的设计:winforms和wpf,访问数据库的各种方式等等。 |
![]() |
4
2
你可能应该读 this blog post 作者Eric Gunnerson,微软C编译器团队成员。 他解释了新功能是如何进入语言的。基本上,他们在开始时得到“-100分”,这意味着它必须对整个软件包产生显著的净积极影响,才能使其成为语言。 |
![]() |
5
2
事实上,关于C应该如何进化,有很多争论。事实上,有些人认为,通过添加许多新特性,语言变得难以学习,但大多数人将C视为一种多范式编程语言。它首先是一种强类型、功能齐全的面向对象语言,但它确实有一些概念,直到最近才限于功能和动态编程语言。对于初学者来说,这些特性可能会让人感到困惑,但它们提供了很大的灵活性和功能,有时它们可能足以阻止您在应用程序中使用特定于域的语言,并处理所有集成问题。你可以经常谈论在语言本身中应该执行什么,以及应该是框架的一部分,但是请记住,你提到并认为多余的大部分功能实际上是开发者请求的结果,并且它们提供了将C语言与其他语言(Java想到的)分开的功能。一旦程序员习惯了这些特性,他就会认识到它们的优点。 您提到了Linq,我不得不承认一开始我有点怀疑,因为我一直认为SQL是处理数据的一种非常自然的语言,但现在我真的很喜欢,而且我看到了在编译时对查询进行评估的好处。lambda表达式总是很好的,事实上,如果使用过度,它们会使代码难以读取,但有时它们实际上会简化代码。我不太喜欢“var”关键字,但有时它确实很有用,而且老实说,在编写linq时不使用它会使代码难以阅读。我自己也是一个初学者,我认为学习这些概念并不困难。我在学校也经常使用Java,我真的很怀念C语言的一些特性(我不是说Java是一种坏语言,相反,在某些方面,我认为它比C语言代码合同好,尤其是出于学术目的)。 |
![]() |
6
2
我不认为学习新的语言特性是需要担心的:学习应用它们的正确情况需要几十年。
这是你需要解决的真正问题。一个代码库被分割成不同的样式,每个人都无法维护,这是一个昂贵的代码库维护。使用新颖的特性来编写“简短而漂亮的代码”可能无法最大限度地发挥代码对组织的效用。 你处境的根本原因是什么?它是:
我敢打赌,这将是上述两者的混合。 |
![]() |
7
1
学习现代编程语言是否困难? 答:理想情况下,你希望使用你能使用的最强大的语言,这能让你正确地表达事物。 反对:你想考虑的是手头的问题,而不是语言是如何工作的。 总的来说:我支持更强大的语言,即使它们更困难。当我不能让语言做我需要的事情时,我会觉得很恼火,所以我必须解决它,或者把它变成另一种愚蠢的模式。我特别不介意碰到一些奇怪的新语法,因为互联网只需点击一下。 编辑额外的想法:我是为了在向语言添加特性时保持一致/逻辑语法,但这不是Lisp讨论的正确线程。 C是否应该去掉一些特性? 我大量使用了新特性,比如LINQ、扩展方法、var(我刚刚写出了类型,为什么要再写一次?)以及匿名函数。我发现他们可以给生产力带来很大的好处。我建议那些还没有掌握LINQ的人,他们需要一些时间来学习对象的LINQ,因为在任何时候你设置了逻辑来处理它都非常方便。 不过,我不太喜欢像SQL这样的特殊LINQ语法。我发现它在C代码的中间有点刺耳——在我看来,它与调用语法样式的对象方法冲突。我会 更喜欢使用更常见的列表理解语法,例如python。 C是否需要新功能? 我真的想要一些更好的语法来快速初始化数组(或者IEnumerables?)还有字典。C在这方面有点笨拙-我最后不得不打很多大括号。关于这个,我真的很怀念产量!(生成此集合中的每个项)语法。 我还希望C借用F改进的类型推断,也许还有它的元组和多重赋值。也许我应该去用f。 |
![]() |
8
0
即使我只是一个休闲的C用户,在Delphi、C++和Python中有很强的背景,我可以很容易地掌握C语言的特征概念。在我看来,C是一种适当平衡的语言。唯一的麻烦是,我几乎记不清头脑中有足够的语法(尤其是与linq相关的语法),无法像在Python中那样以触摸式键入速度生成代码。我对帕斯卡语法的偏好也会妨碍我。但是,在全能的Visual Studio.NET Express的帮助下,这完全不是问题。 只要他们免费提供这样一个惊人的工具,我相信C with vs.net是最好的编码环境之一。 |
![]() |
9
0
我也很喜欢大多数新特性,而且老实说,我不想失去扩展方法和一般的LINQ。 就学习的难易程度而言,我认为对于新手来说,这个问题更像是一个问题——从经验来看,让他们加快速度绝对是选择最大的胜利,并在他们遇到其他事情时帮助他们摆脱困境的一个例子。除了多线程之外,了解泛型似乎是获得其他特性好处的关键。 每一个附加功能都会带来额外的好处。最终会出现新的语言,使这些相同的功能更容易使用,但这并不意味着我们不应该试图改进我们现在拥有的功能。 |
![]() |
10
0
是的,C有很多特性,但这就是我们使用它的原因!任何一个进入程序员职业生涯的人都应该期望在那里度过学习/学习新事物和参加考试的职业生涯!作为一个热爱学习新事物的人,这就是我们热爱它的原因! 就个人而言,我发现lambda表达式和扩展方法(例如)非常有用。为了创建更大规模的分布式应用程序,我想把数据和逻辑分开,我发现LINQ并没有那么有用。但我期待着C 4的特性,如可选参数。 正如@alex提到的,我认为学习何时适当地使用特性是最具挑战性的方面。为我们这些从早期就在C工作的人干杯! |
![]() |
11
0
我认为问题出在那些只需要在所有地方使用最新语法的人身上。他们制作了一个简单的“你好,世界”节目,看起来就像意大利面条工厂的爆炸。 想象一下你是一个作家,你一直坚持使用最复杂、最模糊、最不需要或最难理解的词语。 很少有人会读你的书。 语言让一些人搞得一团糟,这一事实拖累了其他人,因为他们必须弄清楚到底发生了什么。我的经验是,写这种代码的人写的代码不太好,需要大量维护。我的意思是他们已经把接吻原则扔到垃圾桶里了。艺术或编程使复杂的事情变得简单,反之亦然。这种情况可能会为一种更简单的语言创造一个市场,这种语言可以完成你需要它做的一切,但只能用可读的人类语法。 |
![]() |
12
-1
这些特征是我们使用C的原因,也是使C“现代”的原因。如果C没有提供类,比如多线程,有人会使用它吗?汇编是一种真正没有特性的语言的例子。作为一种语言学习起来很容易,但没有人愿意使用它。 在这方面,特定于小领域的语言确实是一个极端。以经典正则表达式为例。它有一堆仅用于字符串操作的特性。如果它没有这些,谁会使用它?这些特性使它如此强大和富有表现力。一般语言也一样。 并不是所有这些特性都是写C所必需的。理解C代码就是问题出现的地方。但是如果这些不是C中的特性,那么每个人都会以自己的方式实现多线程,而不是学习处理多线程的一种方法,您需要根据正在阅读的代码来学习多个。 |
![]() |
13
-1
是的,C do有很多特性,这不是我的观点, 这是事实 ,这是一个丰富的平台。如果有人想对此争论,声称这种语言没有很多特性,请给我看一种有很多特性的语言,并解释为什么它比C有更多特性。 不管怎样, 我看不出有什么问题 . 您始终可以选择适合您的功能子集并使用它们。一种功能丰富的语言没有任何问题,只要这些功能被正确使用,而不是仅仅因为它们的存在而强制使用到代码中。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 4 月前 |