İçeriğe atla

Ölü kod

Ölü kod, bilgisayar programlamasında kullanılan bir terim olup yürütülmesine rağmen sonucu kullanılmayan kaynak koduna denir.[1][2] Ölü kodun yürütülmesi, sonuçları hiçbir zaman kullanılmadığından hesaplama zamanını israf eder.

Sonuçları kullanılmasa da ölü kod ayrıksı durumlara ya da genel durum değişikliklerine yol açabilir. Bu kodun programdan uzaklaştırılması, programın çıktısını etkileyerek beklenmedik hatâların ortaya çıkmasına sebep olabilir. Derleyicinin kodu iyileştirme yaklaşımları, kod uzaklaştırmalarının programın seyrine etki edebileceği konusunda şüpheye yer bıraktığında muhâfazakâr olur ve kodu uzaklaştırmaz.

Örnek

int foo (int iX, int iY)
{
	int iZ = iX/iY;

	return iX*iY;
}

Bu örnekte iX ve iY'nin toplamı kullanılmamasına rağmen hesaplanmakla birlikte sıfıra bölünme durumunda bir ayrıksı durum oluşturmaktadır. Dolayısıyla ölü koddur ve programdan uzaklaştırılabilir.

Analiz

Ölü kod uzaklaştırmalası, bir çeşit derleyici optimizasyonudur. Ölü kodun analizi canlı değişken analiziyle yapılabilir. Bu analiz, statik kod analizi ve veri akışı analizinin bir çeşidi olup erişilemeyen kod analizinin aksine kontrol akışı analizine dayanmamaktadır.

Ölü kodu uzaklaştırma yöntemleri, erişilemeyen veya gereksiz kod uzaklaştırmalarıyla aynı kategoridedir.

Büyük programlarda bilhassa komple modüller söz konusu olduğunda ölü kodun tespîti ve uzaklaştırması bazen zor olur. Test yapısı, uzaklaştırılması düşünülen kodun hâlez canlı olduğu izlenimini uyandırabilir ve bazen anlaşmalar, kullanılmayan kodla programın teslîmine sebep olur.[3]

Ayrıca bakınız

Kaynakça

  1. ^ "Debray, S. K., Evans, W., Muth, R., and De Sutter, B. 2000. Compiler techniques for code compaction. ACM Trans. Program. Lang. Syst. 22, 2 (Mar. 2000), 378-415." 22 Mayıs 2003 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Aralık 2011. 
  2. ^ Appel, A. W. 1998 Modern Compiler Implementation in Java. Cambridge University Press.
  3. ^ Douglas W. Jones Dead Code Maintenance, Risks 8.19 (Feb. 1, 1989) 8 Temmuz 2011 tarihinde Wayback Machine sitesinde arşivlendi.

Dış bağlantılar

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

Komut kümesi mimarisi, CPU'nun yazılım tarafından nasıl kontrol edileceğini tanımlayan bilgisayar soyut modelinin bir parçasıdır. ISA, işlemcinin ne yapabileceğini ve bunu nasıl yapacağını belirterek donanım ve yazılım arasında bir arayüz gibi davranır.

<span class="mw-page-title-main">C++</span> bir programlama dili

C++, Bjarne Stroustrup tarafından 1979 yılında Bell Laboratuvarları'nda geliştirilmeye başlanmış, C'yi kapsayan ve çok paradigmalı, yaygın olarak kullanılan, genel amaçlı bir programlama dilidir.

<span class="mw-page-title-main">Java</span> açık kaynak kodlu, nesneye yönelik, zeminden bağımsız, yüksek verimli, çok işlevli, yüksek seviye, adım adım işletilen bir programlama dili

Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış açık kaynak kodlu, nesneye yönelik, platform bağımsız, yüksek verimli, çok işlevli, yüksek seviye, hem yorumlanan hem de derlenen bir dildir.

<span class="mw-page-title-main">Visual Basic</span>

Visual Basic, Microsoft tarafından, Basic programlama dili üzerinde geliştirilmiş, olay yönlendirmeli, üst seviye, nesne tabanlı ve görsel bir programlama dilidir. Öğrenilmesi de kullanılması da oldukça kolaydır.

<span class="mw-page-title-main">Derleyici</span> kaynak kodunu bilgisayarın işleyebileceği koda dönüştüren program

Derleyici, kaynak kodu makine koduna dönüştüren yazılımdır. Bir programlama dilinin derleyicisi, o programlama dili kullanılarak yazılmış olan kodu hedef işlemci mimarisine göre uygun şekilde makine koduna derler ve genellikle çıktı olarak yürütülebilir dosyanın oluşturulmasını sağlar. Bu eyleme derleme denir. Bir başka ifadeyle derleyici, bir tür yazı işleyicidir; girdi olarak yazı alır ve çıktı olarak yazı verir.

<span class="mw-page-title-main">Bellek yönetimi</span>

Ana belleğin işlemler arasında paylaştırılmasına ana bellek yönetimi ya da bellek yönetimi adı verilir. İşletim sisteminin bu amaçla oluşturulan kesimine de bellek yöneticisi adı verilir.

Bilgisayar biliminde, Lexer sözcüksel analiz gerçekleştiren program parçasının adıdır. Türkçede direkt çevirisinin yapılabileceği doğru bir kelime olmayan terimlerden biri denebilir. Sözcüksel analiz kaynak kod üstünde gerçekleştirilen bir eylemdir. Sözcüksel analiz sonucunca kaynak kodun program tarafından incelenip ayrıştırılarak anahtar kelime, operatör ya da tanımlayıcılar gibi her bir ögesinin jeton olarak temsili elde edilir.

<span class="mw-page-title-main">Assembly</span> uygulanan işlemlerle programlama dilinin birbirine çok yakın olduğu düşük seviye programlama dilleri

Assembly dili, bir işlemcinin komut kümesi üzerine tanımlanmış alt seviye bir dildir. Assembly dili kolay hatırlanabilir semboller tanımlar ve böylece işlemcinin makina koduna karşılık gelen sayı dizilerinin bilinmesine gerek kalmaz. Assembly dili, platformdan bağımsız yüksek seviyeli programlama dillerinin aksine, işlemci mimarisine bağımlıdır. Tipik uygulamaları; cihaz sürücüleri, alt seviyeli dahili (embedded) ve gerçek zamanlı sistemlerdir. Bır assembly programı assembler kullanılarak makine koduna çevrilir.

Olaya dayalı programlama, olay güdümlü programlama veya olay yönlendirmeli programlama, programın akışını kullanıcı hareketlerine göre yönlendirebilen(fare-klavye girişleri, benzer tüm olaylar) programlama şeklidir. Geleneksel programlama dillerinde uygulama başlar, bu noktadan program ilerler ve bütün olaylardan sorumludur. Tüm girişlerden program her an sorumludur. Ancak olay yönlendirmeli programlarda istediğiniz uygulanma üzerine yoğunlaşılabilir.

Döngü açma, programın çalışmasını hızlandıran döngü dönüştürme yöntemlerinden biridir. Bu yöntem yazılan programın kod satır sayısını artırmaktadır. Döngülerdeki dönüşüm manuel olarak programcı tarafından yapılabileceği gibi kodlar derleyiciler tarafından da düzenlenebilmektedir.

<span class="mw-page-title-main">Java sanal makinesi</span>

Java Sanal Makinesi (JSM), Java platformunun nesne modülü formatı olan class uzantılı sınıf dosyalarının belleğe yüklenip çalıştırılması için gereken hizmetleri sunan bir sistem programıdır ve temel görevinin sınıf dosyalarını yorumlamak olduğu söylenebilir. Ancak, JSM'ni salt bir yorumlayıcı olarak görmek büyük haksızlık olur. Zira, yorumlama ile birlikte JSM'nin şu görevleri de vardır.

<span class="mw-page-title-main">Erişilmez kod</span>

Erişilmez kod bilgisayar programlamada programın başka yerlerinden kontrol akışı olmayan kaynak koduna verilen addır.

Gereksiz kod, bir programlama terimi olup bir sebepten dolayı gereksiz olup kaynak veya derlenmiş koda denir. Bu kod hiçbir zaman yürütülmemektedir. Çoğu zaman bu koda erişilmez kod da denir. Ayrıca yürülmesine rağmen dışarıda bir etkisi görünmeyen, yani çıktısını değiştirmeyen koda da gereksiz kod denmektedir. Bu tür koda ölü kod da denmektedir.

<span class="mw-page-title-main">OpenMP</span>

OpenMP; Solaris, IBM AIX, HP-UX, GNU/Linux, MAC OS X ve Windows işletim sistemleri üzerinde çoğu işlemci mimarisi üzerinde Fortran, C++, C programlama dillerinde çoklu platform paylaşımlı bellek çoklu işlemeyi destekleyen bir uygulama geliştirme arayüzüdür, yani bir API'dir. OpenMP derleyici yönergelerinin kütüphane rutinlerini ve ortam değişkenlerinin çalışma zamanı davranışını etkileyen bir kümesini içerir.

Dart, ilk kez Google tarafından geliştirilen ve daha sonraları ECMA tarafından standart (ECMA-408) haline getirilen açık kaynaklı ve genel-amaçlı bir programlama dilidir. Dart dili kullanılarak web, sunucu, mobil uygulamalar ve IoT cihazları geliştirilebilir.

ReSharper [ˈɹiːˌʃɑːɹpɚ] yahut R# JetBrains tarafından Microsoft'un geliştirme ortamı Visual Studio için yayımlanan bir uzantısıdır. Şu anda desteklenen ReSharper sürümleri Visual Studio 2010, 2012, 2013, 2015 ve güncel yayın öncesi sürüm "15"'tir.

Fabrice Bellard en çok FFmpeg ve QEMU yazılım projeleriyle bilinen bir bilgisayar programcısıdır. Bellard ayrıca aralarında Tiny C Compiler'ın da olduğu birçok başka program da yazmıştır.

<span class="mw-page-title-main">Ayrıştırıcı (yazılım)</span>

Ayrıştırıcı, girdi verilerini alır ve girdinin yapısal bir temsilini vererek, süreçte doğru sözdizimini kontrol eden bir veri yapısı oluşturan bir yazılım bileşenidir. Ayrıştırma öncesinde veya sonrasında başka adımlar izlenebilir veya bunlar tek bir adımda birleştirilebilir. Ayrıştırıcı, genelde girilen karakter dizisinden belirteçler oluşturan ayrı bir sözcük tabanlı analiz motorunu takip eder. Ayrıştırıcılar elle programlanabilir veya bir ayrıştırıcı üreteci tarafından otomatik olarak veya yarı otomatik olarak oluşturulabilir. Ayrıştırma, biçimlendirilmiş çıktı üretimlerini tek bir şablonda tamamlama görevi görür. Bunlar, farklı etki alanlarına uygulanabilir, ancak bir derleyicinin girdi ve çıktı aşamaları gibi genellikle bir arada sunulur.

JIT ; bilgisayar kodunu çalıştırmanın bir yoludur. Yürütülmeden önce bir program yürütülürken çalışma zamanında derleyici içerir. Genellikle bu, kaynak kodu ve daha sonradan makine diline bytecode kod çevirisini içerir ve bu kod doğrudan doğruya çalıştırılır. Bir JIT derleyicisi uygulayan bir sistem genellikle yürütülen kodu sürekli olarak analiz eder, daha sonra derleme veya tekrar derlemeden elde edilen hızlanmanın bu kodun derlenmesinin yükünden daha ağır olacağı kod bölümlerini tanımlar.