Fortran

Mar. 25th, 2008 10:38 pm
madf: (Default)
Сьогодні відбулось моє друге знайомство з легендарним Фортраном. Перше було на першому курсі, коли сусід по кімнаті попрохав допомогти з лабораторною роботою. Тоді я лише взяв чужу програму (жах!) і трошки змінив її. Ну ще іноді читав програмні тексти у книжках та статтях. Але читати й розуміти не складно. Писати - набагато складніше. В принципі, мого досвіду вистачило, щоб засвоїти базовий синтаксис Фортрану за дві години. Тож, поверхнево, я вже з ним знайомий :)
Особливих складностей я не помітив, але й переваг - також не знайшов. Багато пишуть про те, що Фортран дуже зручний для "математичних" програм. Не знаю, я не помітив у ньому якихось "наворочених" математичних засобів. Можливо, справа в тому, що він раніше був "академічною" мовою програмування? Себто, широко викладався у ВНЗ? Зараз багато пишуть про зв'язку Fortran-MPI (майже всі посилання у гуглі), але MPI так само добре підтримується і в C (а значить - і в C++!). І написати програму для пошуку коренів СЛАР ("СЛАУ" російською) мені так-же просто і на С і на С++. Подивимось. Можливо, з часом, я побачу якісь переваги...
Linux як завжди порадував мене наявністю фронт-енду GCC для Фортрану :) При чому раніше я знав лише про f77 з підтримкою стандарту Fortran-77, а сьогодні узнав, що зараз замість f77 використовується gfortran, що підтримує, у тому числі, і більш сучасний Fortran-90. Vim порадував підсвічуванням синтаксису "із коробки". А що найцікавіше - я написав програму без жодної синтаксичної помилки! І це - через 2 години після знайомства з мовою!
Ото таке...
Попереду, якщо все буде добре, будуть дуже цікаві новини. :)

codecvt

Feb. 24th, 2008 01:56 pm
madf: (Default)
Итак, встала тривиальная задача: преобразовать строку из многобайтной в "широкую" и обратно.
madf: (Default)
Итак, std::wstring нужен только для корректного разбиения строки в многобайтной кодировке на символы. Для вывода таких строк не подходят стандартные потоки. Но в пространстве имен std определены и потоки для работы с "широкими" строками, например, std::wcout.
Вчера наткнулся на 2 особенности работы этих потоков.
madf: (Default)
Решил изредка постить про некоторые злобные хаки, которые приходится выполнять в процессе работы. Вот парочка.

Проект использует библиотеку IBPP. Проект поддерживает компиляторы от gcc-2.95 до 4-й ветки. gcc-2.95 не совсем полно поддерживает стандарт С++ версии 90-кудрявого года. В частности, у него отсутствуетшаблонный класс numeric_limits, который используется в библиотеке ibpp-2.5.3.1. Т.к. разработчики рекомендуют включать код библиотеки в проект - делаем маленький патчик, который возвращает нас к limits.h. Уродство, а что делать?

Этот-же проект вызывает ICE (Internal Compiler Error) при сборке с gcc 4-й ветки на x86_64. ICE на совершенно ровном месте. Путем последовательного коментирования кода приходим к выводу, что ICE возникает при присваивании полю структуры значения переменной которая мало того что extern, так еще и const volatile time_t! (К стати, в других местах кода присваивание проходит успешно). Что делаем? Т.к. бага проявляется только при включенной оптимизации, а переменная всегда кроме режима отладки равна time(NULL) добавляем пару директив препроцессора (при отладке используем переменную, при релизе - time(NULL)) и 1 пользовательский ворнинг: # warning "TODO: gcc v. 4.x generate ICE on x86_64"

Profile

madf: (Default)
madf

April 2018

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 17th, 2025 08:37 am
Powered by Dreamwidth Studios