Erişilmez kod

Erişilmez kod (yahut erişilemeyen kod, İng. unreachable code) bilgisayar programlamada programın başka yerlerinden kontrol akışı olmayan kaynak koduna verilen addır.[1]

Erişilmez kod, bazen ölü kodla karıştırılmaktadır. Hâlbuki ölü kod, yürütülmesine rağmen bir etkisi olmayan kod için kullanılır.

Erişilmez kod, genelde birkaç sebepten dolayı istenilmez. Bu sebepler arasında

Sebepleri

Erişilmez kod, değişik sebeplerden dolayı olabilir:

Son beş durumda erişilmez kodun orada olma sebebi kalıtsal, yani artık kullanımda olmayan bu kod, eskiden kullanılmakta olan bir koddur.

Örnekler

Aşağıdaki C kodu parçasına dikkat ediniz:

int foo (int iX, int iY)
{
  return iX + iY;
  int iZ = iX*iY;
}

int iZ = iX*iY;'in tanımına işlev daha önce geri döndüğünden hiçbir zaman erişilememektedir. Dolayısıyla iZ'in tanımı ıskarta edilebilir.

Çözümleme

Erişilmez kodu tespit etmek, statik kod çözümlemesinin bir parçası olup kontrol akışı çözümlemesini kullanarak yürütüm süresince tanımlanan değişkenlere ve programın diğer durumlarına bakmadan hiç yürütülmeyen kodu bulmaya çalışır. Java gibi bazı bilgisayar dillerinde erişilmez kodun kimi çeşitleri menedilmiştir. Erişilmez kodu uzaklaştıran iyilemeler (optimizasyon) ölü kod uzaklaştırması olarak bilinir.

Kod, iyileştiren bir derleyicinin dâhilî değişmeleri sonuçunda erişilmez olabilir. Buna örnek olarak common subexpression elimination sayılabilir.

Partikte çözümlemenin kapsamı, bulunan erişilmez kod yüzdesine kayda değer bir etkisi olur. Meselâ constant folding ve basit akış çözümlemesi, xyz komutunun aşağıda erişilmez olduğunu göstermektedir:

int iN = 2 + 1;

if (iN == 4)
{
  xyz
}

Aşağıdaki örnekte xyz'nin erişilemezliğinin tespîti için çok daha fazla kapsamlı çözümleme gerekmektedir.

double dX = sqrt(2);

if (dX > 5)
{
  xyz
}

Erişilmez kodu uzuklaştırma tekniği, ölü ve gereksiz kodu uzaklaştırmaya benzer.

Erişilmezliğe karşın profilleme

Bazı durumlarda pratik bir yaklaşım, basit erişilememezlik kriterleri ve daha karmaşık durumlar için bir profilere ihtiyaç vardır. Profilleme (profiling), genelde bir kod parçasının erişilememezliği konusunda hiçbir şeyi ispat edemese de erişilememezlik potansiyeli olan kodu bulabilmek için iyi bir bulgusal (heuristic) yaklaşımdır. Şüpheli bir kod parçası bir kere bulunduktan sonra daha güçlü bir çözümleme metodu yâhut elden incelenerek gerçekten erişilemez olup olmadığı tespit edilebilir.

Kaynakça

  1. Debray, S. K.; Evans, W., Muth, R., and De Sutter, B. (2000-03). "Compiler techniques for code compaction." (English) (PDF). Volume 22, issue 2. New York, USA: ACM Transactions on Programming Languages & Systems (TOPLAS). Bibcode 378-415. 11 Ekim 2008 tarihinde kaynağından arşivlendi. http://web.archive.org/web/20081011122408/http://doi.acm.org/10.1145/349214.349233.

Ayrıca bakınız

This article is issued from Vikipedi - version of the 12/19/2015. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.