小编cdi*_*ins的帖子

用于实施UNDO和REDO选项的数据结构

我想实现UNDO和REDO选项(正如我们在MS word等中看到的那样).你能为我建议一个数据结构,我该如何实现呢?

design-patterns undo-redo data-structures

45
推荐指数
2
解决办法
3万
查看次数

为什么我不会在大多数高级语言中看到管道运营商?

在Unix shell编程中,管道操作符是一个非常强大的工具.使用一小组核心实用程序,系统语言(如C)和脚本语言(如Python),您可以构建极其紧凑且功能强大的shell脚本,这些脚本由操作系统自动并行化.

显然这是一个非常强大的编程范例,但我没有看到管道作为除shell脚本之外的任何语言的一流抽象.使用管道复制脚本功能所需的代码似乎总是非常复杂.

所以我的问题是为什么我在C#,Java等现代高级语言中看不到类似于Unix管道的东西?是否有支持一流管道的语言(除了shell脚本)?表达并发算法不是一种方便安全的方法吗?

为了防止有人提起它,我查看了F#管道转发操作符(前向管道操作符),它看起来更像是一个函数应用程序操作符.它将函数应用于数据,而不是将两个流连接在一起,据我所知,但我愿意进行更正.

后记:在做一些关于实现协同程序的研究时,我意识到有一些相似之处.在一篇博客文章中,马丁·沃尔夫描述了一个类似于我的问题,但在协程而不是管道方面.

language-agnostic shell concurrency programming-languages pipe

42
推荐指数
5
解决办法
5228
查看次数

如何在不支付组件的情况下将HTML转换为.NET中的RTF(RTF)?

是否有免费的第三方或.NET类将HTML转换为RTF(用于启用富文本格式的Windows窗体控件)?

"免费"要求来自这样一个事实,即我只是在处理原型,只需加载BrowserControl,只需要呈现HTML(即使它很慢),并且Developer Express将发布自己的这样的控制很快.

我不想学习手工编写RTF,而且我已经知道HTML,所以我认为这是快速获得一些可证明代码的最快方法.

.net html rtf richtext

37
推荐指数
3
解决办法
9万
查看次数

哪种编程语言适用于云计算?

现在新的云计算时代即将到来,我将学习编程,我不知道云支持哪种编程语言.

我认为什么支持Java,ASP.NET,PHP,Python,Ruby,Perl等而不是低端语言,如C,C++等......或者我错了?如果是这样,软件公司将不得不重新开发他们的软件.这是你开始一个项目的时候,你没有大型软件公司作为竞争对手吗?

我想知道我应该关注哪种语言学习,以便我可以为云开发.

cloud

32
推荐指数
4
解决办法
13万
查看次数

轻松创建支持C#索引的属性

在C#中,我发现索引属性非常有用.例如:

var myObj = new MyClass();
myObj[42] = "hello"; 
Console.WriteLine(myObj[42]);
Run Code Online (Sandbox Code Playgroud)

但据我所知,没有语法糖支持自己支持索引的字段(如果我错了请纠正我).例如:

var myObj = new MyClass();
myObj.field[42] = "hello"; 
Console.WriteLine(myObj.field[42]);
Run Code Online (Sandbox Code Playgroud)

我需要这样做的原因是,我已经用我的分类的索引属性,但我 GetNumX(),GetX()SetX()功能如下:

public int NumTargetSlots {  
    get { return _Maker.NumRefs; }  
}
public ReferenceTarget GetTarget(int n) {
    return ReferenceTarget.Create(_Maker.GetReference(n));
}
public void SetTarget(int n, ReferenceTarget rt) {
    _Maker.ReplaceReference(n, rt._Target, true);
}
Run Code Online (Sandbox Code Playgroud)

你可能会看到将这些暴露为一个可索引的字段属性会更有意义.我可以编写一个自定义类来实现这一点,每次我想要语法糖,但所有的样板代码似乎都没有必要.

所以我编写了一个自定义类来封装样板,并且可以轻松创建可以编制索引的属性.这样我可以添加一个新属性,如下所示:

public IndexedProperty<ReferenceTarget> TargetArray  {
    get { 
       return new IndexedProperty<int, ReferenceTarget>(
           (int n) => GetTarget(n), 
           (int n, ReferenceTarget rt) => SetTarget(n, …
Run Code Online (Sandbox Code Playgroud)

c# properties indexed-properties

27
推荐指数
4
解决办法
2万
查看次数

鸭子打字,它必须是动态的吗?

维基百科曾经说*关于鸭子打字:

在使用面向对象编程语言的计算机编程中,duck typing是一种动态类型,其中对象的当前方法和属性集确定有效语义,而不是从特定类或特定接口的实现继承.

(*Ed.注意:自从发布此问题以来,维基百科文章已经过编辑,删除了"动态"一词.)

它说关于结构类型:

结构类型系统(或基于属性的类型系统)是类型系统的主要类,其中类型兼容性和等价性由类型的结构决定,而不是通过显式声明.

它将结构子类型与鸭子类型进行对比,如下所示:

[结构系统]与... duck typing相反,其中仅检查在运行时访问的结构的一部分的兼容性.

然而,术语鸭子打字在我看来至少是直观地包含结构子打字系统.实际上维基百科说:

这个概念的名称[鸭子打字]是指鸭子测试,归功于James Whitcomb Riley,其措辞可能如下:"当我看到一只鸟像鸭子一样散步,像鸭子一样游动,像鸭子一样呱呱叫,我称这只鸟为鸭子."

所以我的问题是:为什么我不能将结构子类型称为鸭子打字?是否存在动态类型语言,这些语言也不能被归类为鸭子类型?

后记:

正如有人叫daydreamdrunk上reddit.com如此雄辩地提出,它 "如果它编译像鸭子,像鸭子链接..."

后后记

许多答案似乎基本上只是重复我已经在这里引用的内容,而没有解决更深层次的问题,这就是为什么不使用术语duck-typing来涵盖动态类型和结构子类型?如果您只想谈论鸭子类型而不是结构子类型,那么只需调用它:动态成员查找.我的问题是没有关于鸭子打字这个术语对我说,这只适用于动态语言.

type-systems duck-typing language-design definitions structural-typing

24
推荐指数
6
解决办法
3837
查看次数

如何在高度并发的代码中提高.NET 4.0的垃圾收集器性能?

我使用任务并行库从.NET框架4(特别是Parallel.ForParallel.ForEach)并行有些任务看起来像他们应该在双核机器上容易实现并行然而,当我得到极其平庸速度起坐.

在分析系统时,由于垃圾收集器,看起来有很多线程同步正在进行.我正在进行大量的对象分配,所以我想知道如何在最小化代码重写的同时提高并发性.

例如,在这种情况下是否有一些技术可用:

  • 我应该尝试手动管理GC吗?
  • 我应该用Dispose吗?
  • 我应该固定物体吗?
  • 我应该做其他不安全的代码技巧吗?

后记:

问题不在于GC运行得太频繁,而是GC阻止并发代码有效并行运行.我也不认为"分配更少的对象"是可接受的答案.这需要重写太多代码来解决一个很难并行化的垃圾收集器.

我已经发现了一个有助于整体性能的技巧(使用gcServer),但它并没有帮助并发性能.换句话说Parallel.For,在一个令人尴尬的并行任务上,它比串行For循环快20%.

后后记:

好的,让我进一步解释一下,我有一个相当大而复杂的程序:一个优化的解释器.它足够快,但我希望它在给定并行任务(我的语言中内置的基本操作)时的性能,以便在更多内核可用时进行扩展.我在评估期间分配了大量小对象.整个解释器设计基于从单个多态基础对象派生的所有值.这在单线程应用程序中运行良好,但是当我们尝试将任务并行库应用于并行评估时,没有任何优势.

经过大量调查,为什么任务并行库没有为这些任务在核心之间正确地分配工作,似乎罪魁祸首是GC.显然GC似乎是一个瓶颈,因为它做了一些我不理解的场景线程同步.

我需要知道的是:究竟是GC这样做可能会导致严重的并发代码来执行不好当它大量拨款,以及我们如何解决这除了刚刚分配较少的对象.我已经想到了这种方法,并且需要对大量代码进行重大改写.

.net parallel-processing concurrency performance garbage-collection

12
推荐指数
1
解决办法
3119
查看次数

如何在.net windows应用程序中实现"撤销"操作?

假设,win表单具有某些输入字段,用户输入/重新输入一些数据.

如何保留"撤消"操作先前输入的数据?

我想知道完成它的最佳方法.

.net undo-redo winforms

11
推荐指数
1
解决办法
5965
查看次数

我可以使默认的AppDomain使用某些程序集的卷影副本吗?

我想要这样做的简短解释:

我正在为Autodesk Revit Architecture 2010编写插件.测试我的插件代码非常麻烦,因为我必须为每个调试会话重新启动Autodesk,手动加载Revit项目,单击Add-Ins选项卡然后启动我的插件.这花了太长时间.

我写了第二个插件来托管IronPython解释器.通过这种方式,我可以使用Revit提供的API.但最终,代码必须在C#中重写 - 并进行调试.

很简单,我想:只需从IronPython脚本加载插件DLL并进行练习即可.这确实有效,但一旦加载,我无法在Visual Studio中重新编译,因为DLL现在已加载到Revits AppDomain中.

很简单,我想(在StackOverflow的帮助下):只需在新的AppDomain中加载DLL即可.唉,RevitAPI对象无法封送到另一个AppDomain,因为它们不会扩展MarshalByRefObject.

我想我可能会使用影子副本.ASP.NET似乎正在这样做.但是阅读MSDN上的文档,似乎我只能在创建 AppDomain 时指定它.

我可以为当前(默认)AppDomain更改此设置吗?我可以强制它使用特定目录中的DLL的卷影副本吗?

.net appdomain revit

9
推荐指数
1
解决办法
4554
查看次数

在Python中查找系统文件夹位置

我试图用Python 3.1找出系统文件夹的位置.例如"我的文档"="C:\ Documents and Settings\User\My Documents","Program Files"="C:\ Program Files"等.

python windows path special-folders

9
推荐指数
2
解决办法
6361
查看次数