macroevolution: (anomalocaris)
[personal profile] macroevolution
Я всю жизнь программировал только на бейсике, на разных его версиях.  Так получилось. Когда писал кандидатскую, набралось очень много таблиц с данными (это были морфологические признаки морских ежей), и я задолбался обсчитывать их на калькуляторе. Поэтому быстренько освоил бейсик (тогда персональные компьютеры IBM только начали появляться, и к ним прилагался язык GW-Basic). Освоил - и сразу почувствовал себя человеком. С тех пор не переучивался, сейчас пишу все свои программки на VBA в MS Access. То есть в программировании я дилетант, но опытный. Программированием пользуюсь сейчас для имитационного моделирования эволюционных процессов в популяциях. Подумываю об одной новой модели, но понимаю, что на VBA она будет работать невыносимо медленно. Насколько я понимаю, программа, написанная почти на любом другом языке, компилируемом, будет работать в разы быстрее. Вопрос такой: какой из этих языков мне будет быстрее и проще всего освоить? Времени, сил и желания преодолевать трудности и вникать в программистские проблемы - не имеется. Мне бы этот язык просто скачать (можно купить, если не слишком дорого), освоить за пару-тройку дней - и вперед. Т.е. главное, чтобы он был максимально простым в освоении для того, кто знает бейсик, без всяких интеллектуальных "понтов", но работал хотя бы раз в 10 быстрее.

Date: 2015-01-11 04:50 pm (UTC)
From: [identity profile] natvalbr.livejournal.com
с производительностью? :) о-хо-хо...

знаете разницу между этими двумя строчками по производительности:
cout << "text" << std::endl;
cout << "text" << "\r\n";

Date: 2015-01-11 04:51 pm (UTC)
From: [identity profile] toshick.livejournal.com
Это пусть автор скажет, но я сомневаюсь.
Ну вот чисто ради смеха, запустил на VBA Excel такую задачу:

1) выделяем массив double(10000, 10000)
2) заполняем его случайными данными от 0 до 1
3) умножаем каждую ячейку на 9 соседних, с честной проверкой на края таблицы

4) крутим 2) и 3) 10 раз, чтобы оценить время на инициализацию массива

результаты (не очень чистые, т.к. я не снимал IE, торрент и прочую хрень):
однократный прогон ~ 83с,
10-кратный прогон ~ 827с.
Итого на инициализацию время почти не тратится, каждая итерация - полторы минуты.
Каждая итерация это, на минуточку, почти миллиард умножений с плавающей точкой на VB + заполнение массива на 100 млн. случайными числами + проверки и логика циклов.

У меня, конечно, не самая слабая машинка, но и не суперкомпьютер: i7 (860, 4 ядра), 2.8GH, 4GB, винты не SSD.

В общем, повторюсь, скорее всего надо просто исключить обращения к базе данных Access из итераций. Если же они там необходимы, то переход на C++ поможет, как мертвому припарки.

Date: 2015-01-11 04:52 pm (UTC)
From: [identity profile] natvalbr.livejournal.com
во-во, думаю, не собирается!

Date: 2015-01-11 04:53 pm (UTC)
From: [identity profile] agalakhov.livejournal.com
На C++ типичная ошибка - это написать пару malloc+free или new+delete. Это нормальная техника в Си, но недопустимо в языках, поддерживающих исключения. Потому что исключение перепрыгивает delete. Следует использовать unique_ptr или shared_ptr. И здесь есть еще отдельная пакость в использовании переменной после delete, потому что с большой вероятностью лежит она все еще в нашем адресном пространстве и даже может все еще иметь прошлое значение. Получается программа, которая ОБЫЧНО работает (ведь с вероятностью 99% переменная все еще имеет верное значение!), но время от времени жестоко глючит. И если программист не имеет представления об инструментах вроде Electric Fence, то из-за такого кода он рискует оказаться в глубокой заднице.

Другая типичная ошибка - забывать слово const и использовать string вместо const string&, а еще злоупотреблять присваиванием строк. Хотя это работает, это работает кошмарно медленно и жрет очень много памяти. В глубоком цикле такая ошибка может привести к высвоповыванию или даже к срабатыванию OOM killer, не говоря уж о том, что из-за этого жалкие несколько килобайт текста могут обрабатываться несколько минут.

На Java и других GC-языках тоже есть типичная ошибка - делать у объектов слишком большое время жизни. Из-за того, что объект не надо удалять, программист слабо следит за тем, в какой именно области видимости объект создан. В результате ссылка на объект может жить в сотни раз дольше, чем реально надо, и память забивается такими вот "вроде бы нужными" объектами, которые GC не удаляет, потому что формально они еще используются. Обычно это бывает, если программист ленится передавать переменную через параметры функции и потому делает переменную членом класса. Такая практика - вообще очень большое зло, но на языках без GC программист очень быстро получает по лбу граблями от деструктора этой переменной и перестает так делать, а на языках с GC можно писать так годами и не понимать, почему это плохо.

Date: 2015-01-11 04:53 pm (UTC)
From: [identity profile] provocateur-b.livejournal.com
Вы действительно ужасно крутой и у вас потрясающей процессор. Спасибо, что вы есть.

Date: 2015-01-11 04:56 pm (UTC)
From: [identity profile] agalakhov.livejournal.com
Кстати, для вычислительных алгоритмов над большими массивами языки с чистым GC (вроде java) имеют очень спорную пригодность именно из-за склонности GC освобождать память слишком поздно. Когда вычисления и так требуют гигабайты (а для решения уравнений, сводящихся к диагонализации матриц, это не редкость), дополнительный расход от опоздания GC часто становится фатальным и приводит к тому, что программа вообще не работает на данном железе. Именно поэтому программы для научных расчетов крайне редко пишутся на Java, чаще используются Fortran и Python, чуть реже C.

Date: 2015-01-11 04:56 pm (UTC)
From: [identity profile] psilogic.livejournal.com
конечно - flush буфера и без flush-а

Date: 2015-01-11 04:58 pm (UTC)
From: [identity profile] kaban-v-woke.livejournal.com
Matlab + Simulink
http://matlab.ru/products/simulink
Edited Date: 2015-01-11 05:03 pm (UTC)

Date: 2015-01-11 04:58 pm (UTC)
From: [identity profile] filosof-a.livejournal.com
Я посоветовал бы компилятор PowerBasic https://ru.wikipedia.org/wiki/PowerBASIC , если еще никто не предложил.
Не нужно переучиваться, все как в обычном Basic. Работает столь же быстро как паскаль или СИ. Проверялось на тестовых программах. Работает под DOS, а потому любая винда, как минимум до 7, ему не мешают и ничего не нужно инсталлировать.
Мой знакомый еще с начала 90-х как сел на этот язык тоже с моделированием и не хочет переучиваться. Его все устраивает.




Edited Date: 2015-01-11 04:59 pm (UTC)

Date: 2015-01-11 05:00 pm (UTC)
From: [identity profile] kallbasser.livejournal.com
>Кто советует делфи или джаву — у C#\VB.NET несколько преимуществ. Это и бесплатная среда разработки (та, которая express), и, кмк, легче начально осваивать.
Эээм, для Java есть как минимум две бесплатные среды (Eclipse, IDEA Community). И, например, IDEA как по мне намного умнее и приятнее VS. Плюсом к Java полноценная кроссплатформенность

Date: 2015-01-11 05:02 pm (UTC)
From: [identity profile] kaban-v-woke.livejournal.com
vb.net полностью ооп.
Ток не вижу смысла в ооп при имитацинном моделировании.

Date: 2015-01-11 05:04 pm (UTC)
From: [identity profile] lvqcl.livejournal.com
64-битные Винды не поддерживают ДОС программы, есличо.

Date: 2015-01-11 05:05 pm (UTC)
From: [identity profile] natvalbr.livejournal.com
ну вот :)
а много ли об этом кто знает?

Date: 2015-01-11 05:06 pm (UTC)
From: [identity profile] agalakhov.livejournal.com
Ошибку обычно делают не в вычислениях, а в выводе формы на экран (что есть почти в 100% всех программ), и ошибиться так можно даже в простейшей форме из двух кнопок.

Написанный на Delphi калькулятор как раз МОЖЕТ время от времени показывать, что 2+2 равно пяти, если сделана одна определенная, очень характерная именно для Delphi ошибка: объект уничтожен в неправильном месте (слишком рано). При этом в памяти обычно все еще сохраняется "правильное" содержимое объекта, и программа "продолжает работать". Но иногда, довольно редко, везение кончается, и программа выдает неверный ответ.

Речь именно о том, что на Delphi программа с явной ошибкой может ЧУДОМ работать правильно в 99% случаев. На большинстве других языков программа с такой ошибкой не работала бы совсем, и ошибка была бы сразу найдена.

Причина: в Delphi "улучшили" Pascal. В оригинальном паскале была четкая синтаксическая разница между объектом и указателем. В Delphi "для удобства" указатели на объекты замаскировали: когда программист создает объект, он на самом деле получает указатель, но этот указатель ведет себя как объект (обращения к полям делаются через точку, а не через крыж-точку, как в Паскале, и так далее). Из-за этого программист часто делает операцию вроде копирования с указателем, думая, что работает с объектом. И часто удаляет единственный экземпляр объекта, думая, что удаляет ненужную копию. Но при этом указатели продолжают оставаться доступными. Обратившись по ним, часто можно получить вполне правильный результат, как если бы объект все еще существовал.

Date: 2015-01-11 05:07 pm (UTC)
From: [identity profile] kaban-v-woke.livejournal.com
Больше всё-таки Java. Ну и от дельфи кое-то перепало.

Date: 2015-01-11 05:09 pm (UTC)
From: [identity profile] psilogic.livejournal.com
встречный вопрос - а много ли еще таких наколок?

а в других языках? ;)

Date: 2015-01-11 05:09 pm (UTC)
From: [identity profile] guga50.livejournal.com
в том вся и соль что знакомый УЖЕ сел в НАЧАЛЕ 90х.
На кой болт автору учиться устаревшей байде?
Тем более сейчас в дневник к автору заглянул... с таким интеллектом ему ООП ухватить - на раз-два.
так что С#

Date: 2015-01-11 05:11 pm (UTC)
From: [identity profile] orastosk.livejournal.com
stackoverflow.com

Date: 2015-01-11 05:12 pm (UTC)
From: [identity profile] filosof-a.livejournal.com
Может быть. А что эмулятора виртуальной DOS машины там нет?

Date: 2015-01-11 05:15 pm (UTC)
From: [identity profile] filosof-a.livejournal.com
Я сколько убеждал в том же самом своего знакомого, он не в какую не захотел переходить на СИ. Потому что надо делать лишние усилия. Все же идеология программирования отличается.

Date: 2015-01-11 05:15 pm (UTC)
From: [identity profile] lordn.livejournal.com
матлаб или маткад

Date: 2015-01-11 05:16 pm (UTC)
From: [identity profile] kaban-v-woke.livejournal.com
В барсике компилятор наскока я помню, а не интерпретатор)

Date: 2015-01-11 05:17 pm (UTC)
From: [identity profile] techwork.livejournal.com
вам дали ссылку на ресурс на котором можно сравнить любой язык , данна ссылка выпала в гугле первой, но ничего не мешает выбрать ЛЮБОЕ сравненние. разжевывать вам это - это признавать что вы действительно дебил не умеющий пользоваться интернетом. а вы просто тупой троль

Date: 2015-01-11 05:18 pm (UTC)
From: [identity profile] http://users.livejournal.com/__const__/
Работает столь же быстро как паскаль или СИ
Если учесть, что при работе с массивами С почти на порядок быстрее Паскаля…

Date: 2015-01-11 05:18 pm (UTC)
From: [identity profile] pssshik.livejournal.com
Ну память нынче очень дешевая - это не проблема (смотрю на жаба веб сервер с 45 гб выделенной под него памяти). Жаба просто не приспособлена для научных расчетов - ну не удобно создавать самому всю инфраструктуру, ввод и вывод - в жабе нет по умолчанию даже комплексных векторов и матриц, библиотеки, которые с ними работают - какие-то дикие. Еще минус - сверхжесткая типизация: описывать каждую финтифлюшку как отдельный класс, делать дерево наследования, чтобы использовать один метод для разных классов - та еще забава.

Таким образом есть страшный и ужасный фортран - это набор библиотек + привычка науч сотрудников, корявый (личное оценочное суждение) питон - как простенький язык с низкими требованиями к освоению, и спец пакеты - если человек 20 лет пользовался математикой или матлабом, пересесть на что-то другое ему будет очень сложно.

January 2019

S M T W T F S
  12345
6789101112
1314 1516171819
20212223242526
2728293031  

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 8th, 2026 03:49 pm
Powered by Dreamwidth Studios