소개
개발자로서 나는 수학적 코드를 많이 작성하고 있으며 코드 작성 및 검토를 쉽게하기 위해 C# 언어에 구문당을 거의 추가하고 싶지 않습니다.C# 언어 확장, 얼마나 많은 노력/이득?
나는 가능한 해결책에 대해 이미 thread과 그 외 one에 대해 읽었으며 다음의 세 가지 구문 문제 *를 해결하기 위해 어느 방향으로 나아갈 것인지 알기를 원할뿐입니다.
* : 설명 된 설탕없이 생존 할 수 있지만 너무 복잡하지 않고 간단한 컴파일 과정을 위해 Rube-Goldberg 디자인을 사용하면 더 자세히 조사 할 수 있습니다. 내가 좋아하는 것
가 작성하는
1. 다중 출력 인수
:[double x, int i] = foo(z);
대신 :
double x;
int i;
foo(out x, out i, z);
NB : out
매개 변수를 먼저 배치되고 및 foo
은 평소와 같이 선언되고 (또는 같은 종류의 구문을 사용). 내가 좋아하는 것
2. 추가 사업자
는 몇 가지 새로운 단항/이항 연산자를합니다. 이들에 대한 정의 (그리고 소스를 구문 분석 할 때 모호성을 도입하지 않는 매우 복잡한 것 같다)하는 방법을 많이 몰라, 어쨌든하고 싶은 뭔가 같은 :
namespace Foo
{
using binary operator "\" as "MyMath.LeftDivide";
using unary operator "'" as "MyMath.ConjugateTranspose";
public class Test
{
public void Example()
{
var y = x';
var z = x \ y;
}
}
}
대신 :
namespace Foo
{
public class Test
{
public void Example()
{
var y = MyMath.ConjugateTranspose(x);
var z = MyMath.LeftDivide(x, y);
}
}
}
3. 자동 이름 정적 클래스
그것은 끝없이 직접 쓰는 대신 계산 코드에서 사방) 수학 .BlaBlaBla를 (반복 매우 호소력이의에 대한 삽입 및 단순히 BL aBlaBla.
로컬 클래스를 추가하여 계산 클래스 내에 수학 .BlaBlaBla를 추가하면 확실히 해결할 수 있습니다. 어쨌든 모호성이 없을 때 또는 모호성이 어떤 종류의 implicit
키워드로 해결 될 때 필요하면 자동으로 클래스 이름을 삽입하는 것이 좋습니다. 예를 들어
:
using System;
using implicit MySystem; // Definying for 'MyMaths.Math.Bessel'
public class Example
{
public Foo()
{
var y = 3.0 * Cos(12.0);
var z = 3.0 * Bessel(42);
}
// Local definition of 'Bessel' function again
public static double Bessel(double x)
{
...
}
}
이 될 것입니다 :
using System;
using MySystem; // Definying for 'Math.Bessel'
public class Example
{
public Foo()
{
var y = 3.0 * System.Math.Cos(12.0); // No ambiguity at all
var z = 3.0 * MySystem.Math.Bessel(42); // Solved from `implicit` keyword
}
// Local definition of 'Bessel' function again
public static double Bessel(double x)
{
...
}
}
* 컴파일러는 단순히 implicit
솔루션이 정의되어 있기 때문에 모호성을 해결 있음을 나타내는 경고를 생성 할 수 있습니다.
NB : 3)은 2)를 만족시키기에 충분하다.
Miguel de Icaza는 C#에서도 튜플을 원했습니다. http://tirania.org/blog/archive/2009/Dec-23.html –
Effot == 제비와 제비. 게인 == 거의 제로. 당신이 추구하는 프로그래밍 프로젝트에서 독창적 인 프로그래머가되고 싶지 않다면 이것은 끔찍한 생각입니다. (당신은 툴링 지원 (즉, Resharper)을 전멸 시키면 자격을 갖춘 C# 프로그래머가 갑자기 자신이 좋아하는 언어를 사용할 자격이 없게 될 것이고 아무도 들어올 수없고 코드를 읽을 수없고 리팩터링도 할 수 없으며리스트는 끝이 없다.) –
"정적 클래스에 대한 자동 이름 삽입"- Java에서 지원되는 클래스 한정자없이 정적 함수 사용. 나는 그것이 좋은/나쁜 일이라고 정확하게 말하지는 않는다. http://www.deitel.com/articles/java_tutorials/20060211/index.html –