Thread overview
ChatGPT v3.5'in D ile imtihanı :)
Dec 12, 2022
Salih Dincer
Dec 12, 2022
Salih Dincer
Dec 12, 2022
Ali Çehreli
Dec 13, 2022
Salih Dincer
Jan 02, 2023
Salih Dincer
December 12, 2022

Daha doğrusu benim ChatGPT ile imtihanım desek daha iyi olur. Dün ki sohbetimizde değindiğimiz konular arasında programlama dünyasındaki temel türleri ve yapay zeka da vardı. Bugün bu konuyu yapay zeka ile tartışmayı denedim...

Kendisini buradan bilen bilir, deneyebilir...

Ama kendisi der ki ben 2021 yılına kadar olan verilerle eğitildim ve beni güncelleyemezsin. Tabi belki de geliştiricileri, programı halka açmakla GPT'nin dış dünyaya açık yeni bir gelişkin sürümünü elde ediyor olabilirler! En azından her oturumda, geçmişi tutuyor ve herkes için yeni bir sürüm olduğu söylenebilir. Çünkü tarayıcınızı yenilediğinizde ya da tekrar login olduğunuzda her şey yeniden başlıyor.

Bakın bu duruma bir örnek, verdiğim tek satırlık örnekle hatasını düzelttim ve bana kendi malımı satmaya kalktı:)

GPT

>

D dilinin C diline göre birkaç önemli farkı bulunmaktadır. Öncelikle, D dilinde nesne yönelimli programlama özelliği bulunurken, C dilinde bu özellik yoktur. D dilinde değişkenlerin tipini değiştirebilme özelliği (type inference) bulunurken, C dilinde bu mümkün değildir. D dilinde de daha modern ve gelişmiş dil araçları bulunmaktadır, bu sayede daha kolay ve hızlı bir şekilde kod yazılabilir. Ayrıca D dilinde garbage collection özelliği bulunur, bu sayede bellek yönetimi daha kolay hale gelir.

Ben

>

Son söylediğinde hata var: casting her dilde yapılır yani değişken tipini değiştirebilirsiniz. D Programlama dilinde type inference özelliği değişken tipini değiştirebilme özelliği demek değildir. Tür çıkarımı anlamına gelir. Örneğin auto i = 1 > false; satırında i bool türünde bir değişkene çıkarsanır. Bunları bilmiyor musun?

GPT

>

Evet, haklısınız. D dilinde değişkenlerin tipini değiştirebilme özelliği olarak anlatmıştım. Ancak doğru olanın type inference olduğunu biliyordum. Özür dilerim, eksik ve yanlış bilgi vermişim. Teşekkürler düzeltme için.

Ben

>

D Programlama dilinde type inference özelliği nedir?

GPT

>

Type inference, bir değişkenin türünü otomatik olarak çıkarmak anlamına gelir. Yani bir değişkenin tipini açıkça belirtmeye gerek kalmaz. Örneğin, auto i = 1 > false; satırında i bool türünde bir değişkene çıkartılır. Bu özellik, kod yazma sürecini hızlandırır ve hataların azaltılmasına yardımcı olur. D dilinde bu özelliğin yanı sıra, dinamik tür çıkarımı da bulunmaktadır. Bu sayede, bir değişkenin türünü runtime'da değiştirebilme imkanı verir.

Aslında çok politik bir kişiliği var. Bir nevi beni mutlu etmek için kendi örneğimi gösteriyor. Hatalarını kabul edebiliyor ama bilmiyorsa da (örneğin uzay hakkında bilgisi kaçamaklı cevaplar ile sınırlı) araştırabilirsin diyor...

Ben

>

Type Inference hakkında daha çok bilgi edinebilir miyim? Örneğin D programlama dilinde auto ne anlama gelir?

GPT

>

Type Inference hakkında daha çok bilgi edinebilir miyim? Örneğin D programlama dilinde auto ne anlama gelir?
Type inference, bir programlama dilinde bir değişkenin türünün otomatik olarak tanımlanmasını sağlayan bir yöntemdir. Örneğin, bir değişkenin ilk atanmasında kullanılan değerin türüne göre, değişkenin türü otomatik olarak belirlenir ve daha sonra bu değişkene sadece bu türden değerler atanabilir.

D programlama dilinde auto anahtar kelimesi, bir değişkenin türünün otomatik olarak tanımlanmasını sağlar. Örneğin, aşağıdaki kod parçasında x değişkeninin türü otomatik olarak int (tam sayı) olarak tanımlanmıştır:

auto x = 10;

Bu sayede, x değişkenine sadece tam sayı değerleri atanabilir. Eğer ilk atama işleminde x değişkenine bir ondalıklı sayı atanmış olsaydı, x değişkeninin türü otomatik olarak double (ondalıklı sayı) olurdu.

NOT: Şu an GPTv3.5, D dilinde de programlar yazabiliyor. Genelede örneklerini C'de veriyor ama sanki herhangi bir dilde de yazabilir izlenimim var!

December 12, 2022

On Monday, 12 December 2022 at 02:59:23 UTC, Salih Dincer wrote:

>

NOT: Şu an GPTv3.5, D dilinde de programlar yazabiliyor...

Örneğin, ben dedim ki:

>

D programlama dilinde, rasgele sayılar oluşturmak mümkün mü? Örneğinde 1'den 34'e kadar 5 adet sayı oluşturabilir miyiz?

GPT

>

Evet, D programlama dilinde rasgele sayılar oluşturmak mümkündür. D programlama dilinde std.random modülünü kullanarak rasgele sayılar oluşturabilirsiniz. Örneğin, aşağıdaki kod parçasında 1'den 34'e kadar 5 adet rasgele sayı oluşturulmuştur:

import std.random;

void main()
{
    // 1'den 34'e kadar 5 adet rasgele sayı oluştur
    foreach (i; 0 .. 5)
    {
        // 1 ile 34 arasında bir sayı oluştur
        int rnd = uniform(1, 34);
        writeln(rnd);
   }
}

Bu kod parçası, std.random modülünü içe aktararak başlar ve main() fonksiyonu içerisinde bir döngü oluşturur. Döngü, 0 ile 5 arasında sayıları döndürerek 5 kez tekrarlanır. Her tekrar sırasında, uniform() fonksiyonu ile 1 ile 34 arasında bir sayı oluşturulur ve writeln() fonksiyonu ile ekrana yazdırılır.

Bu şekilde, 1'den 34'e kadar 5 adet rasgele sayı oluşturabilirsiniz.

Kendisini düzeltmem gerekti ama tam olarak ders almadı veya 1'den 34'e kadar demekle 34 hariç algılıyor olabilir!

Ben

>

Bence yanılıyorsun! Evet, döngü 0'dan başladığı için 5 adet sayı oluşur ama 1'den 33'e kadar yani 34 hariç sayılar oluşur. Ayrıca writeln() fonksiyonu çalışmaz çünkü bu std.random içerisinde değildir.

GPT

>

Evet, doğru bir şekilde düzeltme yaptınız. Ben de yanılmışım. Döngü, 0'dan 5'e kadar sayıları döndürdüğü için gerçekten 1'den 33'e kadar sayılar oluşmuştur. Ayrıca writeln() fonksiyonu, std.stdio modülü içerisinde bulunmaktadır ve std.random modülü ile ilişkisi yoktur.

Bu nedenle, aşağıdaki kod parçasında düzeltme yaparak 1'den 34'e kadar 5 adet rasgele sayı oluşturabilirsiniz:

Yazdığı 2. kod kısmen aynı ama nedense bu sefer 1 .. 6 arası yaptı ama uniform(1, 35) şeklinde düzeltmedi ya da şablon ile "[]" parametresini bilmiyor. Ayrıca uyarımı dikkate alıp import std.stdio; satırını da en başa ekledi.

Tekrar deneyeceğiz, bakalım kaçıncı denemede doğru yapacak :)

Başarılar...

December 12, 2022
Çok etkileyici.

Ali

December 13, 2022
On Monday, 12 December 2022 at 17:38:26 UTC, Ali Çehreli wrote:
> Çok etkileyici.
>
> Ali

Başta öyle görünüyor ama yüksek işlemci gücü ve kapsamlı veri tabanı sayesinde bu sonuçlar ortalamanın altında. Ben de öğrenme kabiliyetinin etkileyici olduğunu düşünüyorum...

Örneğin yazı tura ilgili kodu çok başarılı üretti (enum'ları tanıyordu) ancak uniform!Para şeklinde kullanımını benden öğrenince (ben de sizden öğrenmiştim 😀) sonraki derlenen bir sürüm oldu.

Şu soru da affalıyor mesela:
> Hasat edilen 100 kg. patatesin gerçek ağırlığı 1 kg.'dir. Buna göre su oranı %99 olan patatesler kurutulduklarında su oranı %98'e düşerse ağırlıkları ne olur.

Uzun zaman önce çözdüğüm bu sorunun cevabı sanırım 51 kiloydu, şimdi tam hatırlayamadım çünkü denklem kurmak gerekiyor. Ama o 1 kilo daha düşürüyor. Yani zeki bir insanın bile anlamakta zorlandığı (sanırım Giffen etkisi ile bir ilişkisi vardı?) bu problemi GPT başka yerinden anlıyor 😀

Sevgiler, saygılar...
January 02, 2023

On Tuesday, 13 December 2022 at 04:31:16 UTC, Salih Dincer wrote:

>

...GPT başka yerinden anlıyor...

Şimdi emin oldum, GPT kesinlikle programlamadan anlıyor ve uygun şartlarda kendi veya sizin için kod yazıyor. Tamam, kod yazdığını defaatle gördük çünkü veritabanı olmadığını iddia etse de bir yerlerden hazır kodları harmanlayıp neredeyse her dilde, bazen yanlış ama çoğu zaman doğru kod üretiyor da sizin yazdığınızı tamamlamasın mı! Evet, onu da yaptı ve benim beynimde yeni fikirler çaktı...

Örneğin dün, Ali hocanın verdiği şu ödev sayesinde UTF decoding'e bir parmak çaldım. Meğer korkulcak bir şey yokmuş, bal kadar tatlıymış, parmakla parmakla bitmez. Ama kod tekrarı sıktı beni GPT'ye havale ettim 😀

>

Şu kod parçacığının TO-DO yazan kısımlarını tamamlar mısın?

Aldığım cevap ve çalışan kod şöyleydi:

>

TO-DO yazan kısımları tamamlamak için aşağıdaki kod parçacığını kullanabilirsiniz:

else if(chr >> 4 == 0x0E) {
  wchar decode = (chr & 0xF) << 12; // 1.'nin 4
  decode |= (encodedText[i+1] & 0x3F) << 6; // 2.'nin 6
  decode |= encodedText[i+2] & 0x3F; // 3.'nin 6
  decodedText ~= decode; // bitlerini birleştir
  sumNumBytes = 3;         // MSB bitleri 1110 ise
}
else if(chr >> 3 == 0x1E) {
  wchar decode = (chr & 0x7) << 18; // 1.'nin 3
  decode |= (encodedText[i+1] & 0x3F) << 12; // 2.'nin 6
  decode |= (encodedText[i+2] & 0x3F) << 6; // 3.'nin 6
  decode |= encodedText[i+3] & 0x3F; // 4.'nin 6
  decodedText ~= decode; // bitlerini birleştir
  sumNumBytes = 4;         // MSB bitleri 11110 ise
}
>

Bu kod parçacığı, dördüncü ve beşinci if bloğu için gereken kodu içerir. Bu bloğlar, encodedText dizisinde işlenen karakterin UTF-8 olarak kaç bayt olduğunu belirlemek için kullanılır. Eğer karakter üç baytlı ise (MSB bitleri 1110), üçüncü if bloğu içinde yer alan kod çalışır ve karakterin Dünya Standartlarına göre nasıl çözüleceği belirlenir. Benzer şekilde, dördüncü if bloğu (MSB bitleri 11110) için de geçerlidir.

Tamam, 5. blok patlar çünkü wchar ama siz dchar kullanırsanız çalışır. Zaten D'yi bilmeden ve temel kodlama teknikleri ile bu kod üretiliyor. Bir de D'yi Walter kadar iyi bildiğini/eğitildiğini düşünsenize (!) dünyanın kodu saniyeler içinde yazar! Ama endişelenmeyin, hiçbir zaman şu sadeleştirmeyi yazamaz:

auto wcharArrayFrom(string str) {
  wchar[] result;
  for(size_t i; i < str.length; i++) {
    if(str[i] >> 7) {
      wchar buffer = (str[i] & 0x1F) << 6;
      buffer |= str[++i] & 0x3F;
      result ~= buffer;
    } else result ~= str[i];
  }
  return result;
}

Yani iddia ediyorum işimizi elimizden alamaz! Belki onun kadar hızlı kod üretemeyebilirim ama benim nöronlarımın kurduğu ilişki düzeyine erişemez.

Hadi bakalım 😜

Bu arada Kadir (FKA) konuyla ilgili İngilizce e-book (bir rehber) yayınlamış:

(ChatGPT Komut İstemi Sanatı: Açık ve Etkili İstemler Oluşturma Rehberi)[https://fka.gumroad.com/l/art-of-chatgpt-prompting]

Ücretsiz indirebilir, Github deposundaki uygulamayı kullanabilirsiniz.

Kolay gelsin, iyi haftalar...