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

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

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

[identity profile] 2born.livejournal.com 2015-01-11 02:57 pm (UTC)(link)
И Octave тоже бесплатный? А почему он тогда не столь популярен??

[identity profile] igor sidorov (from livejournal.com) 2015-01-11 02:57 pm (UTC)(link)
У пайтона есть много неочевидных особенностей. Можно попробовать Ruby. Также, если нужны именно расчёты, то хорошим выбором будет Matlab.

[identity profile] lvqcl.livejournal.com 2015-01-11 02:57 pm (UTC)(link)
>Если говорить о VBA - речь идет не о "интерпретаторе", а о "гибриде", использующем прекомпиляцию в p-код при запуске программы и потом работающим с компилированным кодом в процессе исполнения.

... и потом интерпретирующим P-code в процессе исполнения.

>простой код верхнего уровня служит как набор инструкций для вызова библиотек

не факт, что для "имитационного моделирования эволюционных процессов" используются какие-то библиотеки.
Edited 2015-01-11 14:57 (UTC)

[identity profile] agalakhov.livejournal.com 2015-01-11 02:58 pm (UTC)(link)
На математических вычислениях Python быстрее фортрана - при использовании библиотеки NumPy.

Сам по себе интерпретатор питона работает медленно, но это играет роль только на вводе-выводе данных. Все числовые операции делаются в NumPy и потому делаются быстро. Писать такие операции без NumPy гораздо неудобнее и сложнее. Кто так делает, тот ССЗБ.

[identity profile] vmenshov.livejournal.com 2015-01-11 02:59 pm (UTC)(link)
Дисковый кэш живет свой жизнью, и гарантий, что там есть нужные данные никто не дает. Кроме того, в винде работа дискового кэша регулируется функциями win api. Стандартные процедуры аксеса и могут его вообще отключить при чтении своих данных.

В общем, не очень я бы на этот дисковый кэш рассчитывал. Да и к тому же в случае кэш-попадания затраты на блокировки дисковой системы никуда не денутся

И это все только в случае с чтением.

Если же начинается запись, то все, привет.
Edited 2015-01-11 15:02 (UTC)

[identity profile] dmzlj.livejournal.com 2015-01-11 02:59 pm (UTC)(link)
Сложные большие вещи на простых тупых языках делать тяжело.
Edited 2015-01-11 15:07 (UTC)

[identity profile] drag-drop.livejournal.com 2015-01-11 03:01 pm (UTC)(link)
ну я как бы и хотел сказать что когда язык позволяет такую свободу не есть хорошо по крайней мере для начинающих...

[identity profile] pssshik.livejournal.com 2015-01-11 03:03 pm (UTC)(link)
Ну вот а у меня противоположный опыт. да и скомпилировать паскаль в ком без пляски с бубном невозможно, так как он стдлиб с собой таскает по умолчанию и в 60кб кома не влезает.

[identity profile] gorrah.livejournal.com 2015-01-11 03:05 pm (UTC)(link)
Поддержу, пожалуй.

[identity profile] shilliennv.livejournal.com 2015-01-11 03:05 pm (UTC)(link)
Питон у меня был шестым языком, не считая всяких встроенных скриптовых языков типа Action Script, и он мне дался очень тяжело. Так что тут я с вами не соглашусь ) Автору поста вряд ли нужно писать сложные программы с учетом расхода памяти и потоков, как я поняла, речь идет о несложных с точки зрения программирования, но ресурсоемких при выполнении расчетах, так что вряд ли то, о чем вы пишете, будет играть существенную роль. Проще говоря, даже написаная "неправильно" с вашей точки зрения программа будет вполне справляться со своей задачей ) А такую "неправильную" программу в Delphi написать будет просто и быстро - какова и была поставленная задача.

[identity profile] pssshik.livejournal.com 2015-01-11 03:06 pm (UTC)(link)
вопрос на засыпку: если вы математику считаете на графической карте - важна компилируемость/интерпретируемость языка или нет? вопрос на засыпку номер два - где вы нонче видели интерпретируемый язык без прекомпиляции? вопрос номер три - квейк на жабаскрипте видели? ну и как, вопросы к скорости остались?

[identity profile] lvqcl.livejournal.com 2015-01-11 03:08 pm (UTC)(link)
Говорят, заметно медленнее, чем Matlab. И багов больше.

[identity profile] pssshik.livejournal.com 2015-01-11 03:08 pm (UTC)(link)
жаба намного проще и си и си++ так как управление памятью отдано гц. А какие-такие фокусы из си в си++ вызывают ошибки?

[identity profile] guga50.livejournal.com 2015-01-11 03:08 pm (UTC)(link)
свобода он тем и хороша что можно это не использовать, чё тут не понятного то?
хошь абстрактные классы городи, полиморфизм используй. не хошь морочиться - используй методы как функции внутри класса и ОО язык превращается в совершенно функциональный по сути... в чём проблема то?
большинство листингов которые я встречаю в инете даже на языках которые жёстко ОО например Джава, написаны так, что ясно, что автор проги особо в ОО не вникает и использовать эти возможности не хочет. Ну и флаг в руки... чё вытрёпываться если в тягость.

[identity profile] mifromru.livejournal.com 2015-01-11 03:10 pm (UTC)(link)
:D

>понять что у переменной адрес в памяти есть?

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

>Тем более его никто не заставляет ими пользоваться.
Как и сам язык :)

[identity profile] pssshik.livejournal.com 2015-01-11 03:11 pm (UTC)(link)
для научных расчетов - нахрен не нужна ява. свержесткая типизированность, легко вылететь по производительности из-за неправильного использования классов, в общем легко закопаться.

[identity profile] 2born.livejournal.com 2015-01-11 03:11 pm (UTC)(link)
Спасибо!

[identity profile] toshick.livejournal.com 2015-01-11 03:12 pm (UTC)(link)
1) поскольку Вы не делаете тиражируемую программу, быстродействие для Вас на самом деле менее важно, чем скорость освоения, написания и переписывания. Т.е. если Ваша программа будет работать сутки, это все равно эффективнее, чем если Вы будете месяц учиться и напишете программу, которая отработает за 1 минуту.

2) основные потери времени в VBA Excel или Access происходят не из-за неэффективности интерпретатора, а из-за неэффективного хранения данных. Попробуйте сначала освоить работу с данными в памяти, а не в ячейках XL или таблицах Access, хотя бы в классических массивах, и это очень сильно ускорит работу программы.

3) Если Вам надо работать с большими объемами данных, которые Вы храните в базе Access, то Вам совершенно однозначно не надо ни на что переходить. Затраты на работу с базой данных все равно таковы, что вся экономия на их фоне потеряется. Попробуйте в первую очередь оптимизировать именно работу с данными, ни в коем случае не храните промежуточные результаты в таблицах базы данных, если, конечно, они не нужны для отладки.

[identity profile] drag-drop.livejournal.com 2015-01-11 03:12 pm (UTC)(link)
залез на лурку там про спор сишников с паскальщиками классно написано
«
А хохлы уси на Си, а москали на Паскале.
»
— Фольклор
«
Всех, кого ты не спроси,
Программируют на Си.
Нынче встретишь ты едва ли
Тех, кто пишет на Паскале
»
— Фольклор
Pascal (Паскаль, Паскакаль, Пасквиль, Поцкаль, Пасцал, Пашка, В-Пасть-Кал, Турба (устар.), Турбопаскаль (устар.), Труба (устар.), Делфя) — язык программирования, созданный в 70-х годах прошлого века известным Никлаусом Виртом, чтобы невозбранно дисциплинировать школьников и ступидентов, но позже ВНЕЗАПНО обнаружилось, что сей учебный язык может быть пригоден для написания реальных программ. Когда-то имел весьма солидную популярность, но сейчас ее подрастерял, сохранившись в основном в виде Delphi. Язык невозбранно привлекает возможностью писать почти как на обычном английском языке, а не ломать голову и пальцы о ++i + ++i, эзотерику истинности выражений (1/3 == 0) и (-1 > (unsigned int) 1) и прочих извращенных приёмов, принятых в C-подобных языках.

[identity profile] pssshik.livejournal.com 2015-01-11 03:13 pm (UTC)(link)
луа - это весело, но не для расчетов же. "для имитационного моделирования эволюционных процессов в популяциях" - на луа - не извращение ли?

[identity profile] guga50.livejournal.com 2015-01-11 03:20 pm (UTC)(link)
это прикол такой есть: :)))

начальная школа

10 PRINT "HELLO WORLD"
20 END

средняя школа

(defun hello
(print
(cons 'Hello (list 'World))))

старшие классы

void main(void)
{
char *message[] = {"Hello ", "World"};
int i;

for(i = 0; i < 2; ++i)
printf("%s", message[i]);
printf("\n");
}

молодой специалист

#include
[Error: Irreparable invalid markup ('<iostream.h>') in entry. Owner must fix manually. Raw contents below.]

это прикол такой есть: :)))

<b>начальная школа</b>

10 PRINT "HELLO WORLD"
20 END

<b>средняя школа</b>

(defun hello
(print
(cons 'Hello (list 'World))))

<b>старшие классы</b>

void main(void)
{
char *message[] = {"Hello ", "World"};
int i;

for(i = 0; i < 2; ++i)
printf("%s", message[i]);
printf("\n");
}

<b>молодой специалист</b>

#include <iostream.h>
#include <string.h>

class string
{
private:
int size;
char *ptr;

public:
string() : size(0), ptr(new char('\0')) {}

string(const string &s) : size( s.size)
{
ptr = new char[size + 1];
strcpy(ptr, s.ptr);
}

~string()
{
delete [] ptr;
}

friend ostream &operator <<(ostream &, const string &);
string &operator=(const char *);
};

ostream &operator<<(ostream &stream, const string &s)
{
return(stream << s.ptr );
}

string &string::operator=(const char *chrs)
{
if (this != &chrs)
{
delete [] ptr;
size = strlen(chrs);
ptr = new char[size + 1];
strcpy(ptr, chrs);
}
return(*this);
}

int main()
{
string str;

str = "Hello World";
cout << str << endl;

return(0);
}
Edited 2015-01-11 15:24 (UTC)

[identity profile] guga50.livejournal.com 2015-01-11 03:20 pm (UTC)(link)
уже тёртый товарищ :))

[
uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
]

library LHello
{
// bring in the master library
importlib("actimp.tlb");
importlib("actexp.tlb");

// bring in my interfaces
#include "pshlo.idl"

[
uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
]
cotype THello
{
interface IHello;
interface IPersistFile;
};
};

[
exe,
uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
]
module CHelloLib
{

// some code related header files
importheader(< windows.h>);
importheader(< ole2.h>);
importheader(< except.hxx>);
importheader(" pshlo.h");
importheader(" shlo.hxx");
importheader(" mycls.hxx");

// needed typelibs
importlib("actimp.tlb");
importlib(" actexp.tlb");
importlib("thlo.tlb");

[
uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
aggregatable
]
coclass CHello
{
cotype llo;
};
};

#include "ipfix.hxx"

extern HANDLE hEvent;

class CHello : public CHelloBase
{
public:
IPFIX(CLSID_CHello);

CHello(IUnknown *pUnk);
~CHello();

HRESULT __stdcall PrintSz(LPWSTR pwszString);

private:
static int cObjRef;
};

#include < windows.h >
#include < ole2.h >
#include < stdio.h>
#include < stdlib.h>
#include " thlo.h"
#include " pshlo.h"
#include " shlo.hxx "
#include " mycls.hxx"

int CHello::cObjRef = 0;

CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)
{
cObjRef++;
return;
}

HRESULT __stdcall CHello::PrintSz(LPWSTR pwszString)
{
printf("%ws\n", pwszString);
return(ResultFromScode(S_OK));
}

CHello::~CHello(void)
{

// when the object count goes to zero, stop the server
cObjRef--;
if( cObjRef == 0 )
PulseEvent(hEvent);

return;
}

#include
[Error: Irreparable invalid markup ('<windows.h>') in entry. Owner must fix manually. Raw contents below.]

<b>уже тёртый товарищ :))</b>

[
uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820)
]

library LHello
{
// bring in the master library
importlib("actimp.tlb");
importlib("actexp.tlb");

// bring in my interfaces
#include "pshlo.idl"

[
uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820)
]
cotype THello
{
interface IHello;
interface IPersistFile;
};
};

[
exe,
uuid(2573F890-CFEE-101A-9A9F-00AA00342820)
]
module CHelloLib
{

// some code related header files
importheader(< windows.h>);
importheader(< ole2.h>);
importheader(< except.hxx>);
importheader(" pshlo.h");
importheader(" shlo.hxx");
importheader(" mycls.hxx");

// needed typelibs
importlib("actimp.tlb");
importlib(" actexp.tlb");
importlib("thlo.tlb");

[
uuid(2573F891-CFEE-101A-9A9F-00AA00342820),
aggregatable
]
coclass CHello
{
cotype llo;
};
};

#include "ipfix.hxx"

extern HANDLE hEvent;

class CHello : public CHelloBase
{
public:
IPFIX(CLSID_CHello);

CHello(IUnknown *pUnk);
~CHello();

HRESULT __stdcall PrintSz(LPWSTR pwszString);

private:
static int cObjRef;
};

#include < windows.h >
#include < ole2.h >
#include < stdio.h>
#include < stdlib.h>
#include " thlo.h"
#include " pshlo.h"
#include " shlo.hxx "
#include " mycls.hxx"

int CHello::cObjRef = 0;

CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk)
{
cObjRef++;
return;
}

HRESULT __stdcall CHello::PrintSz(LPWSTR pwszString)
{
printf("%ws\n", pwszString);
return(ResultFromScode(S_OK));
}

CHello::~CHello(void)
{

// when the object count goes to zero, stop the server
cObjRef--;
if( cObjRef == 0 )
PulseEvent(hEvent);

return;
}

#include <windows.h>
#include < ole2.h>
#include "pshlo.h"
#include "shlo.hxx"
#include "mycls.hxx"

HANDLE hEvent;

int _cdecl main(
int argc,
char * argv[]
) {
ULONG ulRef;
DWORD dwRegistration;
CHelloCF *pCF = new CHelloCF();

hEvent = CreateEvent(NULL, FALSE, FALSE, LL);

// Initialize the OLE libraries
CoInitializeEx(NULL, COINIT_MULTITHREADED);

CoRegisterClassObject(CLSID_CHello, pCF, SCTX_LOCAL_SERVER,
REGCLS_MULTIPLEUSE, &dwRegistration);

// wait on an event to stop
WaitForSingleObject(hEvent, INFINITE);

// revoke and release the class object
CoRevokeClassObject(dwRegistration);
ulRef = pCF->Release();

// Tell OLE we are going away.


CoUninitialize();

return(0);
}

extern CLSID CLSID_CHello;
extern UUID LIBID_CHelloLib;

CLSID CLSID_CHello = { _/* 2573F891-CFEE-101A-9A9F-00AA00342820 */
0x2573F891,
0xCFEE,
0x101A,
{ 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
};

UUID LIBID_CHelloLib = { _/* 2573F890-CFEE-101A-9A9F-00AA00342820 */
0x2573F890,
0xCFEE,
0x101A,
{ 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
};

[identity profile] pssshik.livejournal.com 2015-01-11 03:21 pm (UTC)(link)
сначала выполнится i++, потом ++i, потом +, потом i-=
i++ - вернет i, i = i+1;
++i - вернет i+2, i = i+2
i-=: i+2 - (2i+2) = -i;

проверка - http://codepad.org/zDNXo3AL

[identity profile] maz-d.livejournal.com 2015-01-11 03:21 pm (UTC)(link)
Ну питон простой в освоении, он правда интерпретируемый, но компилировать тоже можно при желании =)

[identity profile] stalker-sid.livejournal.com 2015-01-11 03:22 pm (UTC)(link)
бейсик охуенен
а вообще не имеет значения
если есть определенный склад мышления, то любой язык - раз плюнуть

Page 8 of 27