Почитайте (сам исходный пост не айс, а вот комменты осилить очень рекомендую), очень здорово видна разница в образе мышления программистов и «ученых»:
https://habrahabr.ru/post/349624/
В комментах, правда, выясняется, что «ученый» тоже в говне моченый, но и «оппоненты» отжигают не по-детски.
PS И даже не знаю, какой из этих двух вариантов омерзительнее:
C и С++ изучают только программисты. Естественнонаучники (за очень редким исключением) учат программирование на Делфи, а потом всякие спецпакеты. Максимум пролог будет. Там не учат С98. Там не учат что памятью в принципе можно управлять. Тем более — что нужно. Учат так: вы придумываете правильный алгоритм, компьютер его выполняет. Учат как переписать алгоритм из головы на паскаль.
https://habrahabr.ru/post/349624/#comment_10682588
или
Я не знаю где вас учили, но на моём естественно-научном факультете сначала был курс C# (2 года). А теперь вообще идёт курс Java EE c Хадупами и всем фаршем.
«Он плавно доходит до координаты 6524, а затем вдруг его кусает бешеная блоха. Он скачет вверх и вниз абсолютно случайно и заполняет всё оставшееся полупространство справа кромешной тьмой. »
В этом месте я вздрогнул от знакомой ошибки, которую сам ловил костылями.
Только фортран! Остальное — пижонство.
И это, Шура, ну прикрутите уже защиту от сперов, что-ли…
Ну это в целом несколько осмысленнее, чем «учат программирование на Делфи, а потом всякие спецпакеты». И уж тем более куда полезнее для «естественнонаучников», чем «курс Java EE c Хадупами и всем фаршем».
пункт первый: фортран был популярен даже в 90х, когда были более другие ЯП, во многом потому, что под него было огромное число расчетных библиотек на все случаи жизни, и что немаловажно они за годы были идеально отлажены. Т.е. там крайне невысокая вероятность того, как в хабровской статье аффтор пишет: подсунули пнг с тремя каналами оно все и упало.
пункт второй: учить надо программированию, а не языку.
Меня за период от средней школы до выпуска из ВУЗа учили бейску, паскалю и фортрану, а це, макро-11 и к580вм80, уж как-то сам освоил. Еще было крайне поверхностное знакомство с алмир на ЭВМ Мир-1 с видом на черное море, язык академика Ершова — не помню был или нет, вроде как в лекциях что-то было абстрактно-алгоритмическое.
Но насколько я сейчас вспоминаю, учили не столько языку, сколько алгоритмам. В т.ч. и как не про#бать результат в условиях ограниченной разрядности, что бы не получить «Он скачет вверх и вниз абсолютно случайно».
И когда сейчас меня вторую неделю агитируют перейти на питон, я задорно смеюсь и предлагаю привести более убедительные аргументы чем «это стильно, модно, молодежно!». :)
Насчет пункта первого — книжку Numerical Recipes на Си++ окончательно переписали только к середине 2000-х, а что касается численных методов вообще — то вроде бы некоторые конструкции в фортране компилируются в машинный код эффективнее, чем аналоги на Си с плюсами или без.
А про питон — некоторые модные молодежные штуки, типа нейросеток и прочего machine learning, сейчас принято делать именно на нем (с некоторыми плясками с бубном, чтобы включить CUDA, без нее там все печально).
я не вижу причин, по которым конструкции фортрана должны компилироваться в более эффективный код, с учетом того, что Си, по сути, это немного приукрашенный ассемблер.
А что касается питона какие у него в принципе преимуществ, за исключением упоротого синтаксиса?
Про нейросети — опять же все упирается в библиотеки. Это как аргументация за питон: ну мы используем джанго. Так бля, не используйте джанго! Используйте джумлу и вордпресс! :)
https://stackoverflow.com/questions/146159/is-fortran-easier-to-optimize-than-c-for-heavy-calculations — тут парочку примеров приводят; прежде всего дело в том, что в фортране реализованы полноценные массивы, а не сишные указатели; с точки зрения машины это почти одно и то же, но массивы — это еще и подсказка компилятору, что здесь можно заоптимизировать.
Там слишком многа букф иностранных, я после суток без сна их не асиливаю. :)
Но суть понятна, хотя хотелось бы заценить ассемблерный результат компиляции логически одинакового кода с двух разных языков, причем в тот ассемблер который я разумею, а разумею я макро-11. :)
Так он логически не одинаков :) В си компилятор не может знать, что при вызове вот такой функции:
void transform (float *output, float const *input, float const *matrix, int *n)
output, input, matrix и n не пересекаются — поэтому не может заоптимизировать вложенный цикл (теоретически запись в output может испортить matrix). Фортрановские же массивы по определению пересекаться не могут.
логически вы умножаете матрицу на матрицу. Но циклов я таки не вижу. :)
for (i=0; i<*n; i++) - не цикл, да? :) Вот на самом деле пример очень хорош - "программист" бы действительно свел все к умножению матриц, "забыв" о том, что одна из матриц совсем маленькая - 4 элемента, и ее сразу можно загрузить в регистры.