Chociaż niektórzy ludzie postrzegają / traktują przenośność, przestrzeganie standardów itp. Jako moralnie lepsze lub coś w tym porządku, to tak naprawdę sprowadza się do ekonomii.
Pisanie przenośnego kodu wiąże się z kosztami związanymi z jego przystosowaniem i (często) rezygnacją z niektórych funkcji, które nie są dostępne we wszystkich obiektach docelowych.
Kod nieprzenośny wiąże się z kosztami związanymi z przenoszeniem kodu, gdy zależy Ci na nowej architekturze i (często) rezygnuje z niektórych funkcji, które nie są (lub nie były) dostępne w pierwotnym celu.
Dużym kwalifikatorem jest „kiedy / jeśli zależy ci na nowej architekturze”. Pisanie przenośnego kodu wymaga wysiłku z góry w nadziei na ostateczną korzyść z możliwości użycia tego kodu na nowych / różnych architekturach przy niewielkim lub żadnym wysiłku. Kod nieprzenośny pozwala opóźnić tę inwestycję w przenoszenie do momentu, gdy będziesz (przynajmniej rozsądnie) pewien, że naprawdę musisz przenieść do określonego celu.
Jeśli masz pewność, że zamierzasz przenieść do wielu celów, zwykle warto zainwestować z góry w minimalizację długoterminowych kosztów przenoszenia. Jeśli nie masz pewności, ile (lub nawet jeśli) będziesz musiał przenieść kod, pisanie nieprzenośnego kodu pozwala zminimalizować koszty początkowe, opóźnić lub nawet całkowicie uniknąć kosztu uczynienia kodu przenośnym.
Myślę, że warto również zauważyć, że mówiłem o „przenośnym” i „nieprzenośnym”, jak gdyby istniał wyraźny podział między nimi. W rzeczywistości nie jest to prawdą - przenośność jest kontinuum, od całkowicie nieprzenośnego (np. Kod asemblera) do niezwykle przenośnego (np. Info-zip) i wszędzie pomiędzy.