Jump to page: 1 2
Thread overview
Gizli D-Programlama Dili Takipçilerine Davet Üzerine
Feb 14, 2022
Salih Dincer
Feb 14, 2022
Ali Çehreli
Feb 15, 2022
Ali Çehreli
Feb 15, 2022
Salih Dincer
Feb 15, 2022
Ali Çehreli
Feb 22, 2022
Ali Çehreli
Feb 15, 2022
Salih Dincer
Feb 15, 2022
Ali Çehreli
February 11, 2022

Merhaba ben İsmail Emre. Dün Ali ÇEHRELİ hocammızın kitabını bastırmasıyla alakalı olarak forumdaki duyuru başlığı altında biraz yazıştık. Foruma önceden kayıt olmayan ama benim gibi forumu takip edenler için davet geldi. Ali hocamız şöyle yazmıştı:
" Saat mi uygun değil? "
Aslında sohbetlerinizin saatinden çok d-programlama dilinde hiç bilgim olmadığı için ve bilgisayarla ilgili bir bölüm okumadığımdan sizlerle sohbete katılırsam konuları çok anlayamam diye düşündüğümden dolayı katılmıyordum. Kendim elektronik teknikeriyim ama iş bulamadığım için ve mikrodenetleyicileri programlamayı öğrenmek için C programlamayı öğreniyordum. Kaynak olarak Gökhan DÖKMETAŞ 'ın Temel C Programlama kitabından takip ediyordum. Yazarı kitabı ticaret harici halka açık yayınladığı için iki yıl önce bir fotokopicide plastik spiralli fotokopisini bastırdım. Geçen sene askerdeydim. Askerden dönünce iş bulamayacağımı düşünüp kendime göre tabii ki başarılı olduğum Bolu'daki fizik bölümünü(%100 İngilizce) bıraktım. . Bilgisayara, matematiğe ve fiziğe hala biraz ilgim olduğu için yine de öğrenmeye devam ediyorum. Hala iş arıyorum. Galiba bulabileceğim işler bunların hiç biriyle ilgili olmayacak ama yine de sizin forumunuzu takip ediyorum. Özellikle Salih DİNÇER hocanın sürekli öğrenmesi ve hata yapsa da bir sürü konu başlığına bana eğlenceli ( emekli olan ... gibi) konu başlıkları açması bu forumda herkesin birbirine saygılı olması ve kendinizi geliştirmek için sürekli girişimlerde bulunmanız üzerine bu forumu bir hobi gibi takip ediyorum. Bilgisayarımda da sadece Pardus kurulu. Onların topluluğuna da önceki aylarda bir kaç defa yardım edecek, tercüme gibi girişimlerde bulundum. C, Java ve Python hatta Mathematica gibi bir takım diğer dillerle de kısa süreli ilgim oldu. Fakat onları da yarım bıraktım. Şu anda bilgisayarımda dmd kurulu değil ama kurabilirim.

February 14, 2022

On Friday, 11 February 2022 at 08:11:21 UTC, İsmail Emre ARIKAN wrote:

>

Merhaba ben İsmail Emre. Dün Ali ÇEHRELİ hocammızın kitabını bastırmasıyla alakalı olarak forumdaki duyuru başlığı altında biraz yazıştık. Foruma önceden kayıt olmayan ama benim gibi forumu takip edenler için davet geldi.

Aramıza hoş geldin ve niye bu kadar geç kaldın 😀

Yani sözüm sana değil aslında, üye olmayıp senin yaptığın girişime niyet etmeyenlere. Halbu ki D dünyasına bir girseniz hem kolunuza programlama bileziğini (Ali hoca ve D Kitabı sayesinde) takmış, hem de meslek olarak sürdürmeseniz bile nöronlar arasında harika bağlar kurdurcak bir beyniniz, yeni bir hobi veya sen olacak! Tebrikler İsmail...

On Friday, 11 February 2022 at 08:11:21 UTC, İsmail Emre ARIKAN wrote:

>

... konuları çok anlayamam diye düşündüğümden dolayı katılmıyordum. Kendim elektronik teknikeriyim ama iş bulamadığım için ve mikrodenetleyicileri programlamayı öğrenmek için C programlamayı öğreniyordum. Kaynak olarak Gökhan DÖKMETAŞ 'ın Temel C Programlama kitabından takip ediyordum. Yazarı kitabı ticaret harici halka açık yayınladığı için iki yıl önce bir fotokopicide plastik spiralli fotokopisini bastırdım.

Ben de elektronik teknikeriyim ve Gökhan'ı tanırım; harika işler başarıyor. En son sertifikalar almış ve yetkinliğini bir üst seviyeye çıkarmıştı. Ben daha çok hobi amaçlı bu programlama işini yapıyorum. Bir gün bir yazılımevi kurana kadar da böyle kalacak.

Senin açından (ve tabi bizim!) avantajlısın. Kimse bit nedir, mikrodenetleyici nasıl programlanır bilmiyor ve programlamaya damdan düşer gibi giriyor. Neticede bazı şeyler yarım kalıyor. Tabi onlar da haklı çünkü vakti iyi değerlendirmek istiyor. Alt düzey (sanırım yabancılar native diyor) programlama vakit alabiliyor. Framework dedikleri çerçeveleyen (Node/JS) gibi pratik sonuçlar üreten platformlar her zaman daha ilginç görünüyor. Mesela Node'un Matter'i: https://brm.io/matter-js/demo/#mixed

Ama emin ol, D bunların hepsini silip süpürür hatta iddia ediyorum (Vibe-D ve gelecek projeler ile) süpürcek! Çünkü client-side dedikleri taraf bir yerde patlamaya mahkum. Bulut teknolojileri hala çok erken evresinde. Metaverse bazı tabuları yıkabilir. Yine de CPP, Java ve JS mutlaka öğren. Birçok şeyin temeli ECMA Script nedir diye araştır. Bizim D de ECMA uyumludur, JS de. Bu dünyaya girdikçe hayranlığın kat ve kat artacak. Sonra Pardus da neymiş diyeceksin. Debian ile birlikte KDE Plasma'yı dene. Pardus için yapcak çok işimiz var 😀

On Friday, 11 February 2022 at 08:11:21 UTC, İsmail Emre ARIKAN wrote:

>

Bilgisayara, matematiğe ve fiziğe hala biraz ilgim olduğu için yine de öğrenmeye devam ediyorum. Hala iş arıyorum. Galiba bulabileceğim işler bunların hiç biriyle ilgili olmayacak ama yine de sizin forumunuzu takip ediyorum. Özellikle Salih DİNÇER hocanın sürekli öğrenmesi ve hata yapsa da bir sürü konu başlığına bana eğlenceli ( emekli olan ... gibi) konu başlıkları açması bu forumda herkesin birbirine saygılı olması ve kendinizi geliştirmek için sürekli girişimlerde bulunmanız üzerine bu forumu bir hobi gibi takip ediyorum.

Fiziğe ve özellikle de matematiğe ilgi duyman güzel. Zaten her şeyin temeli Matematik ve yaşadığımız somut dünya Fizik ile de bağı kuran Elektronik. Matematikçiler şimdi kızacak... 😀

Bence her şeyin temeli elektronik. Çünkü atomların son yörüngesindeki o elektronları kontrol etme bilimi olmasaydı ne bir matematik teoremini geliştirirdik ne de 2 ile 2'yi toplayabilirdik. Dikkat, nöronlar arasında her ne kadar kimyasal bağ olsa da temelde beyninizin merkezinden ayak ucunuza kadar katman katman elektronlar transfer olmakta. Yani bu elektro-kimyasal bağ bizi hayata bağlamakta. Neyse çok uzattım. Birazdan kod konuşcaz!

On Friday, 11 February 2022 at 08:11:21 UTC, İsmail Emre ARIKAN wrote:

>

Bilgisayarımda da sadece Pardus kurulu. Onların topluluğuna da önceki aylarda bir kaç defa yardım edecek, tercüme gibi girişimlerde bulundum. C, Java ve Python hatta Mathematica gibi bir takım diğer dillerle de kısa süreli ilgim oldu. Fakat onları da yarım bıraktım. Şu anda bilgisayarımda dmd kurulu değil ama kurabilirim.
Kurmak için install.sh scriptini ve temel oluşturacak şu adımları uygula lütfen:

  • sudo apt install curl htop wget
  • sudo apt-get install build-essential procps file git flatpak
  • sudo apt-get install libgtkd-3-dev

*Ara Not: Bu komutlar her linux dağıtımında olmayan APT (Advanced Package Tool) ile kuruluyor ve en temelde hepsine ihtiyacın yok. Örneğin flatpak çok gereksiz kalabilir (bence bu plaftormu araştır, gelecek burda!) ama git lazım. Ayrıca GCC için build-essential de lazım olacakken D'de grafik programlama yapmayacaksan 3. satırdaki GTK-d kütüphanesine ihtiyacın olmayacak. İlk satırdak curl, wget kesin lazım olacak (belki de bunlar sisteminde yüklüdür?) ama htop (arkaplanda ne bitiyor, hangi uygulama ne tür sistem kaynağı yiyor) çok şart değil çünkü alternatifler var.

Başka D derleyicisi kurma olanağı olsa da bu script güvenli bir şekilde sistemine D kurmanı (hatta kaldırma da var!) sağlayacaktır. Bütün bunlardan sonra sistem kodları daha hızlı derleyen LDC'yi unutmamak lazım. Repository'i güncellemek de lazım olabilir:

  • sudo apt-get update
  • sudo apt-get install ldc

Son olarak şu kodu bir dene ve ne düşünüyorsun söyle. Bölüm bölüm işleyeceğiz. Sanırım daha çok tümden gelim olacak ama Dlang.org'un ana sayfadında daha güzel örnekler var...

// D 2.0.83

import std.random, std.stdio;

void main()
{ // 1. bölüm: Kurulum aşaması
  int[] array;
  char[] buffer;
  ubyte len = 8;

  while(len--)
  { // 2. bölüm: Döngü içi
    char c = uniform('A', 'Z');
    array ~= cast(int)c;
    buffer ~= c;
  }
  assert(buffer.length == 8);

  // 3. bölüm: Ters sıralama
  import std.range;// : retro;
  buffer.retro.writeln(" != ", buffer);

  // 4. bölüm: Büyükten küçüğe sıralama
  import std.algorithm : sort;
  import std.string : representation;

  array.sort(); // bu küçükten büyüğe çünkü,
  // varsayılan sıralama: a < b

  // Burda UTF desteği bulunmayan narrowString var
  sort!("a > b")(buffer.representation);
  writeln(buffer);

  assert(array[$-1] == buffer[0]); // işte kanıtı
  // EVET KAFA KARIŞTIRICI:)

  // 5. bölüm: Dizilerde Dilimleme:
  buffer[0..3].writeln;
  // buffer'ın ilk üç harfini gösterdi ama burada çok olay var o yüzden çok uzatmadan kısa kesiyorum!
}
February 13, 2022
On 2/13/22 16:09, Salih Dincer wrote:

> Alt düzey (sanırım
> yabancılar native diyor) programlama vakit alabiliyor.

Aslında "native", doğrudan mikroişlemci üzerinde işleyen demek. D'de ve çoğu başka dilde öyle. Onun karşıtı, C# ve Java'da olduğu gibi, kodun bir sanal makine üzerinde işlemesidir.

>      char c = uniform('A', 'Z');

'Z'yi sevmiyor musun? ;) Sen de biliyorsun ama şöyle daha uygun herhalde:

  char c = uniform!"[]"('A', 'Z');

Ali

February 14, 2022

On Monday, 14 February 2022 at 00:09:42 UTC, Salih Dincer wrote:

>

Bu dünyaya girdikçe hayranlığın kat ve kat artacak. Sonra Pardus da neymiş diyeceksin. Debian ile birlikte KDE Plasma'yı dene. Pardus için yapcak çok işimiz var 😀

Açıkçası Pardus benim için daha iyi. Doğrudan TÜBİTAK 'tan çalışanlar ve gönüllüler sorunlarımı çözebiliyorlar. Türkçe yardım almak benim Pardus sistinme olan güvenimi arttırıyor.

>

Kurmak için install.sh scriptini ve temel oluşturacak şu adımları uygula lütfen:

  • sudo apt install curl htop wget
  • sudo apt-get install build-essential procps file git flatpak
  • sudo apt-get install libgtkd-3-dev
>

Yukardakilerden dmd kurulduğu gösterildiği halde komut satırında " dmd --version " yazdığımda dmd 'nin bulunamadığını yazdı. Ben de digital mars 'tan dmd 'nin .deb uzantılısını kurdum. Bendeki sürüm : DMD64 D Compiler v2.098.1 oldu.
ldc 'yi ve gtk 'yı kurmadım. Öğrenme aşamasında olduğum için onları bilgisayarıma kurmama gerek olmadığını düşünüyorum.

>

Son olarak şu kodu bir dene ve ne düşünüyorsun söyle. Bölüm bölüm işleyeceğiz. Sanırım daha çok tümden gelim olacak ama Dlang.org'un ana sayfadında daha güzel örnekler var...

// D 2.0.83

import std.random, std.stdio;

void main()
{ // 1. bölüm: Kurulum aşaması
  int[] array;
  char[] buffer;
  ubyte len = 8;

  while(len--)
  { // 2. bölüm: Döngü içi
    char c = uniform('A', 'Z');
    array ~= cast(int)c;
    buffer ~= c;
  }
  assert(buffer.length == 8);

  // 3. bölüm: Ters sıralama
  import std.range;// : retro;
  buffer.retro.writeln(" != ", buffer);

  // 4. bölüm: Büyükten küçüğe sıralama
  import std.algorithm : sort;
  import std.string : representation;

  array.sort(); // bu küçükten büyüğe çünkü,
  // varsayılan sıralama: a < b

  // Burda UTF desteği bulunmayan narrowString var
  sort!("a > b")(buffer.representation);
  writeln(buffer);

  assert(array[$-1] == buffer[0]); // işte kanıtı
  // EVET KAFA KARIŞTIRICI:)

  // 5. bölüm: Dizilerde Dilimleme:
  buffer[0..3].writeln;
  // buffer'ın ilk üç harfini gösterdi ama burada çok olay var o yüzden çok uzatmadan kısa kesiyorum!
}

Verdiğiniz koda ek olarak Ali hocanın eklemesi sonucu çıktısı :

DXYXWQRG != GRQWXYXD
YXXWRQGD
YXX

Benim yorumum :
Verilen çıktıya göre tahminimce 8 karakter uzunluğunda rastgele harf seçiyor. Sonra da bunları ABCD - BACD gibi her iki harf grubu arasında simetriğini gösteriyor. Alt sırada ise bu işleme girmeden önce rastgele seçilen harfler var. En alt satırda ise bunun ilk üç harfini seçiyor. Evet, bu dil çok gelişmiş bir bilgisayar dili ancak yazılanları çok anlamıyorum. Biraz anladığım, şu kütüphanedeki şu üniteyi kullanacağım diye detaylı kütüphane dosyalarını ekleyebiliyoruz. Ayrıca Ali hocanın verdiği düzeltmeden sonraki hali ile sizin öneriniz arasında çıktıya göre bir fark yok. Ben dmd ile derlemek yerine doğrudan Geany Geliştirme Ortamı ile çalıştırdım.

February 15, 2022

İlk olarak, Salih hocam size teşekkür etmeyi unuttuğumu mesajımı tekrar okuyunca anladım. Bu vesileyle bana olan yardımlarınız için size teşekkür ederim.
Ali hocam, kitabınızın 8. sayfasında D 'nin Temel Veri Türleri isimli başlıkta geçen " ifloat, idouble, ireal, cfloat, cdouble " türleri, çıktıma göre konuşuyorum, emekli olmuşlar (deprecated). Derleyici stdComlex kütüphanesinin modüllerini kullanmamı tavsiye etti. Belki bunu göstermek için kitabınızda hala bu örnekleri tutuyorsunuzdur. Ayrıca char 'lı tiplerden char haricideki türler en az ve en çok örneğiniz için 16 'lık sayı verirken; char tipi en az ve en çok örneğinde hiç bir çıktı vermedi. Örnek olarak wchar için en az değerinin çıktısı yok:

>

import std.stdio;

void main() {
writeln("Tür : ", wchar.stringof);
writeln("Bayt olarak boyutu : ", wchar.sizeof);
writeln("En az : ", wchar.min);
writeln("En çok : ", wchar.max);
}

Çıktısı ise :

>

Tür : wchar
Bayt olarak boyutu : 2
En az : En çok : ￿ (Kutunun içinde FFFF yazıyor.)

char tipi için ise sadece türü ve boyutu var.

February 15, 2022
On 2/15/22 00:51, İsmail Emre ARIKAN wrote:

> " ifloat, idouble, ireal, cfloat, cdouble " türleri,
> çıktıma göre konuşuyorum, emekli olmuşlar (deprecated).

Teşekkür. Tesadüf, daha dün başka birisi de aynısını söyledi. Düzelteceğim.

> char tipi en az ve en çok örneğinde hiç bir çıktı
> vermedi.

Karakterler metin ile ilgili olduklarından en az ve en çok değerlerinin görünür biçimleri yoksa biz de göremiyoruz.

Ali

February 15, 2022
  Hocam çok sağolun. Öğrendikçe sorularım artamaya başlıyor. Hepsini bir yere yazarsam sonra buraya göndermeye belki üşenebilirim diye sorularımı hemen yazıyorum.

  Benim sorum .init niteliği ile alakalı olacak.
 int türüne .init niteliği yazılınca int 'in ilk değeri olan sıfırı görmeyi bekleyerek kitabınızın sayfa 11 'de 5.3 Problem 'de istediklerinizi şöyle yapmaya çalıştım:

>import std.stdio;
>
>void main( ) {
>	                   int a, b, c;
>
>	                   a = int.init;  /* a 'ya 0 verdim.*/
>
>	                   c = a; /* c = 0*/
>	                   a = b;  /* b 'ye değer vermediğimden otomatik olarak
>                                     b = 0 değerini alacak. */
>	                   b = c;  /* Burada benim verdiğim 0 'ı alacak.*/
>	                   writeln(" a = , b = , c =" , a, b, c);
>	                   writeln();
>	}

  Çıktısı:
> a = , b = , c =000
oluyor. Yani D 'nin tip güvenliği ile alakası olduğunu düşünüyorum. Ama a ve b neden 0 almıyorlar ve c 'nin hassasiyeti neden üç haneli olarak görünüyor? Bunu açıklayabilir misiniz?
February 15, 2022

On Tuesday, 15 February 2022 at 11:44:33 UTC, İsmail Emre ARIKAN wrote:

>

oluyor. Yani D 'nin tip güvenliği ile alakası olduğunu düşünüyorum. Ama a ve b neden 0 almıyorlar ve c 'nin hassasiyeti neden üç haneli olarak görünüyor? Bunu açıklayabilir misiniz?

Cevabı aslında çok basit:

Biz c'nin değeri olarak aslında 3 değeri yan yana görmekteyiz. Eğer writefln kullanırsan daha iyi olacak. Hatta init yerine 1 kullan daha belirgin bir sonuç olur. Çünkü zaten 3 değişken de ilk çalıştığında hepsi init olur.

import std.stdio;

void main( ) {
	int a, b, c;

	a = int.init;// a 'ya 0 verdim.

	c = a;       // c = 0
	a = b;       // b 'ye değer vermediğimden otomatik olarak
				 //   b = 0 değerini alacak.
	b = c;       // Burada benim verdiğim 0 'ı alacak.
	writefln(" a = %d, b = %d, c = %d" , a, b, c);
	writeln();
}
February 15, 2022

On Monday, 14 February 2022 at 13:34:08 UTC, İsmail Emre ARIKAN wrote:

>

Yukardakilerden dmd kurulduğu gösterildiği halde komut satırında " dmd --version " yazdığımda dmd 'nin bulunamadığını yazdı. Ben de digital mars 'tan dmd 'nin .deb uzantılısını kurdum. Bendeki sürüm : DMD64 D Compiler v2.098.1 oldu.
ldc 'yi ve gtk 'yı kurmadım. Öğrenme aşamasında olduğum için onları bilgisayarıma kurmama gerek olmadığını düşünüyorum.

Sanırım kurulum bitince orada yazan uyarıda PATH'e eklemek gerektiği falan yazıyor ve şu komutlar öneriliyor:

  • source ~/dub-1.22.0/activate
  • source ~/dmd-2.098.1//activate

Sende dosyaları bulunduğu yer farklı yerde bulunabilir. Yukardaki komutlar çalışmayacaktır. Ama neticede .deb paketi ile kurmuşsan sorun yok demektir. Ama GCC ve LDC gibi şeyleri de sisteminde kurmanda fayda görüyorum. DUB ise şart değil belki sonra.

On Monday, 14 February 2022 at 13:34:08 UTC, İsmail Emre ARIKAN wrote:

>

iki harf grubu arasında simetriğini gösteriyor. Alt sırada ise bu işleme girmeden
önce rastgele seçilen harfler var. En alt satırda ise bunun ilk üç harfini seçiyor.

Aslında ekran çıktısının ilk satırındaki amacım simetriyi göstermek değildi, çünkü oradan şunu kullandım: != Anlamıyla ilintili olarak her iki sonuç birbirine eşit değil. Yani retro'nun görevi aralığı (elde ettiğimiz veriyi) ters çevirmek. Hepsi o ama asıl olay devamında başlıyor...

Öncelikle biz burada sort()'u narrowString elemanları içeren bir dizi üzerinde kullanmak istedik. Ama char karakterleri UTF'i desteklemediği için hataya neden oluyor. O yüzden sadece ASCII tablosundaki değerlerini döndürüp sıralayan bir olanağı (representation) kullandık. Ancak aynı sorun array'de olmadı çünkü o bir int[]. Ayrıca sıralamın bu dizileri doğrudan etkilediğini vurgulamak isterim. Zaten bu kodda açıkca beli oluyor. Yani veriyi alıp sıralı olarak vermiyor. Verinin kaynağını doğrudan sıralıyor.

Devamında da ters sıralananın (buffer) ilk elemanı ile düz sıralananın (array) son elemanının birbirine eşit değerler olduğunu iddia ettik. Program hatasız çalıştıysa (assert'in görevi budur) iddiamız doğru demektir.

Daha sonra dilim olayları var ama henüz oraya girmeyelim. Sadece dilimlerde $ işareti bize o dizin içerdiği eleman sayısını verdiğini bilmenin önemli olduğunu belirtmek yeterli. Eleman sayısında 1 çıkardığımızda da dizinin son elemanının indeksini elde etmiş oluyoruz. Malum elektronik ve bilgisayar dünyasında ilk demek 0'dır. Neredeyse her şey 0'dan başlar. O yüzden A'dan Z'ye derken Z'yi katmamasının sebebi bu. Düzeltme için Ali hocama teşekkürler.

On Monday, 14 February 2022 at 13:34:08 UTC, İsmail Emre ARIKAN wrote:

>

Evet, bu dil çok gelişmiş bir bilgisayar dili ancak yazılanları çok
anlamıyorum. Ayrıca Ali hocanın verdiği düzeltmeden sonraki hali ile sizin
öneriniz arasında çıktıya göre bir fark yok. Ben dmd ile derlemek yerine
doğrudan Geany Geliştirme Ortamı ile çalıştırdım.

Ben de Geany kullanıyorum. Z'yi de katmak için "[]" kullandığımız zaman bunu görmek için başka bir döngüye daha sokmak gerekiyor. Çünkü ne zaman Z geleceği kesin olarak bilinemez.

import std.random;

void main() {
	char[] buffer;

	ubyte len = 255;
	while(len--)
	{
		buffer ~= uniform!"[]"('A', 'Z');
	}

	len = 0;
	foreach(c; buffer)
	{
 		if(c == 'Z') len++;
 	}
 	assert(len > 0);
}
February 15, 2022
On 2/15/22 03:44, İsmail Emre ARIKAN wrote:

> sorularımı hemen yazıyorum.

Harika! Forumu canlandırdın. :)

Ama, artık bu konunun dışına taşmış olabilir miyiz? Her soru için farklı bir konu aç lütfen. Sonra bir daha nereden bulacağız bu konuları? :)

Ali

« First   ‹ Prev
1 2