macroevolution: (anomalocaris)
macroevolution ([personal profile] macroevolution) wrote2015-01-11 02:41 pm

Посоветуйте язык программирования

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

[identity profile] shilliennv.livejournal.com 2015-01-11 04:43 pm (UTC)(link)
Опять же, все зависит от сложности вычислений. Вы же не будете утверждать, что написанный на Delphi калькулятор будет временами показывать, что 2+2 равно пяти? Поэтому я и уточнила в первом комментарии, что для более конкретных советов нужно иметь представление об уровне задачи. Не стоит усложнять простые вещи.

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

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

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

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

[identity profile] shilliennv.livejournal.com 2015-01-11 05:18 pm (UTC)(link)
Дело как раз в том, что необязательно забираться в такие дебри для решения указанных автором задач, если уж на VBA все это было реализовано и работало верно.

[identity profile] agalakhov.livejournal.com 2015-01-11 05:22 pm (UTC)(link)
Чтобы не забираться в такие дебри, надо не пользоваться формами на Delphi. Пакость как раз в том, что тема очень сложная, а требуется уже в первые дни. На Delphi нет простого способа писать без объектов, а работа с объектами в императивных языках семейства Паскаль-Си - это сложно.

[identity profile] lanrusa.livejournal.com 2015-01-11 05:59 pm (UTC)(link)
Написал кучу вычислительных программ, не использующих объекты. Не нашел ничего сложнго...

[identity profile] agalakhov.livejournal.com 2015-01-11 06:54 pm (UTC)(link)
Ну то есть не создавая в этих программах ни одной формы, ни одной кнопки, ни одного графического элемента, да?

Или все-таки объектов в вашей программе куча, просто их за вас написала IDE, а вы не следите за тем, что там написано и как реально работает?

[identity profile] lanrusa.livejournal.com 2015-01-11 07:04 pm (UTC)(link)
>> Ну то есть не создавая в этих программах ни одной формы, ни одной кнопки, ни одного графического элемента, да?

Конечно. Они были консольные.

[identity profile] agalakhov.livejournal.com 2015-01-11 10:00 pm (UTC)(link)
Ну тогда и брать лучше не Delphi, а виртовский паскаль без расширений, с незамутненным синтаксисом. Тут правда две проблемы возникает: с инструментарием - с надежными и переносимыми компиляторами паскаля сейчас все плохо, не нужны они никому, и с floating point - соответствие стандарту IEEE не гарантируется нигде, поэтому такие хорошие вещи, как алгоритм суммирования Кэхэна, могут не работать, и скорее всего и не будут работать. (Алгоритм Кэхэна накладывает очень жесткие ограничения на оптимизатор компилятора).

Если уж писать на семействе алгола-паскаля, то лучше сразу брать Ada - синтаксис почти не отличается от синтаксиса Паскаля, изучать так же просто, инструментарий великолепный (военная надежность!), правильность работы гарантируется, язык стандартизирован и потому переносим (нет привязки к версии компилятора). Формально верифицировать код легко. К тому же есть магическая поддержка многопоточности - есть параллельный вариант for, можно заменой одного слова превратить цикл в параллельный и считать на всех ядрах сразу. Если выбирать между изучением Delphi и изучением Ada, тогда однозначно Ada. Иное дело, что сам выбор семейства алгола-паскаля спорный, но это уже совсем другая история.

[identity profile] yva.livejournal.com 2015-01-27 10:54 pm (UTC)(link)
Пардон, но почти всё написанное - полная ерунда.