October 30, 2012

Ali bey ve Salih bey gerçekten çok teşekkür ediyorum.
Söylediklerinizi uygulamaya başladım.

Kolay gelsin iyi çalışmalar dilerim.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 30, 2012

Gerçekten çok hoş, bakar mısınız; bir e-posta adresi veri olarak giriyor ortaya adeta adres defteri yapısı çıkıyor!
Alıntı:

>

mixin(grammar("
Email <- Name '@' Domain
Name <- QualifiedIdentifier
Domain <- QualifiedIdentifier
"));

auto p = Email.parse("john.doe@example.org");

writeln(p);

Çıktısı:'
Email: ["john.doe", "example.org"]
Name: ["john.doe"]
Domain: ["example.org"]
'

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 30, 2012

Ancak ben, birlikte çıkardığımız şu interface'li yapıya birazcık taktım...:)

Bilmiyorum, D'de aşağıdaki gibi başka bir benzer yapı meydana getirilebilir miydi? Açıkçası benim gördüğüm; test() isminde bir işleve birden fazla parametre (T[] ... olayı) harika bir şekilde giriyor. Üstelik farklı üç (string, char, int) türde. Sizce bu ilgin değil mi!

Belki de çok esprisi yoktur ama JSON ile birlikte veri taşımak için (container) biçimliş kafta olduğunu düşünyorum...

 import std.stdio, std.string;

 alias Köprü[] topluluk;
 void test (in topluluk[] Param ...)
 {
   foreach(p; Param)
   {
     p.writeln;
   }
 }

void main ()
{
 topluluk A, B, C; // Eşkenar Üçgen
 {
   A ~= new Değer!string("Eşkenar Üçgen"); // Nesne İsmi
   A ~= new Değer!char('A');               // Nokta Kimliği
   A ~= new Dizi!int([200, 50]);           // X ve Y Noktası

   B ~= new Değer!string("Eşkenar Üçgen"); // Nesne İsmi
   B ~= new Değer!char('B');               // Nokta Kimliği
   B ~= new Dizi!int([50, 350]);           // X ve Y Noktası

   C ~= new Değer!string("Eşkenar Üçgen"); // Nesne İsmi
   C ~= new Değer!char('C');               // Nokta Kimliği
   C ~= new Dizi!int([350, 350]);          // X ve Y Noktası
 }
 test(A, B, C);
}

Çıktısı:'
[Eşkenar Üçgen, A, [200,50]]
[Eşkenar Üçgen, B, [50,350]]
[Eşkenar Üçgen, C, [350,350]]'

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 30, 2012

Tamam, tekrar düşündüm de ...

struct Point {
 string name;
 char id;
 int[] points
} Point A, B, C;

.. yapısıyla pekala bir özelleştirilmiş tür tanımlayabiliyoruz. Ancak önemli bir fark var!

Biz sadece iki sınıf ile, D'deki herhangi bir, iki üç ... türü alıp hızlı ve basit bir şekilde bir yapı (taşıyıcı, topluluk) yapabiliyoruz. Bu ilginç değil mi? Yani çok güzel bir şeymiş...:)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 30, 2012

Alıntı (acehreli):

>

Ek olarak, D'nin derleme zamanı olanakları çok üstün olduğundan, tam da o veri dosyasını taramayı bilen bir tür derleme zamanında bile oluşturulabilir. O zaman bir DSL (domain specific language) uygulamış olunur.

Onun örneğini hatırladım:

https://github.com/PhilippeSigaud/Pegged

O sayfada biraz aşağıdaki Usage başlığındaki örneğe bakın. Verilen gramer dizgisini derleme zamanında tarayan ve tam da o grameri bilen bir nesne oluşturan bir çözüm. Olağanüstü. :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 30, 2012

Çok yararlı olduğu konusunda haklısın. Ancak, bütün bu türler senin örneğinde toString() ile birleşmiş durumdalar.

Bir Köprü[] dizisini işlemek için bir işlev yazdığın zaman çektiğin elemanların asıl türlerinin ne oldukları açık olmayabilir:

void foo(Köprü[] veri)
{
   // Elemanların türleri ne?
}

Aşılmaz bir sorun diye söylemiyorum ama eğer Köprü arayüzünde toString()'den başka işlevler olamıyorsa kullanışlılık düşmüş oluyor.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 31, 2012

Variant işimi gördü ama

import std.stdio;
import std.variant;
import std.datetime;

void on()
{
	auto var = Variant(5);
	int i = var.get!int;
}

void off()
{
	auto var = 5;
	int i = var;
}

void main()
{
	writeln(benchmark!(on, off)(100000));
	while (1){}
}

teste tabi tuttuğumda oldukça yavaş çıktı bir iki işlem yaptıkça da bu süre giderek uzuyor. Variant gibi başka bir kullanım ne önerirsiniz?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 31, 2012

String ile veya herhangi bir veri türü ile karşılaştırıyorum

tip olarak string olarak belirtip benchmark testine tabi tuttuğumda 100 ms Variant olarak belirttiğimde ise 1200ms sürüyor. Bu yavaşlıktan bahsediyorum aslında.


struct Foo
{

	int opApply(int delegate(string) dg){
		int result;
		int i;
		while(i<10000)
		{
			i++;
			result = dg("asdqewqeqwe");
			if(result)
				break;
		}
		return result;
	}
}
Foo foo;

void x(){
	foreach(item; foo){
	}
}

void main()
{
	writeln(benchmark!(x)(1));
	while (1){
	}
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 31, 2012

Ve ayrıca çok şaşırtıcı ama dizi toplama işlemleri oldukça uzun sürüyor

x ~= item;

dediğimde süre 2500 çıkarken x ~= item; satırını silersem süre 200 çıkıyor.

Bu işlemi daha hızlı yapmanın bir yolu var mı?

Kusura bakmayın bu arada yapacağımız dilin gerçekten performanslı birşey olmasını istiyoruz. Bu yüzden bu kadar inceliyorum. her satırında <!print("asdqwewq")!> yazan 2600 satır, 60kb lık bir dosyayı parse etmeyi başlattığımda diziye sürekli değer attığım için oldukça uzun sürüyor.

Bu süre kısa olması lazım bunun için uğraşıyorum :/

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 31, 2012

Ve ayrıca

import std.datetime, std.stdio, std.variant;

auto fib(Int)()
{
	Int a = 1, b = 1;
	for(size_t i=0; i<100; i++){
		Int c = a + b;
		a = b;
		b = c;
	}
	return a;
}

void main()
{
	writeln(benchmark!(fib!int, fib!long, fib!Variant)(10_000));
}

kodunu denediğimiz de ise sonuç gerçekten içler acısı

[TickDuration(197), TickDuration(276), TickDuration(93370107)]

Acaba veri depolamak için daha iyi bir yol var mı?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]