标签: boo

var关键字有什么意义?

变种关键字摒弃了需要一个明确的类型声明,我有兴趣地阅读SO讨论时,它可能是适当的.

我还读过(但未使用过)Boo,它似乎通过使声明局部变量可选而更进一步.使用Boo,可以隐含类型和声明.

这让我想知道,为什么C#语言设计师根本不想包含一个var关键字?

更新:是的,var支持匿名类型,但匿名类型本身不需要var关键字...

var anon = new { Name = "Terry", Age = 34 };
Run Code Online (Sandbox Code Playgroud)

anon = new { Name = "Terry", Age = 34 };
Run Code Online (Sandbox Code Playgroud)

c# variables boo

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

Boo vs. IronPython

在看了这两个项目之后,似乎两者都很相似.两者都运行在CLI之上,两者都具有python样式语法,都使用.NET而不是标准的python库.

那么,它们之间的区别和各自的优势是什么?

ironpython boo

26
推荐指数
4
解决办法
6249
查看次数

用于生成编程的非C++语言?

C++可能是静态元编程最流行的语言,Java不支持它.

除了C++之外还有其他语言支持生成编程(创建程序的程序)吗?

lisp haskell boo metaprogramming clojure

24
推荐指数
7
解决办法
3600
查看次数

是否存在Boo编程语言的非CLI实现(尤其是JVM)?

Boo看起来像一种有趣的语言,但似乎只针对公共语言基础结构(CLI),AKA .NET实现 - 至少,我还没有找到任何其他实现,我特别喜欢JVM ,如果它存在.所以,我想我会仔细检查Stack Overflow - 是否有任何非CLI的Boo实现?

boo jvm

17
推荐指数
1
解决办法
1936
查看次数

BOO对IronPython

IronPythonBOO有什么区别?是否需要2种类似Python的语言?

python clr ironpython boo

16
推荐指数
2
解决办法
2582
查看次数

Windows Phone 7(WP7)支持哪种编程语言?

我记得,WP7支持C#,但不支持任何.Net动态语言(Ruby或Python).是否支持除C#之外的任何其他编程语言?可以使用Boo开发应用程序吗?

.net boo windows-phone-7

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

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

很长一段时间以来,我一直在尝试使用不同的语言来查找我想要的功能集,而我却找不到它.我的语言非常适合我的各种项目,但我想出了这些语言的交集,这使我能用一种语言完成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
查看次数

Boo有多稳定和成熟?

我看了一眼Boo,它看起来非常棒!我只是好奇它在这个阶段有多稳定?我的意思是,你会考虑在真实的生产代码中使用它吗?

boo

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

Boo能为你做什么?

试图获得一个侧面项目的爱好,让我从C#的9-5工作中获得动力并且正在考虑Boo.一些?

  • 你和Boo有什么经历?
  • 你用Boo或者做过什么样的应用程序/项目
  • 什么是Boo能够做到的?

猜猜是网络世界,想要掌握桌面应用程序等等.

boo

10
推荐指数
2
解决办法
1595
查看次数

是否可以将动态程序集保存到磁盘?

我最近买了Ayende的书,在Boo中构建DSLs(买它,读它,它真棒)但是我遇到了一个实现问题,我想看看生成的代码是什么样的.我通常会使用反射器来查看代码,但在这种情况下,程序集是动态的,只在内存中.有没有办法将动态程序集保存到磁盘,以便我可以反映它们?

编辑/我的答案:

哇,花了一段时间才回到这个.不幸的是,我从原来的问题中留下了一点重要的一点.

重要的一点:我正在使用Ayende的RhinoDSL库,正如他在书中所建议的那样.我可以访问我的DslEngine子类中的boo编译器,如下所示:

public class JobEngine : DslEngine
{
    protected override void CustomizeCompiler(Boo.Lang.Compiler.BooCompiler compiler, Boo.Lang.Compiler.CompilerPipeline pipeline, string[] urls)
    {
        pipeline.Insert(1, new ImplicitBaseClassCompilerStep(typeof (JobBase), "Prepare", "JobLanguage", "log4net", "Quartz"));
    }
}
Run Code Online (Sandbox Code Playgroud)

要改变最少并获得我想要的东西我需要添加一行...

public class JobEngine : DslEngine
{
    protected override void CustomizeCompiler(Boo.Lang.Compiler.BooCompiler compiler, Boo.Lang.Compiler.CompilerPipeline pipeline, string[] urls)
    {
        compiler.Parameters.GenerateInMemory = false; // <--- This one.
        pipeline.Insert(1, new ImplicitBaseClassCompilerStep(typeof (JobBase), "Prepare", "JobLanguage", "log4net", "Quartz"));
    }
}
Run Code Online (Sandbox Code Playgroud)

这导致编译器将程序集输出到我的〜\ LocalSettings\Temp目录,然后我可以反映它.重要的是要注意,进行该更改会导致程序的其余部分中断(RhinoDSL无法再在内存中找到程序集,因为我将它们输出到磁盘),因此这仅用作调试工具.

.net boo assemblies dynamic

10
推荐指数
1
解决办法
7123
查看次数