小编use*_*298的帖子

是否有一种语言接近英语的编程语言?

大多数语言允许"调整"语法的某些扩展部分(C++,C#)和/或将在代码中使用的语义(Katahdin,lua).但我还没有听说过一种语言可以完全定义代码的样子.那么是不是已经存在一些具有覆盖所有语法和定义语义的能力的语言?

我想要做的例子基本上来自下面的C#代码:

foreach(Fruit fruit in Fruits)
{
  if(fruit is Apple)
  {
    fruit.Price =  fruit.Price/2;
  }
}
Run Code Online (Sandbox Code Playgroud)

我想能够用我这样完美的语言编写上面的代码:

Check if any fruits are Macintosh apples and discount the price by 50%.
Run Code Online (Sandbox Code Playgroud)

从这个"想象的"语言中编码器的角度来看,我想到的优点是:

  1. 很清楚发生了什么(自我描述) - 它甚至可以让孩子理解我的程序
  2. 掩盖了我必须用C#编写的所有复杂性.但是,为什么我应该学习如果语句,算术运算符等已经实现了

我认为维护这个程序的程序员的缺点是:

  1. 也许你会以不同于我的方式表达这个程序,所以你可能无法获得我在句子中表达的所有信息
  2. 程序可能非常冗长且难以调试,但如果可能甚至接近上述类型的语法,可能会有更多人开始正确编程?我觉得这太棒了.我可以去上班,然后写一篇文章在这样的winform上画一个正方形:

Create a form called MyGreetingForm. Draw a square with in the middle of MyGreetingFormwith a side of 100 points. In the middle of the square write "Hello! Click here to continue" in …

compiler-construction parsing nlp programming-languages

12
推荐指数
2
解决办法
3940
查看次数

派生自异常类是在C#中使对象"可抛出"的唯一方法吗?

我可以解决一下如何使我的非异常对象变为'throwable',以便在try块中声明任何局部变量,就像obj在下面的try块中一样

try
{ 
   SomeObject obj = new SomeObject(); 
}catch {}
Run Code Online (Sandbox Code Playgroud)

可以跨越范围边界到catch {}子句?我想obj在catch {}子句中使用该实例,即使它的状态被破坏了.这有可能吗?

也许可能(?)因为C#编译器可能做的类似(对于优化我假设?)并允许catch子句接收任何System.Object但我不能在VS中使用它,对于这个方法:

public void Foo()
{

    try
    {
    }
    catch(Exception ex)
    {
    }

    try
    {
    }
    catch
    {
    }

}
Run Code Online (Sandbox Code Playgroud)

生成这个IL:

.method public hidebysig instance void  Foo() cil managed
{
  // Code size       22 (0x16)
  .maxstack  1
  .locals init ([0] class [mscorlib]System.Exception ex)
  IL_0000:  nop
  .try
  {
    IL_0001:  nop
    IL_0002:  nop
    IL_0003:  leave.s    IL_000a
  }  // end .try
  catch [mscorlib]System.Exception 
  {
    IL_0005: …
Run Code Online (Sandbox Code Playgroud)

.net exception-handling object

4
推荐指数
1
解决办法
331
查看次数

.NET中是否有构建功能来创建线程绑定变量?

有没有办法做到这一点(psedo代码):

GetCurrentThread().Items.Add(new RefObject);
Run Code Online (Sandbox Code Playgroud)

然后再回顾它

RefObject[] refObjs = GetCurrentThread().Items;
Run Code Online (Sandbox Code Playgroud)

并枚举对象.显然,这两个调用都会在它的生命周期内发生在同一个线程上.

基本的想法是,我可以轻松识别当前线程的项目,并且它们实际上是在此线程中创建的.它与将Page.Request对象用于ASP.NET请求相同 - 您知道它在工作进程中非常独特,因此它不会与同时提供的其他请求混淆.我想对待一个线程Page.Request- 它来然后去,但是当它还活着时,我可以随意查询它而不关心过程中存在的其他威胁.

一旦我做了类似的事情,但它更多的是通过引用编组对象的模拟.我可以想到几种方法,但我真的不想自己手动存储线程和对象之间的映射.对于.NET中的线程,是不是有类似于TransactionScope的东西?我不太喜欢处理同步困难和避免竞争条件.

PS:如果没有,我是否可以至少为没有静态变量的应用程序域做到这一点?

.net multithreading scope named-scope transactionscope

2
推荐指数
1
解决办法
114
查看次数