2011-04-04 10 views

Odpowiedz

2

Fortran ma pewne właściwości, które umożliwiają szybsze programy. Wskaźniki Esp powodują, że kompilator nie optymalizuje kodu (a tablice są przekazywane jako wskaźniki w C - a tablice są strukturą danych w HPC). Problem polega na tym, że dwa wskaźniki mogą alias, w Fortran to nie może się zdarzyć. W nowym C99 problem ten jest mniejszy, gdy dobrze napisany, jak podpowiadasz kompilatorowi z restrict, taki alias nie może się zdarzyć.

Ale ponieważ w firmach fortranowych istnieje bardzo wiele starych fortranowych kodów, nigdy w najbliższym czasie nie będą one przestarzałe.

+6

Uważam za zabawne za każdym razem, gdy 12-letni standard nazywa się nowy. –

+0

Więc możesz powiedzieć, że fortran jest jeszcze szybszy? – James

+1

Nie chodzi o to, że fortran vs C jest szybszy, ale o to, że napisany już kod jest szybszy. Trzeba będzie sporo wysiłku, aby ludzie przepisali swój precyzyjnie dostrojony kod fortranowy w C. – nos

2

Fortran nie zniknie w najbliższym czasie. Jest zbyt wiele kodu Fortran: szybkie, niezawodne, dobrze przetestowane procedury do robienia wszelkiego rodzaju rzeczy i programy, które mogą być mniej dobrze zaprojektowane, ale które działają i byłyby trudne do przepisania w C.

Co więcej, Fortran ponieważ język został zaprojektowany z myślą o komputerach o wysokiej wydajności i nie ma małych barier dla optymalizacji, a kompilatory Fortran są zwykle zaprojektowane do komputerów o wysokiej wydajności.

+0

Nie sądzę, że pytanie dotyczy przepisywania istniejącego kodu Fortran w C. Jak widzę, pytanie, jakie potencjalne korzyści w zakresie wydajności ma ostatnia standardowa oferta Fortran w porównaniu z najnowszym standardem C dla nowego kodu? –

+0

Tak, dokładnie do Matthew – James

+1

Dostępne biblioteki są bardzo ważnym powodem wyboru jednego języka na inny, w rzeczywistości zwykle biorą pod uwagę decyzję bardziej niż surową wydajność. Gdy biblioteki są również prawdopodobnie najlepsze, masz wygraną. –

1

Dwa słowa. Starszy kod. W ciągu 20 lat nadal będzie dużo fortuny, podobnie jak będzie dużo COBOL. I moje serce wychodzi do tych, którzy muszą to utrzymać.

2

Fortran 90/95/2003/2008 są językami wyższego poziomu niż C. Wybrałbym C dla programowania wbudowanego lub urządzenia oraz współczesny Fortran dla programowania naukowego.

11

Argh! Nie, nie, nie. A w pokrewnych wiadomościach, Fortran rozwijający pewne OOP/polimorficzne rzeczy nie jest przestarzały C++, Erlang nie czyni Haskella zbytecznym, python nie zabił skryptowania bash, PHP nie eliminuje potrzeby javascript, i tajemniczo, nic nie zabiło poza Javą itp. itd. Istnieje wiele języków programowania bazillionowych z jakiegoś powodu - jest tam zestaw programistów, którzy uważają, że są dobrym narzędziem do określonych zadań. Nie musisz ich lubić, żeby to było prawdą.

C jest zasadniczo językiem programowania systemów. Bolesne jest pisanie czegoś takiego, jak w naukach obliczeniowych. C++ jest lepszy, ponieważ jest bogatszy, ale krytycznie cierpi z powodu tego, że nie ma wielowymiarowych tablic jako typu pierwszej klasy (nie, to po prostu nie działa, ok?), A cała technika obliczeniowa opiera się krytycznie na wielowymiarowych tablicach . Brak jednego standardowego wielowymiarowego pakietu tablicowego dla C/C++ sprawia, że ​​pisanie zoptymalizowanych bibliotek dla tego języka jest bardzo trudne, a po zatwierdzeniu do jednego pakietu należy korzystać ze struktur danych w całym tekście. Python cierpi na ten sam problem i zrobi to, dopóki Numpy nie stanie się częścią jądra Pythona.

Fortran, ze względu na wszystkie swoje wady, jest jedynym językiem zaprojektowanym specjalnie do programowania naukowego. Umożliwia to operatorom macierzy dyskowych Pythona lub Matlaba i krojeniu, a to może ułatwić życie programistom. Nawet wtedy wielu programistów naukowych nie lubi fortranu; wolą zestawy narzędzi lub biblioteki dostępne w innych językach. I to jest w porządku.

I tylko odeprzeć następne pytanie - nie, nie musimy też wszyscy zgadzać się z redaktorami.

+0

"[C++] cierpi krytycznie z tego, że nie ma wielowymiarowych tablic jako typu pierwszej klasy". Ostatni fragment jest prawdziwy, ale jakie są tego konsekwencje? Ani 'std :: complex <>' (także typ biblioteki) i nikt nie narzeka na to. – MSalters

+2

@MSalters: Problem polega na tym, że w nietrywialnym projekcie, w którym możesz chcieć użyć garstki bibliotek zewnętrznych, będziesz musiał poradzić sobie z kilkoma wzajemnie niekompatybilnymi wielowymiarowymi klasami tablicowymi i przetasować między nimi dane w jakiś sposób . std :: complex, OTOH, znajduje się w standardowej bibliotece, więc świat + pies nie ma zamiaru na nowo wymyślać go przez cały czas. Z drugiej strony, jeśli potrzebujesz, powiedzmy, rzadkich tablic, Fortran ci nie pomoże, a ty masz ten sam problem; w takim przypadku C++ może być nawet lepszym wyborem ze względu na szablony i przeciążenie operatora, co sprawia, że ​​zdefiniowane przez użytkownika klasy tablic są łatwiejsze niż Fortran – janneb

+0

.. i teraz Fortran ma przeciążone i sparametryzowane przez operatora typy (nie szablony, ale ich główne użycie byłoby tutaj dla różnych rodzajów liczb rzeczywistych), więc może to również zrobić. Ale tak, zgadzam się, że rozrzedzone rzeczy są trudniejsze i widzisz to samo (np. Petsc). Absencja nawet gęstych matricies w C/C++ pojawia się także w innych rzeczach - w prawie każdym pytaniu MPI dla C na SO, które zajmuje się tablicami wielowymiarowymi, część odpowiedzi zawsze sprowadza się do pokazania programisty C, jak tworzyć ciągłe wiele tablic. To powinno być coś, co twój język programowania robi dla ciebie. –

Powiązane problemy