4apa весь мир использует эти "извращения" и не жалуется. а вам чем-то не нравится. меня наоборот добивает когда вместо ++x; меня язык _вынуждает_ писать что-то типа x = x+1; но вам, видимо, так нравится? а если по сабжу -- тема если не перешла в холивар, то на след. странице точно перейдет. в 2х абзацах кое-кто умудрился привести веские причины того, что С/С++ - это гуан*, и лучше юзать Oberon. воистину, сенсей!!! 4apa, расскажите нам о "лучших чертах паскаля"? спасибо.
1. К сожалению, Вы правы, мировая программная индустрия пока жестко привязана (кстати, кем ?) к ненадежным языкам типа С-С++. И для этого видимо есть серьезные причины (экономические+ идеологические!), не лежащие пока на поверхности... Кстати, дедушка Вирт весьма ругается на эту самую софтверную индустрию, типа того, что она готовит для себя(в ВУЗах) не специалистов-инженеров, а каких-то идиотов Типа того, что выпускник обязан знать современные ЯВУ в индустрии, но он не может ясно и четко решать инжененрные задачи (проектирование надежного и дешевого софта). Причем именно из-за тяжкого наследия языков 60-х годов типа С-С++. Это мнение Вирта, если хотите, поспорьте с ним. Ссылки смотрите здесь: http://www.inr.ac.ru/~info21/texts/2002-06-Aarhus/ru.htm (очень сильная статья ) http://www.inr.ac.ru/~info21/texts/2005-10-Expert/final.pdf http://www.inr.ac.ru/~info21/ 2. Я даже и не думаю спорить с Сишниками, ибо глупо это все. Они сами дружно перейдут на современные технологии разработки надежного софта, как только увидят сколько их личного(!!) времени экономит программирование на защищенных языках типа Oberon/Pascal. 3. Я бы с удовольствием расписал преимущества Пасцаля, но у меня дико не хватает свободного времени. Лучше поискать в гугле на тему "Преимущества Паскаля ...", Вам хватит ссылок чтобы учитаться... )) У меня мелькнула мысль сделать для Васма анализ сильных/слабых сторон среди защищенных языков разработки: Oberon/ Pascal/ Эль-76 (это система разработки российской многопроцессорной супер-ЭВМ Эльбрус-2-3). Пока дело стоит за лит-рой (у меня книжка по Эльбрусам осталась в другом городе)+ нет опять же freetime. Да и самому с Обероном надо еще подработать, там доков очень много...
4apa, да чего там, переходите сразу на бейсик, на эту квинтэссенцию мега-надежности. зачем вам такая сложность как паскаль? во всем мире, опять же повторюсь, _почему-то_ почет и хвала именно С/С++ программистам, а вам они не угодили чем-то. есть даже внегласное правило, что типа если программист не владеет C/C++, то это не профи программер и об этом, опять же, все знают, хоть и не сильно трепятся по этому поводу) ну, вы замУтите я так думаю свою касту п0скаль-программеров, и начнете тем самым новый виток в истории программинга. а я счас за чашечкой коффе сбегаю и буду наблюдать... long life to Nicklaus Virt!
Не верю. Щас сижу пишу прогу по тестированию файлов. Пишу на си, так как на паскале времени потрачено будет больше. Если ты так хорошо знаешь паскаль, переведи на него этот пример! Код (Text): int main(int argc, char *argv[]) { char *fname; fname = argv[1]; int type; struct stat st; if (stat (fname, &st)<0){ printf ("%s - No such file\n",fname); }else{ printf ("Checking for %s......[ OK ]\n",fname); printf ("Chicking for links......%d\n",st.st_nlink); // Бла бла бла.... }
4apa, любой фанат своего ЯП приведет кучу док-в того, что именно его ЯП - самый ЯПистый ЯП в мире! но обычно подобные док-ва не выдерживают никакой критики. все упирается в то, что тому или иному челу просто нравится писать на этом ЯП, вот и все. а может быть он просто консервативен, и, выучив этот ЯП XX лет назад, не желает с ним расставаться. отсюда и столько бурных эмоций по отношению к нему. это же так просто. а про вышеупомянутую вами Эль-76 могу сказать следующее: в нашем совковом государстве в те далекие суровые времена попросту бы не позволили ночальнеги писать на каких-то там заокиянских Си и прочих буржуйских языках. потому и выдумали свои эльбрусы итд. типа "накой нам эти пробуржуйские ненадежные языки, мы что, хуже шоль? мы ж самые крутые --> у нас и язык свой будет, а запад и прочее нам не указ". это тупизм и застой, полная деградация, и с этим в ногу шагающие люди обычно борятся. оффтоп, но наверное кстати по этой причине в странах бывшего совка столько "любителей изобретать велосипеды" . не в обиду, конечно.
4apa Если коротко объяснить.... Сейчас выпускающиеся программеры папины(или мамины , не знаю кто платил) сыночки... А брать кого-то на работу надо.... Вот для этих ОЛЕНЕЙ и придумывают что по-проще!!!! Ты не знал или сам такой Брать то не кого , а для ОЛЕНЕЙ надо свой загон придумывать... Вот и появляются помехозащищённые методики))))))))))))
Согласен! Давай устроим что то типа соревнования. И тогда сразу будет видно, ху из ху )) Я постараюсь прицепить сюда мою прогу на Обероне по расчету космических орбит в системе Солнце-Земля-Луна... Программу запускать под системой BlackBox 1.5 rus (скачайте пакет от МГУ, я давал ссылки ранее). Переводи ее на С++ и будем сравнивать, насколько твой вариант нагляднее и легче в вериффикации. Удачи ! (Твое задание не вижу смысла транслировать на Оберон, слишком просто.) Код (Text): Helios2.Do1 MODULE Helios2; IMPORT Log:= StdLog, Math; CONST G_Const= 6.6726E-11; R_Sun_Earth= 149.6*1.0E9; (*150 млн км*) R_Sun_Moon= R_Sun_Earth+ 406*1.0E6; (*384 тыс км*) TYPE PPoint3D= POINTER TO TPoint3D; TPoint3D= RECORD x,y,z: REAL; END; PPlanetObject= POINTER TO TPlanetObject; TPlanetObject= RECORD pos, PosNew: TPoint3D; (*Положение объекта + будущее положение*) vel: TPoint3D; (* Скорость, м/с *) accel: TPoint3D; (* Текущее ускорение, м^2/с*) mass: REAL; (* Масса, кг*) radius: REAL; (* Радиус, м*) name: ARRAY 32 OF CHAR; (* Название *) END; PPlanetSystem= POINTER TO TPlanetSystem; TPlanetSystem= RECORD TimeDelta: REAL; (* Квант времени в системе *) CurrentTime: REAL; (* Текущее время в системе *) Planet: ARRAY 3 OF PPlanetObject; END; (*==========================================================================*) PROCEDURE (P: PPoint3D) Setup(r1,r2,r3: REAL), NEW; BEGIN P.x:= r1; P.y:= r2; P.z:= r3; END Setup; PROCEDURE (P: PPoint3D) Zero(), NEW; BEGIN P.Setup(0.0, 0.0, 0.0); END Zero; PROCEDURE (P: PPoint3D) Module(): REAL, NEW; BEGIN RETURN Math.Sqrt(P.x*P.x+ P.y*P.y+ P.z*P.z); END Module; PROCEDURE (R: PPoint3D) GetDistance(p1, p2: TPoint3D): REAL, NEW; BEGIN R.x:= p2.x- p1.x; R.y:= p2.y- p1.y; R.z:= p2.z- p1.z; RETURN R.Module(); END GetDistance; (*==========================================================================*) PROCEDURE (PlanetSystem: PPlanetSystem) Setup(), NEW; VAR T: PPoint3D; BEGIN PlanetSystem^.TimeDelta:= 0.25; PlanetSystem^.CurrentTime:= 0.0; NEW(T); NEW(PlanetSystem^.Planet[0]); NEW(PlanetSystem^.Planet[1]); NEW(PlanetSystem^.Planet[2]); (* ========================================================= *) PlanetSystem^.Planet[0].name:= "Солнце"; PlanetSystem^.Planet[1].name:= "Земля"; PlanetSystem^.Planet[2].name:= "Луна"; PlanetSystem^.Planet[0].mass:= +2.00E30; PlanetSystem^.Planet[1].mass:= +5.96E24; PlanetSystem^.Planet[2].mass:= +7.36E22; T.Setup(0, 0, 0); PlanetSystem^.Planet[0].pos:= T^; T.Setup(R_Sun_Earth, 0, 0); PlanetSystem^.Planet[1].pos:= T^; T.Setup(R_Sun_Moon, 0, 0); PlanetSystem^.Planet[2].pos:= T^; T.Setup(0, 0, 0); PlanetSystem^.Planet[0].vel:= T^; T.Setup(0, 29785.678, 0); PlanetSystem^.Planet[1].vel:= T^; T.Setup(0, 29385.678, 0); PlanetSystem^.Planet[2].vel:= T^; (*T.Setup(0, 29404.88, 0); PlanetSystem^.Planet[2].vel:= T^;*) (*T.Setup(0, 28867.988163718863, 0); PlanetSystem^.Planet[2].vel:= T^;*) T.Setup(0, 0, 0); PlanetSystem^.Planet[0].accel:= T^; PlanetSystem^.Planet[1].accel:= T^; PlanetSystem^.Planet[2].accel:= T^; (* ========================================================= *) END Setup; PROCEDURE (PlanetSystem: PPlanetSystem) FindAccelDelta(p1, p2: PPlanetObject), NEW; (* =========== Выполняем расчет относительных ускорений двух тел и добавляем их в сумматор текущего ускорения Расчет не производим для 1го тела, если второе тело имеет массу менее 1% от массы первого =========== F= G* m1* m2/ R^2= m1* a; --> a= G*m2* Rxyz/R^3; (В виде проекций на оси координат! где R- модуль направления и всегда больше нуля, по хорошему ) G= 6.67E-11; Константа Ньютона :))) *) VAR R: PPoint3D; GM: REAL; RM: REAL; (* Расстояние между объектами *) BEGIN NEW(R); RM:= R.GetDistance(p1.pos, p2.pos); RM:= RM*RM*RM; IF p2.mass/p1.mass>0.01 THEN GM:= G_Const* p2.mass; p1.accel.x:= p1.accel.x + GM* R.x/ RM; p1.accel.y:= p1.accel.y + GM* R.y/ RM; p1.accel.z:= p1.accel.z + GM* R.z/ RM; END; IF p1.mass/p2.mass>0.01 THEN GM:= G_Const* p1.mass; (* Ибо направление сил гравитации у второго объекта противоположное *) p2.accel.x:= p2.accel.x - GM* R.x/ RM; p2.accel.y:= p2.accel.y - GM* R.y/ RM; p2.accel.z:= p2.accel.z - GM* R.z/ RM; END; END FindAccelDelta; PROCEDURE (PlanetSystem: PPlanetSystem) DoOneStep(), NEW; VAR i,j: INTEGER; dt: REAL; PL: PPlanetObject; Zero: PPoint3D; BEGIN (* Рассчитаем взаимные ускорения *) FOR i:= 1 TO LEN(PlanetSystem.Planet) DO FOR j:= i+1 TO LEN(PlanetSystem.Planet) DO PlanetSystem.FindAccelDelta(PlanetSystem.Planet[i-1], PlanetSystem.Planet[j-1]); END; END; (* v1= v0+ a*dt x1= x0+ dt*(v0+v1)/ 2 ==Вроде бы они равны ? Да, это так и есть! x1= x0+ dt*(v0+a*dt/2) ==Выбираем эту формулу *) NEW(Zero); (* Нулевая тройка чисел *) Zero.Zero(); dt:= PlanetSystem.TimeDelta; (* Рассчитаем новые координаты и скорости *) FOR i:= 1 TO LEN(PlanetSystem.Planet) DO (*Log.Int(i);*) PL:= PlanetSystem.Planet[i-1]; PL.pos.x:= PL.pos.x+ (PL.vel.x+ PL.accel.x* dt* 0.5)* dt; PL.pos.y:= PL.pos.y+ (PL.vel.y+ PL.accel.y* dt* 0.5)* dt; PL.pos.z:= PL.pos.z+ (PL.vel.z+ PL.accel.z* dt* 0.5)* dt; (* Скорость обязательно инкрементируем после инкремента координаты !*) PL.vel.x:= PL.vel.x+ PL.accel.x* dt; PL.vel.y:= PL.vel.y+ PL.accel.y* dt; PL.vel.z:= PL.vel.z+ PL.accel.z* dt; (* Обнуляем ссумматор ускорения *) PL.accel:= Zero^; END; (* Время тоже течет вдаль, надо его инкрементировать *) PlanetSystem.CurrentTime:= PlanetSystem.CurrentTime+ PlanetSystem.TimeDelta; END DoOneStep; PROCEDURE (PlanetSystem: PPlanetSystem) PrintResults(), NEW; VAR i: INTEGER; p, Earth: PPlanetObject; pm: PPoint3D; BEGIN NEW(pm); Log.String("Время: "); Log.Real(PlanetSystem.CurrentTime/ 3600/ 24); Log.Ln; Earth:= PlanetSystem.Planet[1]; FOR i:= 2 TO LEN(PlanetSystem.Planet) DO p:= PlanetSystem.Planet[i-1]; Log.Int(i); Log.String("). Объект: "+ p.name); Log.Ln; Log.String("x="); Log.Real(p.pos.x); Log.Tab; Log.Real(p.pos.y); Log.Tab; Log.Real(p.pos.z); Log.Tab; pm^:= p.pos; Log.Real(pm.Module()); Log.Ln; Log.String("v="); Log.Real(p.vel.x); Log.Tab; Log.Real(p.vel.y); Log.Tab; Log.Real(p.vel.z); Log.Tab; pm^:= p.vel; Log.Real(pm.Module()); Log.Ln; IF i=3 THEN Log.String("Moon dynamics:"); Log.Ln; Log.String("x="); pm.x:= p.pos.x- Earth.pos.x; pm.y:= p.pos.y- Earth.pos.y; pm.z:= p.pos.z- Earth.pos.z; Log.Real(pm.x); Log.Tab; Log.Real(pm.y); Log.Tab; Log.Real(pm.z); Log.Tab; Log.Real(pm.Module()); Log.Ln; Log.String("V="); pm^:= p.vel; pm.x:= p.vel.x- Earth.vel.x; pm.y:= p.vel.y- Earth.vel.y; pm.z:= p.vel.z- Earth.vel.z; Log.Real(pm.Module()); Log.Ln; END; END; Log.String("===================================================="); Log.Ln; END PrintResults; PROCEDURE (PlanetSystem: PPlanetSystem) BeginProcess(DaysToProcess: REAL), NEW; (*DaysToProcess- Число дней для расчета*) VAR CounterMax, Counter: REAL; BEGIN CounterMax:= Math.Round(24*3600 / PlanetSystem^.TimeDelta); Log.String("CounterMax="); Log.Real(CounterMax); Log.Ln; CounterMax:= CounterMax/ 1; Counter:= 0; DaysToProcess:= DaysToProcess*24*3600; (*Перегнали в секунды*) WHILE PlanetSystem^.CurrentTime< DaysToProcess DO PlanetSystem.DoOneStep(); Counter:= Counter+ 1; (*Log.Real(Counter); Log.Ln;*) IF Counter>= CounterMax THEN PlanetSystem.PrintResults(); Counter:= 0; END; END; END BeginProcess; PROCEDURE Do1*(); VAR PlanetSystem: PPlanetSystem; BEGIN NEW(PlanetSystem); PlanetSystem.Setup; PlanetSystem.BeginProcess(2*365.25); (*2 года*) PlanetSystem.PrintResults(); END Do1; BEGIN END Helios2. (* Helios2.Do1 Расчетные формулы: F= G* m1* m2/ R^2= m1* a; G= 6.67E-11; v1= v0+ a*dt x1= x0+ v0*dt+ a*dt^2/2 ==Выбираем эту формулу (равноускоренное движение на участке dt) x1= x0+ dt*(v0+v1)/ 2 v= Int(a)dt= a*t+ v0. x= Int(v0+ a*t)dt= x0+ v0*t+ a*t^2/2 *)
смеюсь)) ему говорят, вот те кусок кода, переведи на свой мега изык, а там поглядим, где лаконичнее итд. а в ответ: слыш, мужык, нафик мне твой код, на те вот мой код, давай лучше с ним повозюкайся )) это на баш надо!
Да ну тя в баню, уважаемый varnie ! меня заинтересовала идея посоревноваться с увжаемым device'ом на счет у кого лучше и чище получиться результирующий код. А твои призывы убиться головой об стену меня почему то невоодушевляют. Извини... И еще... Уважаемые мемберы! Давайте слушать друг друга внимательно. А то мы орем друг на дружку как бараны и все равно ничего не можем понять, что хочет сказать наш оппонент. Цените свое и чужое время, плиз... это я к тому, что не буду сто раз повторять одну и ту же инфу, задрало уже ((.
wsd ух.. ща как возражу ))) Ты отчетливо понимаешь, что если программу не используют, то она не живет - это первое! Не развивается из-за того что пользователи не жалуются, а они нежалуются потому что первое - это второе ! ) Также ты отчетливо должен понимать, что мы сейчас живем в условиях пусть дикого(как выразился мой друг), но капитализма. В условиях капитализма и рынка, как правило очень и очень много конкурентов, с этим ты тоже не поспоришь! Из-за обилия конкурентов, приходится шевелиться и иногда очень шустро шевелиться или тебя выкинут с арены! Тоже факт! Я писал: Этими словами, я хотел и говорю щас, что не все надо решать через тяжелые средства, к примеры С++. Да они гибкие, функциональны - но по сути, уводят в никуда наше разработчиков время! Пока мы ищем ошибку - мы теряем время, из-за этого оттягиваем сроки реализации продукта, а ведь это только на руку конкурентам! Надо исходить из условий проекта\задачи. Если есть время то да, тут надо по надежней, кучу проверок на вставлять,попытаться вставить новую фичу и это круто, но круто для нас, для разработчиков. Пользователю нужно решать его задачи, к примеру ввел нужные данные и получил отчет, и ему глубоко фиалетово на чем написано! Зато от жутко удивиться какой нить фиче, которая приводит к BSOD - не беда что ее писал начинающий программер, только только освоивший азы С++! Гораздо ужасней что из-за сбоя пользователь\клиент теряет свое время и это его беспокоит куда больше чем, как была написана программа! И это надо учитывать! Ты говорил: Да, согласен то, что многие используют компоненты не всегда гуд. Но вот когда есть стабильно работающие вещи, то лучше использовать их. С ними даже новичок справится и порую самостоятельно - это козырь в управлении проектом, т.к. не надо тратиться на более сильных специалистов, которые куда дороже,чем новичок. Вобщем, подвожу итог: 1. Если ты работаешь на контору, играй по правилам конторы! 2. Если ты работаешь на контору, используй проверенные не одним человеком средства 3. Если ты работаешь на контору, ты обязан делать как делать вещи по проще, а не услажнять их, т.к. время сопровождения и модификации вещей, очень и очень важно в данный момент
100 процентов согласен. Я ведь в первом посте написал: еслиб не требования к времени - сидел бы я на сях/джаве и не жаловался. А тут от тебя требуют проект, который даже если будешь строчить без остановки и обращения к книге, вовремя не напишешь!
4apa, бесполезный спор будет. как вы докажете др другу, что вот "мой код лаконичнее, а ваш нешыбко", или наоборот? все опять упрется в фанатичную преданность своему языку! ну нравится вам писать x = x +1; а другому нравится ++x; и что, как тут кто кому докажет что его способ "лучше и чище"? или вы настолько хорошо знаете свой язык, и у вас столько свободного времени, что вы на уровне генерируемых вашим компилером инструкций будете выяснять, у кого и что оптимизированней? и если уж этим заниматься, то надо брать какой-то классический алгоритм и его уж писать на своих языках, а потом генерируемый код смотреть. например, пузырьковую сортировку, вычисление факториала заведомо здоровенного числа, итд итп. а ваши станции, спутники, и прочие орбиты с километрами как-то сложно во все это фписываются.
device У мну начальник все это разъяснил, жестко так, но на совесть ! ) Я всегда думал: 1. А что если файл не запишется и тут же мыль в голову надо событие в лог 2. А что если юзер не догадается, наверно надо подсказать и хинт вывести 3. А ведь было бы круто ещи экспорт в эксель сделать Он здраво сказал: 1. Ну и пусть запишется, юзер глянет в доку и увидет что нужно проверить сетевой диск, глянет а его нет и решит траблу - вывод не тратить время на эту "нужность" 2. Ты думаешь что все тупые, а кто-то написавший MS VC++ даже не думал, что ты не догадаешь, он думал по щет того, чтобы было средство, да есть баги, есть досадные, но не надо думать будто весь мир из одних тупиц! 3. На это он сказал жестко, ну и будет он раз в год юзать этот файл, а ты на это время тратил вместо того чтобы отказустойчивей сделать прогу. Жестко так меня пресанул и у меня аж аргументов не стало ))
Не обижайся.... Если ты работаеш на сутенёра - зарабатываеш кучу бабок, выходиш на пенсию и выясняется , что они на х**ен ни кому не нужны, а уважение уже не заработаеш......... А в своей теме что молчиш???? Я же тебе ясно говорил про вырожденные случаи)))))))))
2 device: Если заинтересовало мое предложение (на счет соревнования), я буду только рад Если сча нет времени, так и скажи, что завален работой. Или отказывайся. Торопить тебя никто не будет !! :] Я свою ботву к примеру писал/отлаживал почти неделю с перерывами (по ночам по 1-2 часика ), пока она нормально не запахала. Каркас программы был написан за 2-3 часа (типа я само-обучался прогать на Обероне). (причина косяков: в алго ошибок не было. в исходных данных- параметрах орбиты- пришлось сильно шаманить с орбитой Луны: я все никак не мог мало мальски стабилизировать орбиту Луны, она у меня постоянно улетала куда-то через 2-3 дня В итоге закинул ее подальше на 406 тыс.км от Земли и скорость придал ей 990 м/с относительно Земной). ). Без обид. Косячок исправьте: Код (Text): T.Setup(0, 29785.678, 0); PlanetSystem^.Planet[1].vel:= T^; T.Setup(0, 29385.678, 0); PlanetSystem^.Planet[2].vel:= T^; заменить на Код (Text): T.Setup(0, 29785.678, 0); PlanetSystem^.Planet[1].vel:= T^; (* Скорость Земли отн.Солнца *) T.Setup(0, 29785.678- 990, 0); PlanetSystem^.Planet[2].vel:= T^; (* Скорость Луны в 990 м/с в Земных координатах*)
4apa, извини, но я шыбко сомневаюсь, что кто-то ваши орбиты, луны и прочее изучать здесь будет. по-идее, лучше новый топик создать типа "battle: с/c++ vs oberon", и там уж обсуждать задачку для прогонки на обоих языках. а вообще, тупо как-то, вы даете свой вариант сорцов на вашем языке, и говорите - "переводи давай на свой язык". так неверно. обычно ставят задачу и обе стороны ее решают, не обращая внимания на сорец оппонента. уловили? ps: но я опять же сомневаюсь в таком топике даже, ибо у людей времени нету банально на все эти 'меряния пи#исками'.
Повторяю для самых одаренных http://www.inr.ac.ru/~info21/texts/2002-06-Aarhus/ru.htm Если у тебя нет свободного времени, уважаемый varnie, то лучше не читай... Ты ведь слишком занят на форуме. ))