Kod źródłowy
Ten artykuł od 2012-07 wymaga zweryfikowania podanych informacji. |
Kod źródłowy – szczegółowe instrukcje programu komputerowego za pomocą określonego języka programowania, opisujące operacje, jakie powinien wykonać komputer na zgromadzonych lub otrzymanych danych[1]. Kod źródłowy jest wynikiem pracy programisty i pozwala wyrazić w czytelnej dla człowieka formie strukturę oraz działanie programu komputerowego. Jest on zwykle zapisywany w pliku tekstowym, lecz może również występować w postaci fragmentów kodu opublikowanych w artykułach prasowych lub książkach.
Przed wykonaniem kod źródłowy musi zostać poddany translacji na kod wynikowy, w procesie zwanym kompilacją[1]. Polega on na konwersji kodu do postaci kodu wynikowego, najczęściej kodu maszynowego, jako jedynego możliwego do wykonania przez procesor. Inną metodą jest wykonywanie w czasie rzeczywistym („w locie”) programu zapisanego kodem źródłowym za pomocą interpretera[1] lub kompilatora JIT, który wykonuje kompilację fragmentów kodu na bieżąco. Określenie „wykonanie kodu źródłowego” jest równoważne wykonaniu programu stworzonego na podstawie tego kodu.
Zastosowania
edytujGłównym zastosowaniem kodu źródłowego jest wyrażanie programów komputerowych w zrozumiałej postaci, dzięki czemu mogą być one łatwo rozwijane i rozbudowywane o nową funkcjonalność. Kod stanowi wtedy wejście dla procesu, którego wynikiem jest rzeczywisty program nadający się do wykonania. Kod źródłowy stanowi także jeden ze sposobów zapisu algorytmów, na przykład w książkach lub artykułach.
Dzięki dodatkowemu poziomowi abstrakcji, wprowadzanemu przez język programowania, kod źródłowy nie musi uwzględniać wszystkich operacji potrzebnych do rozwiązania danego problemu. Pominięte kwestie mogą być rozwiązywane na etapie kompilacji lub interpretacji zależnie od platformy sprzętowej, na jakiej aktualnie pracujemy. Umożliwia to tworzenie przenośnych programów, mniej uzależnionych od konkretnego rodzaju sprzętu i oprogramowania. Bez dostępu do kodu źródłowego, przeniesienie programu na inną platformę może być bardzo złożonym, a przez to zupełnie nieopłacalnym procesem. Innym rozwiązaniem problemu przenośności jest emulacja oryginalnej platformy.
Przeglądanie cudzego kodu źródłowego jest popularną metodą podnoszenia swoich umiejętności programistycznych i poznawania nowych technik programowania. Wśród programistów traktowany jest także niekiedy jako forma sztuki (np. konkurs IOCCC).
Organizacja
edytujKod źródłowy danego oprogramowania może się składać z wielu plików zwanych często plikami źródłowymi. Nie muszą być one zapisane w jednym i tym samym języku programowania, choć nie jest to często spotykana praktyka. Przykładowo, program napisany w języku C może posiadać pewne partie napisane w asemblerze ze względów optymalizacyjnych. Możliwe jest także niezależne stworzenie i skompilowanie poszczególnych części oprogramowania i połączenie ich później. Technika ta nosi nazwę konsolidacji.
Kolejne podejście to stworzenie specjalnego programu zwanego interpreterem języka programowania, który wczytuje kod źródłowy i na bieżąco go wykonuje. Może on być zaprojektowany jako program ogólnego przeznaczenia lub część większej aplikacji umożliwiająca jej łatwe rozszerzanie o dodatkowe funkcje bez konieczności ujawniania, lub zgłębiania jej wewnętrznej struktury. Przykładem takiej aplikacji jest edytor tekstu GNU Emacs.
Duże projekty mogą liczyć sobie nawet tysiące plików. Kodowi źródłowemu towarzyszą wtedy dodatkowe instrukcje (np. w postaci pliku Makefile) opisujące zależności między poszczególnymi plikami i podające przepis, jak je skompilować, aby powstał kompletny program. Do zarządzania konfiguracją oprogramowania w celu śledzenia zmian kodu źródłowego wykorzystywane są także systemy kontroli wersji.
Licencjonowanie
edytujPod względem dostępności kodu oprogramowanie wraz z towarzyszącym mu kodem źródłowym można zakwalifikować do jednej z dwóch głównych kategorii:
Z oprogramowaniem zamkniętym mamy do czynienia wtedy, gdy jego kod źródłowy nie jest dostępny publicznie, a użytkownicy nabywają wyłącznie jego binarną reprezentację. Pełne korzystanie z niego jest dodatkowo ograniczone przez prawa autorskie, tajemnice handlowe czy patenty. Licencje użytkownika końcowego dołączone do takiego oprogramowania najczęściej zabraniają dekompilacji, inżynierii wstecznej, modyfikacji lub nieautoryzowanej dystrybucji.
Oprogramowanie ma charakter otwarty, gdy użytkownicy mają dostęp do kodu źródłowego oraz mogą go legalnie adaptować do własnych potrzeb i udostępniać innym własne modyfikacje. Towarzyszące oprogramowaniu licencje służą ochronie konkretnych praw użytkowników do dokonywania tych działań, lecz w większości przypadków nie narzucają ograniczeń na komercyjną sprzedaż takiego oprogramowania. Pierwszą szeroko rozpowszechnioną otwartą licencją oprogramowania była GNU General Public License napisana z myślą o projekcie GNU, a w późniejszym czasie zastosowania również w wielu innych projektach.
Jakość kodu
edytujStruktura i organizacja kodu źródłowego jest bardzo istotna dla opiekujących się nim osób. W zależności od potrzeb jakość kodu można definiować na różne sposoby:
- czytelność – wypracowano wiele sposobów formatowania kodu mających na celu zwiększenie jego czytelności z uwzględnieniem struktury konkretnego języka,
- wydajność generowanego kodu wynikowego,
- łatwość rozbudowy – wynika z odpowiedniej organizacji wykorzystywanych w kodzie elementów języka oraz stosowania właściwych technik programistycznych,
- przenośność.
Dokumentowanie kodu
edytujOprócz rozkazów kod źródłowy zawiera także wiele innych elementów, w tym deklaracje funkcji i struktury danych. W większych projektach zachodzi potrzeba udokumentowania zawartości, budowy i organizacji kodu źródłowego, ponieważ dokładne zapamiętanie wszystkich wchodzących w jego skład elementów jest zbyt czasochłonne i uniemożliwia szybkie zapoznanie się z projektem nowym członkom zespołu programistów. Podstawowym narzędziem opisywania działania kodu są umieszczone w nim komentarze ze słownym opisem w języku naturalnym, których zawartość jest ignorowana przez programy. Komentarze mogą zawierać objaśnienie, co robi dany fragment kodu, uwagi dotyczące jego użycia bądź informacje techniczne dla innych programistów (np. o znalezionych błędach albo pozostałych do zaimplementowania funkcjach).
Dokładniejsze dokumentacje mają postać osobnych dokumentów szczegółowo opisujących wszystkie elementy kodu źródłowego w pewien ustandaryzowany sposób. Opis każdego elementu sporządzony jest w języku naturalnym, może zawierać odnośniki do powiązanych elementów i przykłady użycia. Programista pragnący użyć danego elementu, może go szybko odnaleźć w dokumentacji i zapoznać się ze wszystkimi dostępnymi na jego temat informacjami. Pozostałe tematy związane z budową i działaniem kodu źródłowego opracowane są najczęściej w formie klasycznych artykułów.
Istnieje szereg wyspecjalizowanych narzędzi umożliwiających tworzenie dokumentacji bezpośrednio z istniejącego kodu źródłowego, na przykład Doxygen. Dzięki znajomości gramatyki języka programowania potrafią automatycznie określić wiele związków między poszczególnymi elementami. Dodatkowe informacje oraz opis są importowane ze specjalnych komentarzy umieszczonych nad każdym elementem.
Przykłady
edytujStandardowym przykładem kodu źródłowego danego języka jest program, który wypisuje na monitorze terminala napis „Hello world!” (zwykle poprzez przesłanie na standardowy strumień wyjściowy sprzęgnięty z konsolą).
<!DOCTYPE html>
<html>
<head>
<head>
<body>
<h1>Hello World!</h1>
</body>
</html>
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Hello world!\n");
return 0;
}
#include <iostream>
using namespace std;
int main() {
cout << "Hello world" << endl;
return 0;
}
using System;
public class Main {
public static void Main() {
Console.WriteLine("Hello world!");
}
}
import std.stdio;
int main(char[][] args) {
writefln("Hello world!");
return 0;
}
System.Console.WriteLine("Hello world!");
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
<?php
echo "Hello world!";
?>
@echo Hello world!
#!/bin/bash
echo Hello world!