我想实现UNDO和REDO选项(正如我们在MS word等中看到的那样).你能为我建议一个数据结构,我该如何实现呢?
在Unix shell编程中,管道操作符是一个非常强大的工具.使用一小组核心实用程序,系统语言(如C)和脚本语言(如Python),您可以构建极其紧凑且功能强大的shell脚本,这些脚本由操作系统自动并行化.
显然这是一个非常强大的编程范例,但我没有看到管道作为除shell脚本之外的任何语言的一流抽象.使用管道复制脚本功能所需的代码似乎总是非常复杂.
所以我的问题是为什么我在C#,Java等现代高级语言中看不到类似于Unix管道的东西?是否有支持一流管道的语言(除了shell脚本)?表达并发算法不是一种方便安全的方法吗?
为了防止有人提起它,我查看了F#管道转发操作符(前向管道操作符),它看起来更像是一个函数应用程序操作符.它将函数应用于数据,而不是将两个流连接在一起,据我所知,但我愿意进行更正.
后记:在做一些关于实现协同程序的研究时,我意识到有一些相似之处.在一篇博客文章中,马丁·沃尔夫描述了一个类似于我的问题,但在协程而不是管道方面.
language-agnostic shell concurrency programming-languages pipe
是否有免费的第三方或.NET类将HTML转换为RTF(用于启用富文本格式的Windows窗体控件)?
"免费"要求来自这样一个事实,即我只是在处理原型,只需加载BrowserControl,只需要呈现HTML(即使它很慢),并且Developer Express将发布自己的这样的控制很快.
我不想学习手工编写RTF,而且我已经知道HTML,所以我认为这是快速获得一些可证明代码的最快方法.
现在新的云计算时代即将到来,我将学习编程,我不知道云支持哪种编程语言.
我认为什么支持Java,ASP.NET,PHP,Python,Ruby,Perl等而不是低端语言,如C,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) 维基百科曾经说*关于鸭子打字:
在使用面向对象编程语言的计算机编程中,duck typing是一种动态类型,其中对象的当前方法和属性集确定有效语义,而不是从特定类或特定接口的实现继承.
(*Ed.注意:自从发布此问题以来,维基百科文章已经过编辑,删除了"动态"一词.)
它说关于结构类型:
结构类型系统(或基于属性的类型系统)是类型系统的主要类,其中类型兼容性和等价性由类型的结构决定,而不是通过显式声明.
它将结构子类型与鸭子类型进行对比,如下所示:
[结构系统]与... duck typing相反,其中仅检查在运行时访问的结构的一部分的兼容性.
然而,术语鸭子打字在我看来至少是直观地包含结构子打字系统.实际上维基百科说:
这个概念的名称[鸭子打字]是指鸭子测试,归功于James Whitcomb Riley,其措辞可能如下:"当我看到一只鸟像鸭子一样散步,像鸭子一样游动,像鸭子一样呱呱叫,我称这只鸟为鸭子."
所以我的问题是:为什么我不能将结构子类型称为鸭子打字?是否存在动态类型语言,这些语言也不能被归类为鸭子类型?
后记:
正如有人叫daydreamdrunk上reddit.com如此雄辩地提出,它 "如果它编译像鸭子,像鸭子链接..."
后后记
许多答案似乎基本上只是重复我已经在这里引用的内容,而没有解决更深层次的问题,这就是为什么不使用术语duck-typing来涵盖动态类型和结构子类型?如果您只想谈论鸭子类型而不是结构子类型,那么只需调用它:动态成员查找.我的问题是没有关于鸭子打字这个术语对我说,这只适用于动态语言.
type-systems duck-typing language-design definitions structural-typing
我使用任务并行库从.NET框架4(特别是Parallel.For和Parallel.ForEach)并行有些任务看起来像他们应该在双核机器上容易实现并行然而,当我得到极其平庸速度起坐.
在分析系统时,由于垃圾收集器,看起来有很多线程同步正在进行.我正在进行大量的对象分配,所以我想知道如何在最小化代码重写的同时提高并发性.
例如,在这种情况下是否有一些技术可用:
Dispose吗?后记:
问题不在于GC运行得太频繁,而是GC阻止并发代码有效并行运行.我也不认为"分配更少的对象"是可接受的答案.这需要重写太多代码来解决一个很难并行化的垃圾收集器.
我已经发现了一个有助于整体性能的技巧(使用gcServer),但它并没有帮助并发性能.换句话说Parallel.For,在一个令人尴尬的并行任务上,它比串行For循环快20%.
后后记:
好的,让我进一步解释一下,我有一个相当大而复杂的程序:一个优化的解释器.它足够快,但我希望它在给定并行任务(我的语言中内置的基本操作)时的性能,以便在更多内核可用时进行扩展.我在评估期间分配了大量小对象.整个解释器设计基于从单个多态基础对象派生的所有值.这在单线程应用程序中运行良好,但是当我们尝试将任务并行库应用于并行评估时,没有任何优势.
经过大量调查,为什么任务并行库没有为这些任务在核心之间正确地分配工作,似乎罪魁祸首是GC.显然GC似乎是一个瓶颈,因为它做了一些我不理解的场景线程同步.
我需要知道的是:究竟是GC这样做可能会导致严重的并发代码来执行不好当它大量拨款,以及我们如何解决这除了刚刚分配较少的对象.我已经想到了这种方法,并且需要对大量代码进行重大改写.
.net parallel-processing concurrency performance garbage-collection
假设,win表单具有某些输入字段,用户输入/重新输入一些数据.
如何保留"撤消"操作先前输入的数据?
我想知道完成它的最佳方法.
我想要这样做的简短解释:
我正在为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的卷影副本吗?
我试图用Python 3.1找出系统文件夹的位置.例如"我的文档"="C:\ Documents and Settings\User\My Documents","Program Files"="C:\ Program Files"等.
.net ×4
concurrency ×2
undo-redo ×2
appdomain ×1
c# ×1
cloud ×1
definitions ×1
duck-typing ×1
html ×1
path ×1
performance ×1
pipe ×1
properties ×1
python ×1
revit ×1
richtext ×1
rtf ×1
shell ×1
type-systems ×1
windows ×1
winforms ×1