小编Hen*_*man的帖子

什么时候新语言是适合这项工作的工具?

很长一段时间以来,我一直在尝试使用不同的语言来查找我想要的功能集,而我却找不到它.我的语言非常适合我的各种项目,但我想出了这些语言的交集,这使我能用一种语言完成99.9%的项目.我想要以下内容:

  • 建立在.NET之上或具有.NET实现
  • 在编译时和运行时都很少依赖于.NET运行时(这很重要,因为其中一个主要用例是嵌入式开发,其中.NET运行时是完全自定义的)
  • 编译器是100%.NET代码,没有非托管依赖项
  • 支持任意表达式嵌套(见下文)
  • 支持自定义运算符定义
  • 支持类型推断
  • 优化尾调用
  • 有明确的不可变/可变定义(准确 - 我喜欢这个,但没有它可以生活)
  • 支持用于强元编程的真实宏(绝对必备)

我一直在使用的两种主要语言是Boo和Nemerle,但我也玩过F#.

针对Nemerle的主要投诉:编译器有可怕的错误报告,实现是错误的,因为地狱(编译器和库),宏只能在函数内部或作为属性应用,并且它是相当重的依赖性(虽然不够,它是一个交易破坏者).
针对Boo的主要投诉:没有任意表达式嵌套(dealbreaker),宏很难写,没有自定义运算符定义(潜在的交易破坏者).
针对F#的主要投诉:难看的语法,难以理解的元编程,非自由许可(epic dealbreaker).

所以我想的越多,我就越想开发自己的语言.

优点:

  • 获取我想要的确切语法
  • 获得更快的周转时间; 难以量化,但我不会惊讶地看到1.5倍的开发人员生产力,特别是由于测试基础设施可以实现某些项目
  • 我可以轻松地向编译器添加自定义功能,以便与我的运行时很好地配合
  • 我得到了一些设计和完全按照我想要的方式工作的东西- 就像听起来像NIH一样,这将使我的生活更轻松

缺点:

  • 除非能够普及,否则我将不得不承担维护的责任.我知道我至少可以让Nemerle的人过来,因为我觉得每个人都想要更专业的东西,但这需要一个村庄.
  • 由于第一个骗局,我担心在专业环境中使用它.也就是说,我已经在使用Nemerle并使用我自己的自定义修改编译器,因为它们根本不能很好地维护它.
  • 如果它没有获得普及,找到开发人员会更加困难,在某种程度上保罗格雷厄姆可能甚至不会宽恕.

因此,基于所有这些,一般的共识是什么 - 这是一个好主意还是一个坏主意?或许更有帮助,我是否错过了任何重大利弊?

编辑:忘记添加嵌套示例 - 这是Nemerle中的一个案例:

def foo = 
    if(bar == 5)
        match(baz) { | "foo" => 1 | _ => 0 }
    else bar;
Run Code Online (Sandbox Code Playgroud)

编辑#2:想象一下如果存在将转换为该语言的代码类型的例子并不会受到影响(单独的S.Lott的回答可能足以让我远离这样做).代码大量使用自定义语法(操作码,:=,quoteblock等),表达式嵌套等.你可以在这里查看一个很好的例子:这里.

boo nemerle

14
推荐指数
4
解决办法
956
查看次数

如何在C#visual studio中定义预处理器符号

对不起,如果我的术语错了.我#if TEST_APP在我的代码中写道.现在我想定义TEST_APP.我如何使用visual studios 2010进行设置?这是一个Windows窗体应用程序.

如果您能告诉我在winform项目和Web项目中设置的符号的名称,可以获得奖励

c# visual-studio-2010 visual-studio

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

如何从C#中的StatusStrip控件中删除调整大小的抓手图像?

我需要显示一个StatusStrip控件停靠顶部而不是底部.

用户要求.很长的故事.

如何在没有右角点的情况下显示StatusStrip?

c# statusstrip winforms

14
推荐指数
1
解决办法
6218
查看次数

如何在C#中为抽象语法树编写访问者模式?

我必须写一个访问者模式来导航AST.任何人都可以告诉我更多我将如何开始写它?据我所知,AST中的每个节点都有visit()方法(?),它会以某种方式被调用(从哪里?).这总结了我的理解.为了简化一切,假设我有节点Root,Expression,Number,Op,树看起来像这样:

      Root
        |
       Op(+)
      /   \
     /     \
 Number(5)  \
             Op(*)
             /   \
            /     \
           /       \
       Number(2)   Number(444)
Run Code Online (Sandbox Code Playgroud)

c# abstract-syntax-tree visitor-pattern

14
推荐指数
1
解决办法
6469
查看次数

IDE0063什么时候配置?

我试图了解此C#8简化功能:

IDE0063的“使用”语句可以简化

例如,我有:

void Method()
{
    using (var client = new Client())
    {
        // pre code...
        client.Do();
        // post code...
    } --> client.Dispose() was called here.
    // more code...
}
Run Code Online (Sandbox Code Playgroud)

IDE告诉我可以using通过编写以下代码来简化此语句:

void Method()
{
    using (var client = new Client());
    // pre code...
    client.Do();
    // post code...
    // more code...
}
Run Code Online (Sandbox Code Playgroud)

我不明白它是如何工作的以及它如何决定我不再using是变量。更具体地说,它什么时候调用client.Dispose方法?

c# ide refactoring c#-8.0

14
推荐指数
2
解决办法
1717
查看次数

C#创建对齐网格功能

我正在尝试创建一些在运行时使用的对齐网格功能,但我遇到了捕捉部分的问题.我已成功在面板上绘制了一个虚线网格,但是当我向面板添加标签控件时,如何将标签的左上角捕捉到最近的点?

谢谢

c# runtime winforms

13
推荐指数
3
解决办法
1万
查看次数

Visual Studio - 通过设计器在标签中添加换行符?

我有一个标签,我想用它来显示一些文字.我想展示几段文字.

有没有办法通过设计师在文本中进行换行?(\n\r只显示\n\r)

这是WinForms(实际上它是Compact Framework.)

c# label visual-studio winforms

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

DataGridView - 如何隐藏"新"行?

我的DataGridView是只读的 - 用户无法在其中输入数据,因此最后的空行("新"行?)看起来很难看.

如何防止它显示?

vb.net datagridview winforms

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

UPnP组播:M-SEARCH(发现)缺少答案

我创建了一个小程序来测试UPnP Multicast(Visual C#2010 Express,在Windows 7 Professional 64 Bit上运行).我可以从网络中的UPnP设备收到UPnP NOTIFY消息.但是当我发送M-SEARCH消息时,我得不到答案.

我在iOS环境中测试了相同的代码(适用于iOS的Monotouch,在Mac上的iPhone模拟器上运行).它运行良好,我得到了我的UPnP设备的所有搜索响应.我也可以从我的Windows程序中看到M-SEARCH消息.

看起来Windows(或防火墙?)隐藏了搜索响应.任何的想法?

这是代码:

IPEndPoint LocalEndPoint = new IPEndPoint(IPAddress.Any, 1900);
IPEndPoint MulticastEndPoint = new IPEndPoint(IPAddress.Parse("239.255.255.250"), 1900);

Socket UdpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

UdpSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
UdpSocket.Bind(LocalEndPoint);
UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(MulticastEndPoint.Address, IPAddress.Any));
UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 2);
UdpSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastLoopback, true);

Console.WriteLine("UDP-Socket setup done...\r\n");

string SearchString = "M-SEARCH * HTTP/1.1\r\nHOST:239.255.255.250:1900\r\nMAN:\"ssdp:discover\"\r\nST:ssdp:all\r\nMX:3\r\n\r\n";

UdpSocket.SendTo(Encoding.UTF8.GetBytes(SearchString), SocketFlags.None, MulticastEndPoint);

Console.WriteLine("M-Search sent...\r\n");

byte[] ReceiveBuffer = new byte[64000];

int ReceivedBytes = 0;

while (true)
{
    if (UdpSocket.Available > 0)
    {
        ReceivedBytes = UdpSocket.Receive(ReceiveBuffer, …
Run Code Online (Sandbox Code Playgroud)

c# windows upnp ssdp

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

Javascript中的神经网络无法正常学习

我试图重写这里发现的神经网络到javascript.我的javascript代码看起来像这样.

function NeuralFactor(weight) {
    var self = this;
    this.weight = weight;
    this.delta =  0;
}

function Sigmoid(value) {
    return 1 / (1 + Math.exp(-value));
}

function Neuron(isInput) {
    var self = this;
    this.pulse = function() {
        self.output = 0;
        self.input.forEach(function(item) {
            self.output += item.signal.output * item.factor.weight;
        });

        self.output += self.bias.weight;
        self.output = Sigmoid(self.output);
    };

    this.bias = new NeuralFactor(isInput ? 0 : Math.random());
    this.error = 0;
    this.input = [];
    this.output = 0;

    this.findInput = function(signal) {
        var input = …
Run Code Online (Sandbox Code Playgroud)

javascript artificial-intelligence backpropagation neural-network

13
推荐指数
1
解决办法
729
查看次数