Turing complete ya da Turing bütünlüğü, bilgisayar biliminde, bir yönergeler sisteminin başka herhangi bir yönerge sistemini simüle etme yeteneğini ifade eden bir kavramdır. Adını, kavramı ilk kez 1936'da öneren İngiliz matematikçi ve bilgisayar bilimcisi Alan Turing'den almıştır. Turing bütünlüğü, bir bilgisayar tarafından neyin hesaplanıp neyin hesaplanamayacağının incelenmesi olan hesaplanabilirlik teorisi çalışmasında önemli bir kavramdır.
Bir sistem, başka herhangi bir sistemi simüle etmek için kullanılabiliyorsa Turing complete demektir. Bu, ne kadar karmaşık olursa olsun, herhangi bir hesaplama problemini çözmek için kullanılabileceği anlamına gelir. Bir sistemin Turing'in eksiksiz olması için dört temel işlemi gerçekleştirme yeteneğine sahip olması gerekir: verileri okuma, yazma, depolama ve işleme. Bu işlemler tüm bilgisayar programlarının temelidir.
Turing Complete (Turing Bütünlüğü) Kavramının Önemi
Turing complete (turing bütünlüğü) önemli bir kavramdır çünkü neyin hesaplanabileceğinin sınırlarını anlamamıza izin verir. Neyin hesaplanabileceğinin sınırlarını anlayarak, daha verimli algoritmalar tasarlayabilir ve daha iyi bilgisayar programları oluşturabiliriz. Turing complete (turing bütünlüğü), bilgisayarların gücünü anlamak için de önemlidir. Bilgisayarların gücünü anlayarak daha güçlü ve verimli sistemler yaratabiliriz. Bilgisayar bilimi çalışmalarında Turing'in tamlığının bu kadar önemli olmasının nedeni budur. Terim normalde modern programlama dillerini tanımlamak için kullanılır çünkü C ++, Python, JavaScript, vb. çoğu modern programlama dili Turing Complete'dir.
Turing Makinesi Nedir?
Turing Makinesi, gerçek dünyadaki bir bilgisayarın davranışını modellemek için kullanılan teorik bir hesaplama cihazıdır. İlk olarak 1936'da Alan Turing tarafından örneklenmiştir ve modern hesaplamanın temeli olarak kabul edilmektedir. Turing Makinesi, herhangi bir hesaplanabilir sorunu çözmek için kullanılabilen bir makinenin matematiksel modelidir.
Turing Makinesi, bir teybe sembolleri okuyan ve yazan bir sonlu durum makinesinden oluşur. Bant, her biri tek bir sembol içerebilen hücrelere bölünmüştür. Makine bant üzerinde ileri geri hareket edebilir, giderken sembolleri okuyabilir ve yazabilir. Makine, belirli bir sembolle karşılaştığında ne yapması gerektiğini söyleyen, program olarak bilinen bir dizi talimata sahiptir.
Turing Makinesi, algoritmaların davranışını anlamak ve verimli algoritmalar tasarlamak için güçlü bir araçtır. Matematik ve bilgisayar bilimlerindeki teoremleri ispatlamak için de kullanılır. Turing Makinesi, bilgisayar biliminde önemli bir kavramdır çünkü hesaplanabilirlik kavramını resmileştirmenin bir yolunu sunar. Matematik ve bilgisayar bilimlerindeki teoremleri ispatlamak için de kullanılır.
Turing Makinesi Nasıl Çalışır?
Alan, bu makineyi ikili kodları (0 ve 1) kullanan bir bant olarak hayal etmiştir. Bu makine her kareyi tek tek okuyabilecek bir okuma / yazma başlığına sahip olacak şekilde tasarlanmıştır. Alan’a göre bu kodlar makineye çözülmesi gereken soruyu sorarken, makine aynı anda sonuçları bu bantlara kaydedecekti. Dolayısıyla çözüm ne kadar uzunsa o kadar banta ihtiyaç duyulacaktı.
Makine başlığı bant boyunca hareket ederken, makine nasıl tepki vereceğini belirleyen basit bir talimatlar dizesi izler. Kaseti okur, talimatları izler ve ilerledikçe yeni bir kod yazmak için belirli bir eylem gerçekleştirir. Bu ortaya çıkan yeni kod kalıbı, sorunun cevabıdır. Turing’in bu varsayımsal makinesi, kodla ifade edilebilen (ve hesaplanabilir bir cevabı olan) herhangi bir hesaplama problemine cevap verebilecek kapasitededir.
Bir cihaz veya programlama dili, herhangi bir programı çalıştırarak veya Turing Makinesi’nin çalıştırabileceği veya çözebileceği herhangi bir sorunu çözerek bir Turing Makinesi’ni işlevi görebildiğinde, Turing Complete (Turing Bütünlüğü) olarak kabul edilir. Öte yandan, bir cihaz veya programlama dili bunu yapamıyorsa, bu cihaza veya programlama diline Turing Incomplete denir.
Basit bir hesap makinesi, yalnızca birkaç tür hesaplama yapabildiğinden, Turing Incomplete olan bir sistem örneğidir. Buna karşılık, programlanabilir bir bilimsel hesap makinesi bir Turing Makinesi olarak kabul edilebilir.
Blok zincirleri ve Turing Complete
Blokzinciri teknolojisinin bazı uygulamaları Turing Complete (Turing Bütünlüğü) iken, bazıları ise Turing Incomplete'dir. Bu, uygulanan komut dosyası teknolojisine göre değişir. Örneğin,
'de kullanılan yazılım dili kasıtlı olarak Turing Incomplete olarak tasarlanmıştır. Bunun arkasındaki neden Turing Incomplete olarak amacına hizmet edebilmesidir. Eğer yazılım Turing Complete olsaydı, bu yazılımı daha karmaşık yapardı. Bu durumun sonucu olarak da daha karmaşık problemler ortaya çıkabilirdi. Yazılımı basit tutarak, geliştiriciler, yazılımlarının duruma göre nasıl tepki vereceğini tahmin edebilirler.
Diğer bir yandan Ethereum ise Turing Complete bir blok zinciri olarak tasarlanmıştır. Bunun arkasında ki neden Turing Incomplete bir yazılımın akıllı sözleşmeleri anlayacak kapasiteye sahip olmamasıdır. Turing Complete olarak Ethereum, henüz var olmayan anlaşmalar da dahil olmak üzere gelecekteki herhangi bir anlaşmayı anlama ve uygulama yeteneğine sahiptir. Başka bir deyişle, Ethereum'un Turing Complete olması doğru talimatlara, yeterli zamana ve işlem gücüne sahip olduğu sürece kod tabanını hemen hemen her görevi gerçekleştirmek için kullanabileceği anlamına gelir.
Tartışma, Ethereum'un "Bitcoin Blockchain Turing Complete değildir, Ethereum öyledir" diyerek kendisini tanıtması ve pazarlamasıyla başladı ve aynı lige tüm yeni Blockchainler katıldı. Ethereum, merkezi olmayan uygulamalar için bir platformdur. Yani, bu uygulamaları yürütmek için merkezi bir varlık veya sunucu gerekmez. Uygulama birden fazla bilgisayarda çalışır ve bu nedenle onları kaldırmanın bir yolu yoktur. Bu tür uygulamaları yazmak için akıllı sözleşmelere ihtiyacınız olur. Akıllı sözleşmeler, Solidity in Ethereum ve Solidity is Turing Complete ile yazılır. Ethereum'un kurucusu Vitalik Buterin, Turing Complete Programlama dilini Döngülere izin veren dil olarak tanımlar.
Bitcoin Blockchain betik dilinin neden döngüleri desteklemediğinin arkasındaki tasarım kararı, spamleri önlemektir. Bazı kodlar milyonlarca yürütme gerektirebileceğinden ve ağa aşırı yük binebileceğinden, döngüler Blockchain'de tehlikeli olabilir. Ethereum, her işlem için ücret getirerek bunu çözmüştür. Bu nedenle, yürütülecek ifadeler ne kadar çoksa, ücret de o kadar fazladır.