作为一名程序员,我经常看一下我目前正在使用的语言的一些功能并自己思考“这对于程序员来说很难做到,并且可以由机器自动处理”。
这种功能的一个例子是内存管理,它已经在各种语言中自动运行了一段时间。虽然内存管理在大多数情况下并不难以手动完成,但在不泄漏内存的情况下在应用程序中完美地完成操作非常困难。自动化使其变得简单,以便我们的程序员可以专注于更关键的问题。
您是否认为编程语言应该自动化的功能因为奖励/难度比太低(例如并发)?
这个问题旨在成为关于编程未来的头脑风暴,以及哪些语言可以让我们专注于更重要的任务,所以即使你不认为自动化也请发表你的意愿是实际/可行的。好的答案将指出在许多语言中真正难以做到的事情,而不是单一语言的宠儿。
答案 0 :(得分:9)
无论语言能为我自动做什么,我都想为自己做点什么。
答案 1 :(得分:7)
Concurrent programming / parallelism(半)自动化,反对不得不乱用线程,回调和同步。能够并行化循环,例如:
Parallel.ForEach(fooList, item =>
{
item.PerformLongTask();
}
刚刚取胜。
然而,某些语言已在某种程度上支持此类功能。值得注意的是,F#具有异步工作流程。随着.NET 4.0的发布,Parallel Extensions库将使C#和VB.NET中的并发更多更容易。我相信Python也有某种并发库,但我个人还没有使用它。
使用purely functional语言的全自动并行机制也很酷,即不必稍微更改代码,并自动使其在多个内核之间以最佳方式运行。请注意,这只能使用纯函数语言(例如Haskell,而不是CAML / F#)来完成。尽管如此,上面给出的示例构造对于面向对象和其他语言的并行化自动化非常方便。
我认为,随着桌面计算机开始从2个核心转移到4个核心,然后8个核心,图书馆,设计模式,甚至整个编程语言都面向简单和高级别的并行支持将变得越来越普遍核心和自动并发的优势变得更加明显。
答案 2 :(得分:5)
exec("Build a system to keep the customer happy, based on requirements.txt");
答案 3 :(得分:5)
在Java中,我想要一个能使整个类不可变的关键字。
E.g。
public immutable class Xyz {
}
如果任何不变性条件被破坏,编译器会警告我。
答案 4 :(得分:5)
在Java中,不那么冗长地创建bean。
例如:
bean Student
{
String name;
int id;
type1 property1;
type2 property2;
}
这将创建一个bean私有字段,默认访问器,toString,hashCode,equals等。
答案 5 :(得分:4)
并发。在提出这个问题时,这是我的主要想法。随着时间的推移,这将变得越来越重要,因为当前的CPU已经拥有多达8个逻辑内核(4个内核+超线程),并且将在几个月内出现12个逻辑内核。在未来,我们将拥有大量的内核,但大多数编程语言只能让我们一次只使用一个。
大多数编程语言公开的Threads + Synchronization模型都是非常低级的,并且与CPU的工作非常接近。对我来说,当前的并发语言支持水平大致相当于C中的内存管理支持:未集成,但有些东西可以委托给OS(malloc,free)。
我希望某种语言能够提供一个合适的抽象,使得Threads + Synchronization模型更容易,或者只是完全隐藏它(就像自动内存管理在Java中使旧的malloc / free过时一样)。 / p>
某些功能语言(例如Erlang)具有良好的多线程支持声誉,但进行函数式编程所需的大脑转换并不能使整个考验变得更加容易。
答案 6 :(得分:4)
的.Net:
使用Replace
等方法操作字符串并且不将值(新字符串)返回到变量时出现警告,因为如果您不知道字符串是不可变的问题会让你感到沮丧。
答案 7 :(得分:2)
在C ++中,键入变量声明的推断,这样我就不需要编写
for (vector<some_longwinded_type>::const_iterator i = v.begin(); i != v.end(); ++i) {
...
}
幸运的是,这将以auto
:
for (auto i = v.begin(); i != v.end(); ++i) {
...
}
答案 8 :(得分:2)
咖啡。我的意思是语言叫做Java - 所以它应该能够煮我的咖啡!我讨厌从节目中起床,去咖啡馆,找到营销人员已经拿了最后一杯而不是另外一个锅。
答案 9 :(得分:2)
持久性,在我看来,当这真的应该是一个配置问题时,我们写了太多的代码来处理持久性。
答案 10 :(得分:1)
在C ++中,enum-to-string。
在Ada中,该语言将枚举类型的图像属性定义为返回与枚举值的文本表示相对应的字符串的函数。
C ++没有提供这样的清洁工具。它需要几行非常神秘的预处理器宏黑魔法来获得粗略的等效物。
答案 11 :(得分:0)
对于提供运算符重载的语言,仅在定义一个操作时为对称操作提供自动生成的重载。例如,如果程序员提供了相等运算符而不是不等运算符,则该语言可以轻松生成一个。在C ++中,可以对复制构造函数和赋值运算符进行相同的操作。
我认为自动生成对称操作的单侧会很好。当然,我肯定希望能够在需要时明确说出不要那样做。我想提供双方的实施,其中一个是私人和空的可以完成这项工作。
答案 12 :(得分:0)
LINQ所做的一切。 C#已经破坏了我,我现在发现很难用任何其他语言的集合做任何事情。在Python中,我经常使用列表推导,但它们并不像LINQ那么强大。我还没有找到任何其他语言使得使用C#中的集合变得简单。
答案 13 :(得分:0)
在Visual Studio环境中,我希望“删除未使用的使用”以在项目中的所有文件中运行。我发现必须手动打开每个单独的文件并以文件为基础调用此操作是一个重要的时间。
答案 14 :(得分:0)
从动态语言的角度来看,我希望看到更好的工具支持。 Steve Yegge对此有一个great post。例如,在很多情况下,工具可以查看各种代码路径,并确定方法或函数是否存在,并提供编译器冒烟测试的等效项。显然,如果你使用了大量真正动态的代码,这将无法正常工作,但实际情况是,你可能不会这样做,所以如果Python会告诉你的那样会很好.ToLowerCase ()在编译时不是有效函数,而是等到你触及else子句。
s = "a Mixed Case String"
if True:
s = s.lower()
else:
s = s.ToLowerCase()
答案 15 :(得分:0)
简单:像C#一样在C / C ++中初始化变量。它可以在其他人的代码中为我节省多个调试时间。
当你特别不想初始化var时,会有一个关键字。
noinit float myVal; // undefined
float my2ndVal; // 0.0f