Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему все любят С++? 
:(
    Опции темы
Петрович
Дата 1.8.2005, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 2
Всего: 55



Цитата(simanyay @ 1.8.2005, 21:26)

Цитата

Я так понимаю лейбак производителя влияет только на java? А не подскажете-ли как такого добиться в обычной, например Delphi программе?


А вы не подскажете как мне запустить скомпилированную в Delphi программу в Linux и Solaris? Читайте выше.

Во первых, я так и не понял как лейбак производителя мамы сказывается на кроссплатформенности приложений? smile
А во вторых, как часто вы пишите программы для работы в нескольких платформах?
Наверное это специфика.
Лично я свой хлеб только на платформе Windows зарабатываю. И вроде как хватает. По крайней мере пока. У меня в багаже, за 20 лет программирования, есть лишь одно кроссплатформенное приложение. Оно делалось для работы под DOS и под UNIX. Поэтому, в принципе не могло быть чисто кроссплатформенным smile. Просто писалось на C, и большая часть портировалась.
А так, в принципе, не принципиально smile. Надо будет на java, сбацаем на java. Для нормального программера, язык не имеет принципиального значения. Изучение нового языка это вопрос времени, причем не катастрофически большого. Поэтому, при реальной необходимости не вижу препятствий.
Цитата(simanyay @ 1.8.2005, 21:26)
Вариант один:
- я написал с помощью выше указанных средств систему за 2 месяца и сдал раньше дедлайна, что позволило мне скопить на ноутбук с процом AMD Athlon 64 3.4+ 1Gb RAM, на котором уже вышедшая Eclipse 3.1 не тормозит вообще.

Вариант два:
- я бы писал с помощью убогих средств, которые бы не тормозили, месяца 3-4 с постоянным гемороем с синхронизацией и разными редакторами и, следовательно, не успел бы к дедлайну и не получил бы всей суммы денег (не то что премии за сдачу заранее). Какой бы у меня был комп? Может чуть лучше... Celeron 2Ghz. Зато не тормозящий софт! Счастье-то какое.

А вот это как посмотреть. Лично у меня, при сегодняшнем уровне знания java, было-бы наоборот. smile

Это сообщение отредактировал(а) Петрович - 1.8.2005, 21:43


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Kagor
Дата 1.8.2005, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Debian user
****


Профиль
Группа: Экс. модератор
Сообщений: 2946
Регистрация: 28.2.2003
Где: Королевство Кривых

Репутация: 1
Всего: 85



Цитата
Для нормального программера, язык не имеет принципиального значения. Изучение нового языка это вопрос времени, причем не катастрофически большого.
Полностью согласен!



--------------------
Disassemble Your life and get the key!
PM ICQ GTalk Jabber   Вверх
chipset
Дата 2.8.2005, 03:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 4
Всего: 164



Цитата

А так, в принципе, не принципиально smile. Надо будет на java, сбацаем на java. Для нормального программера, язык не имеет принципиального значения. Изучение нового языка это вопрос времени, причем не катастрофически большого. Поэтому, при реальной необходимости не вижу препятствий.

Однозначно.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
JekaZZ
Дата 12.10.2005, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 6.10.2005

Репутация: нет
Всего: 3



С++ имеет более понятный для понимания синтаксис.
Приведу пример. Я однажды спросил у одного программиста Delphi, изменится ли значение переменной i в данном случае:
Код

procedure ChangeI(a: integer);
begin
 a:=a+5;
end;
......
var i: integer;
begin
 i:=1;
 ChangeI(i);
end.

Он говорит "Нет". И он прав.Тогда я спрашиваю, а изменится ли содержимое i в данном случае:
Код

procedure ChangeSL(a: TStringList);
begin
 a.Add('New item');
end;
......
var i: TStringList;
begin
 i:=TStringList.Create;
 ChangeSL(i);
end.

Он говорит "Да". И он прав. А вот почему так - он не знает.
Потому что из синктасиса паскаля (далфи) невозможно понять, что передается в функцию-значение переменной или ссылка на нее.
В С++ такой бы проблемы не возникло, так как для изменения переменной внутрь функции должен передаваться указатель и прототип ее будет следующий:
Код

void ChangeI(TStringList* a);

Знак "*" и говорит об указателе. Если же переменная передается по ссылке
Код

void ChangeI(TStringList& a);

то компилятор предупредит об этом. А чтобы он этого не делал, надо писать
Код

void ChangeI(const TStringList& a);

Тогда однозначно переменная не меняется внутри функции. И никаких неопределенностей!!!

Еще момент.Паскалевский компилятор для i:=i+1 создаст точно такой же машинный код - возмет из памяти переменную, поместит ее в регистр, потом прибавит к ней 1 и поместит обратно в память (проверено). Компилятор С++ сделает это одной командой процессора - прибавит 1 к значению в памяти. И записывается на с++ гораздо короче i++;
PM MAIL   Вверх
Mayk
Дата 12.10.2005, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(JekaZZ @ 12.10.2005, 21:18)
Паскалевский компилятор для i:=i+1 создаст точно такой же машинный код - возмет из памяти переменную, поместит ее в регистр, потом прибавит к ней 1 и поместит обратно в память (проверено). Компилятор С++ сделает это одной командой процессора - прибавит 1 к значению в памяти. И записывается на с++ гораздо короче i++;

Это зависит от компилятора. Не думаю, что в стандарте паскаля есть какие-либо оговорки о генерации кода.
ах, да. На паскале еще есть inc(i); smile


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Void
Дата 12.10.2005, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 11
Всего: 173



Надо же, какая тема всплыла... smile Пофлеймили на славу.

Цитата(JekaZZ @ 12.10.2005, 19:18)
Еще момент.Паскалевский компилятор для i:=i+1 создаст точно такой же машинный код - возмет из памяти переменную, поместит ее в регистр, потом прибавит к ней 1 и поместит обратно в память (проверено).

Ну, это уже проблемы тупизны компилятора и/или его создателей smile

Цитата(JekaZZ @ 12.10.2005, 19:18)
С++ имеет более понятный для понимания синтаксис.

...пока мы пишем вот такие примеры в пять строчек...

smile Синтаксис ML рулез... smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Mayk
Дата 12.10.2005, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(Void @ 12.10.2005, 22:37)
Синтаксис ML рулез...

smile smile


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Void
Дата 12.10.2005, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 11
Всего: 173



Mayk
Ур-ра, провокация удалась smile

Собственно, все зависит от задачи... Уродливый код можно написать на чем угодно. Но выведение типов, соответствие образцу (pattern-matching), кортежи и списки на уровне языка - ИМХО, есть рулез. Это относится не только к MLоидам (OCaml), но и к Haskell, даже к Nemerle. Просто именно с OCaml я знаком ближе всего.

Код

type 'a btree =
      Empty
    | Node of 'a * 'a btree * 'a btree

let rec insert x = function
      Empty -> Node(x, Empty, Empty)
    | Node(y, left, right) ->
        if x < y then Node(y, insert x left, right)
        else Node(y, left, insert x right)

Киньте в меня камень, кому непонятно, что этот код делает smile

P.S. Может отдельную веточку откроем: "Императивное программирование vs. функциональное - заведемся конкретЪно"? smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
LSD
Дата 12.10.2005, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Цитата(Void @ 12.10.2005, 19:49)
Киньте в меня камень, кому непонятно, что этот код делает

А почему не используешь fun это по мему наглядней?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Void
Дата 12.10.2005, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 11
Всего: 173



Цитата(LSD @ 12.10.2005, 20:52)
А почему не используешь fun это по мему наглядней?

Ключеовое слово fun в OCaml используется для введения анонимных ф-ций (лямбда ф-ций) с одним или нескольким аргументами. Здесь его всунуть негде smile А вообще, фишка очень удобная.

Цитата(Void @ 12.10.2005, 20:49)
Уродливый код можно написать на чем угодно. Но выведение типов, соответствие образцу (pattern-matching), кортежи и списки на уровне языка - ИМХО, есть рулез.

Ах да, забыл еще - ф-ции как first class values и карринг.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Mayk
Дата 12.10.2005, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(Void @ 12.10.2005, 22:49)
Ур-ра, провокация удалась

Дыкть smile

Цитата(Void @ 12.10.2005, 22:49)

Киньте в меня камень, кому непонятно, что этот код делает

Так, Сча будем угадывать.

Цитата(Void @ 12.10.2005, 22:49)

type 'a btree =
      Empty
    | Node of 'a * 'a btree * 'a btree

btree и 'а могут быть либо пустыми, либо
состоять из пар 'a и 'a, btree и 'a или просто быть btree.

Цитата(Void @ 12.10.2005, 22:49)

let rec insert x = function
      Empty -> Node(x, Empty, Empty)
    | Node(y, left, right) ->
        if x < y then Node(y, insert x left, right)
        else Node(y, left, insert x right)


Если что-то вставляется в пустоту, то вернется Node(аргумент-инсерта, empty, empty)
Если же добавляется в узел (обозначенны y наверное?, то вернется узел), то вернется такой узел, что x будет добавлен в одну из веток

Сильно наврал? smile


Цитата(Void @ 12.10.2005, 22:49)

P.S. Может отдельную веточку откроем: "Императивное программирование vs. функциональное - заведемся конкретЪно"?

Do it smile

Это сообщение отредактировал(а) Mayk - 12.10.2005, 19:09


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Void
Дата 12.10.2005, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 11
Всего: 173



Цитата(Mayk @ 12.10.2005, 21:07)
btree и 'а могут быть либо пустыми, либо
состоять из пар 'a и 'a, btree и 'a или просто быть btree.

Чуть-чуть не так smile btree может быть либо пустым, либо состоять из тройки: элемент и два поддерева. 'a - это параметрический тип, т.е. C++-ным аналогом было бы:
Код
template <class A>
struct btree {
    btree<A> *left, *right;
    A data;
};

Только тут все наглядно и типобезопасно. Компилятор сам введет указатели, там где нужно (тип-то рекурсивный).

Цитата(Mayk @ 12.10.2005, 21:07)
Если что-то вставляется в пустоту, то вернется Node(аргумент-инсерта, empty, empty)
Если же добавляется в узел (обозначенныy, то вернется узел из (y,

Тут все правильно smile
Причем, надо заметить, ф-ция insert полиморфна - она будет работать для btree с любыми типами 'a.
Цитата(Mayk @ 12.10.2005, 21:07)
Do it

Счас, только вступительный призыв для флеймеров накатаю smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
DragonFire
Дата 15.10.2005, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

Репутация: нет
Всего: 9



А я вообще не согласен с этим утверждением.
Я люблю Delphi, а значит уже не все... smile smile smile smile


--------------------
PM MAIL ICQ   Вверх
Mayk
Дата 15.10.2005, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134



Цитата(Void @ 12.10.2005, 23:14)
Счас, только вступительный призыв для флеймеров накатаю

Ты бы еще примерчики накатал smile сказал Майк, выкачиавя окамлу


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
LSD
Дата 15.10.2005, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 9
Всего: 538



Цитата(JekaZZ @ 12.10.2005, 18:18)
С++ имеет более понятный для понимания синтаксис.

Ну-ну smile

Какое значение получит переменная с, после такого вычисления:
Код
a=5;    
b=10;    
с = a*b - 36 / (a=(b+2));

Добавлено @ 23:13
Просьба тем кто уже участвовал в этой дискусси не писать smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0981 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.