Выбор языка программирования для научных работников

Обсуждение статей, опубликованных на сайте.
gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Выбор языка программирования для научных работников

Сообщение gaidar » 28.03.2007 (Ср) 19:32

Юдин С.Ю.
Выбор языка программирования для научных работников


http://www.vbstreets.ru/Articles/66475.aspx
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.03.2007 (Ср) 22:07

По ходу, автор не в курсе существования далеко не новой статьи MSDN, в которой объясняется, что оператор GOSUB, как злостно устаревший, не оптимизируется компилятором VB и потому работает, действитетельно, очень медленно...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 28.03.2007 (Ср) 23:15

GSerg
Автор, по всей видимости - инженер-механик, а не программист.

Достаточно интересный сайт (см. ссылки в конце статьи), хоть и достаточно неудобно спроектированный.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 29.03.2007 (Чт) 7:37

Грандиозный труд! Хотя конечно и тяжеловато изложено, но простим научному работнику это. Особливо порадовала куча ссылок.
Весь мир матрица, а мы в нем потоки байтов!

MARAVA
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 31.03.2007 (Сб) 18:43

Сообщение MARAVA » 31.03.2007 (Сб) 19:15

Автор не советует использовать .NET, хотя в таблице популярности приведенной в статье
самый популярный язык Java. Наверно все знают, что .NET это реакция известной корпорации на Java. И вообще говорить, что “не советую применять .NET” это все равно, что говорить при переходе с Qbasic на VB6 – “не советую использовать COM”. Если уж сравнивать VB6 и VB.NET надо сравнивать и COM c .NET, а операторы самих этих языков похожи. А для механиков хочу добавить, что скорость надо измерять не в секундах, а в тактах процессора на машинную команду. Естественно машинных команд в алгоритме для достижения какого либо научного результата будет больше в VB и С++, а в С и ассемблере меньше. Хотя непонятно зачем нужна скорость если задача расчетная - пусть считает хоть всю ночь (ведь скорость нужна для измерительных задач которые потом долго анализируют). Что касается графики все эти измерения вообще фигня так как многое зависит от видео карты, а в тексте автора ссылок на тесты с учетом видео карты я не нашел. И вообще раньше ученные брали логарифмическую линейку и химический карандаш, а сейчас всем нотебук подавай.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 31.03.2007 (Сб) 21:19

MARAVA, я попытался обнаружить смысл в сказанном тобой, но не преуспел.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 01.04.2007 (Вс) 0:21

GSerg +1, я тоже пытался, но тщетно.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

MARAVA
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 31.03.2007 (Сб) 18:43

Сообщение MARAVA » 01.04.2007 (Вс) 10:10

Вы не понимаете и я не понимаю и поэтому прошу пояснить:
1. Почему Microsoft отказывается Visual Basic 6.0 ?
Чем NET лучше COM (и почему в NET так много позаимствовано из Java)?
“Visual Basic NET, который, как Вы уже поняли, я не рекомендую для изучения научным работникам.”

2. Можно ли сказать про VB – “ программа, написанная на самом навороченном языке COM.”
“А я считаю, какая разница на каком языке написана программа, если она позволяет получить тот же результат, что и программа, написанная на самом навороченном языке программирования из семейства NET.”

3. В чем вообще суть NET если обучится VB6 так просто и так замечательно писать научные программы? И зачем в Microsoft решили все усложнить убрав очень простой VB6
и придумав “навороченный VB.NET”? Наверное усложняют жизнь научным работникам?
“Вот только наврядли эта многоплатформенность нужна конкретному научному работнику, который пишет программу не для массового ее тиражирования, а для личной работы с этой программой и на конкретном своем компьютере.”

PS
Прошу по возможности прокомментировать высказывания автора приведенные курсивом.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.04.2007 (Вс) 13:59

Я не автор, но всё же.

1. Из коммерческих соображений.

2. Да, можно. Достаточно много притянуто в COM конкретно для поддержки VB.

3. VB.net не сложнее VB6. Хотя и не проще.
Изображение

MARAVA
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 31.03.2007 (Сб) 18:43

Сообщение MARAVA » 01.04.2007 (Вс) 17:46

Уважаемый tyomitch я согласен с пунктом 3, а пункт 1 потряс меня своей философской глубиной, но я так и не понял почему VB6 так хорош для НУЧНОГО РАБОТНИКА? По тем же критериям, он очень хорош и для домохозяйки или скажем дантиста?
Кто он КОНКРЕТНЫЙ научный работник?
PS
Всем критериям приведенным в статье автора отвечает например Delphi (латынь и другие мертвые языки типа VB6), а так же программируемый калькулятор CITIZEN.
Читай первоисточник:
“Вот только наврядли эта многоплатформенность нужна конкретному научному работнику, который пишет программу не для массового ее тиражирования, а для личной работы с этой программой и на конкретном своем компьютере.”

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.04.2007 (Вс) 18:20

Я отвечал на формулированные вопросы. Я не научный работник, и я не представляю, что нужно от ЯП научному работнику, рассмотренному автором. Пусть хоть на Фортране пишут, как те научные работники, которых я знаю.
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 01.04.2007 (Вс) 22:49

Научный работник - это человек, который разбирается в естественных науках, и которому не надо по ходу деятельности знать все подробности программирования. Ему надо быстро, правильно и прозрачно запрограммировать что бы то ни было, не тратя время на долгую отладку, создание пользовательского интерфейса и чтение документации.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 01.04.2007 (Вс) 23:21

Прочитал статью, в ней есть несколько странностей, к примеру Таблица 1, поскольку я пишу на PowerBasic никак не могу понять:

PowerBASIC Windows Compiler 7.0 Windows XP sp2 10.752 5.14 (16.9/23 kb)*


* Данные получены для PowerBASIC v2.10 в операционной системе DOS Windows XP sp2


Что сие значит?

PowerBASIC 7.0- компилятор 32-битных приложений для Windows.
PowerBASIC v2.10 - компилятор 16-битных приложений для MS DOS.

Каким образом два этих компилятора связаны между собой?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.04.2007 (Пн) 12:50

Amed писал(а):Научный работник - это человек, который разбирается в естественных науках

Здорово всяких математиков, историков да социологов исключили из рассмотрения...
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 02.04.2007 (Пн) 14:23

Хотелось бы прокоменнтировать данную статью:

Есть конечно же и у других языков свои плюсы и Вы вправе выбрать любой из них для своих научных исследований, но я считаю, что на ближайшие лет 10 Visual Basic 6.0 в сочетание с Free Basic (или без него) это наилучший выбор для научных работников.


Считается, что для научных исследований в первую очередь важна скорость вычислений. Например моделирование ядерных взрывов, декодирование зашифрованных сообщений, моделирование автомобильных аварий, радиоастраномия, генетические алгоритмы.
Значит во главу угла ставится скорость вычислений, и максимально эффективное использование сопроцессора. Компилятор должен уметь оптимизировать математические вычисления, а также очень важно, уметь оптимизировать ветвления. Осуществлять балансировку и трамбовку логического дерева конструкций Select Case и IF-THEN.

Для примера сравним VB c PowerBASIC for Windows. Хотя бы потому, что в PB абсолютно средний, ничем не выдающийся оптимизирующий компилятор. Из оптимизаций в основном только сжатие цепочки переходов, удаление общих подвыражений, размножение констант, снижение мощности инструкций, удаление недостижимого кода и размещение переменных в регистрах.

Для начала тест эффективности мат. выражений, цикл из 1 млн. итераций: арифметические функции, SIN, COS, TAN, SQR, возведение в степень. Будем смотреть как VB и PB умеют использовать сопроцессор для вычислений с плавающей точкой.
Для верности запускаем примеры по 10 раз, а потом вычисляем среднее время.

Тестовая машина: двухядерный P-4, частота 3 Ггц, ОЗУ-512 мбайт, WindowsXP SP2.

Математический тест

Код: Выделить всё
Declare Function GetTickCount Lib "KERNEL32.DLL" () As Long
Const maxtest = 1000000

Sub Main()
Dim t As Double
Dim i As Long
Dim x As Double
Dim Z As Double
Dim u As Long
Dim TestString As String
t = GetTickCount - t
u = GetTickCount
x = 1
     For i = 1 To maxtest
       
'-----------------------------------------------
       t = Sin(i)
       t = t + i - 1
       t = t * i
       t = t / i
       
       t = Cos(i) / t + i
       t = x ^ i
       x = Sqr(t)
       Z = Tan(i)
       
'------------------------------------------------
       
     Next i
     u = GetTickCount - u
     MsgBox (u) & " milliseconds"
End Sub



Результаты теста:

PowerBasic 8.03 (эффективность математических вычислений)
--------------------------
641 мсек
641 мсек
657 мсек
640 мсек
641 мсек
656 мсек
641 мсек
640 мсек
641 мсек
640 мсек
------------------------
Среднее время вычислений: 643,8 мсек


Visual Basic 6.0 (эффективность математических вычислений)
---------------------------
859 мсек
859 мсек
844 мсек
859 мсек
860 мсек
844 мсек
843 мсек
844 мсек
843 мсек
844 мсек
------------------------
Среднее время вычислений: 849,9 мсек


Итог: PowerBasic производит математические операции на 25% быстрее, чем Visual Basic.
И это еще без размещения переменных в регистрах процессора, и прочих ручных оптимизаций.
Для вычислений продолжающихся много часов подряд, это даже не отрыв, это - пропасть!
Скорее всего, VB не умеет эффективно использовать сопроцессор.
Поэтому юзать VB для длительных, математических и научных расчетов нерационально.

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

Изображение


Select Case и IF-THEN тест


Код: Выделить всё
Declare Function GetTickCount Lib "KERNEL32.DLL" () As Long
Const maxtest = 1000000

Sub Main()

Dim t As Long
Dim i As Long
Dim x As Long
Dim u As Long
Dim TestString As String
t = GetTickCount - t
u = GetTickCount
x = 1
     For i = 1 To maxtest
        Select Case TestString
              Case "String1"
                     x = 2
              Case "String2"
                     x = 3
              Case "String3"
                     x = 4
              Case "String4"
                     x = 5
              Case "String5"
                     x = 6
              Case "String6"
                     x = 7
              Case "String7"
                     x = 1
           End Select

           If x = 1 Then TestString = "String1"
           If x = 2 Then TestString = "String2"
           If x = 3 Then TestString = "String3"
           If x = 4 Then TestString = "String4"
           If x = 5 Then TestString = "String5"
           If x = 6 Then TestString = "String6"
           If x = 7 Then TestString = "String7"
    Next i
     u = GetTickCount - u
     MsgBox (u) & " milliseconds"
End Sub   


Результаты теста:

PowerBasic 8.03 (эффективность конструкций Select Case и IF )
--------------------------

250 мсек
250 мсек
265 мсек
265 мсек
250 мсек
250 мсек
250 мсек
265 мсек
250 мсек
250 мсек
------------------------
Среднее время вычислений: 254,5 мсек



Visual Basic 6.0 (эффективность конструкций Select Case и IF )
---------------------------
500 мсек
500 мсек
500 мсек
500 мсек
500 мсек
500 мсек
500 мсек
500 мсек
500 мсек
500 мсек
------------------------
Среднее время вычислений: 500 мсек



Итог: PowerBASIC обходит логическое дерево Select Case на 50,9% быстрее чем VB.
Отрыв еще больше чем в первом случае. Это наглядно показывает, что такая архиважная
конструкция как Select Case реализована в VB очень небрежно и медленно.

Если подвести общий итог - использовать VB для сложных и длительных научных расчетов однозначно нельзя!
Т.к. он значительно проигрывает по скорости, даже такому среднему и посредственному компилятору как PB.
А о серьезной конкуренции для C++ и коммерческих компиляторах Fortan`а даже и говорить смешно...
Это не значит, что VB - плохой продукт. Просто у него другая область применения. Неправильно сравнивать кукурузник и реактивный истребитель по скорости полета.

В аттаче лежат исходники тестов.
Вложения
Tests.zip
(17.36 Кб) Скачиваний: 582

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 02.04.2007 (Пн) 14:26

исходники
Вложения
Tests.zip
(17.36 Кб) Скачиваний: 610

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.04.2007 (Пн) 20:19

Про погоню за скоростью научных расчётов см. мою тему "Обдумывающим выбор языка", прилепленную в основном форуме.
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 02.04.2007 (Пн) 20:23

tyomitch
Я должен перечислить все науки, известные человечеству?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.04.2007 (Пн) 20:29

Ты просто не должен был добавлять слово "естественных".
Изображение

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 02.04.2007 (Пн) 21:04

На рисунке слева неоптимизированное дереово, справа оптимизированное.
Картинка не грузиццо.
Лучший способ понять что-то самому — объяснить это другому.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 02.04.2007 (Пн) 21:10

tyomitch
Отлично, перефразирую.

Научный работник - это человек, который разбирается в естественных, неестественных и противоестественных науках, и которому не надо по ходу деятельности знать все подробности программирования...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 02.04.2007 (Пн) 21:23

Antonariy писал(а):Картинка не грузиццо.

Грузиццо.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.04.2007 (Пн) 21:30

"Научный работник - это человек, который разбирается в естественных, неестественных или противоестественных науках"

Сорри за угон топика, но всё же хочется корректной формулировки.

----
По делу: а что, действительно у социологов, историков, математиков и естественно-научников одинаковые требования к ЯП? :shock:
Или автор статьи так же, как и Amed сначала, считает всех научных работников собственными клонами?
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 13.01.2008 (Вс) 10:07

jangle
Если в VB6 включить все оптимизации, то в первом тесте он будет опережать на 20-25%. Второй тест меряет не скорость Select Case, а скорость сравнения и присваивания строк, причем, если учесть этот фрагмент из справки по PB:
Visual Basic and Visual C++ store data in OLE strings using 16-bits per character (Unicode format) while PowerBASIC stores them in 8-bit format. In PowerBASIC, strings may be contain either ASCII or ANSI string data.
, то меряет некорректно.
Если есть желание продолжить дискуссию, давай здесь не оффтопить, есть тема в холиварах:
http://bbs.vbstreets.ru/viewtopic.php?t=26344


Вернуться в Статьи

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList