Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];

Вниз

Как писать на С++, а не на Дельфи?   Найти похожие ветки 

 
@!!ex ©   (2008-05-16 22:06) [0]

Поговорка: "Программист на фортране модет писать на фортране на любом языке" -  на самом деле весьма актуальна.
Банально сейчас веду проект на С++, и ловлю себя на том, что пытаюсь построить архитектуру так, как строил бы на Дельфе.
Но это же в корне не правильно!
Как переучится? вернее не переучится, а научится эффективно писать на С++.


 
boa_kaa ©   (2008-05-16 22:13) [1]


> @!!ex ©   (16.05.08 22:06)
> пытаюсь построить архитектуру так, как строил бы на Дельфе

и правильно делаешь


 
DrPass ©   (2008-05-16 22:14) [2]


> Банально сейчас веду проект на С++, и ловлю себя на том,
>  что пытаюсь построить архитектуру так, как строил бы на
> Дельфе.
> Но это же в корне не правильно!

Что за брутальные мысли? Если ты практику "аккуратного" Delphi-кода перенесешь на С++, тебе будет только плюс. Или даже два :)


 
@!!ex ©   (2008-05-16 22:19) [3]

Такой подход приводит к тому, что на С++ переносятся недостатки Дельфи, и не используются преимущества С++.

В итоге получаем код, который содержит недостатки С++, содержит недостатки Дельфи, и содержит только те достоинства, которые есть и в Дельфи и в С++.


 
boa_kaa ©   (2008-05-16 22:29) [4]


> @!!ex ©   (16.05.08 22:19) [3]
>
> Такой подход приводит к тому, что на С++ переносятся недостатки
> Дельфи, и не используются преимущества С++.
>
> В итоге получаем код, который содержит недостатки С++, содержит
> недостатки Дельфи, и содержит только те достоинства, которые
> есть и в Дельфи и в С++.

это только в том случае, если ты решил переносить все недостатки


 
Игорь Шевченко ©   (2008-05-16 22:51) [5]


> Как переучится? вернее не переучится, а научится эффективно
> писать на С++.


Читать хорошие исходники и медитировать над ними.

Кстати, на самом деле, программист на Фортране будет писать на Фортране на любом языке - я много раз видел написанный "на Фортране" код на Delphi и на C (и на C++)

На С# после Delphi писать несколько проще, чем на С++


 
DrPass ©   (2008-05-16 22:51) [6]


> @!!ex ©   (16.05.08 22:19) [3]


> Такой подход приводит к тому, что на С++ переносятся недостатки
> Дельфи, и не используются преимущества С++.

А можно обойтись без литературных метафор, и сказать конкретно, что именно тебя не устраивает? Какие именно недостатки ты переносишь, и какие преимущества теряешь?


 
palva ©   (2008-05-16 23:20) [7]

Советую почитать последнее издание Страуструпа. Учиться по этой книге невозможно, но некую философию программирования на си++ из нее можно извлечь. Я, к стати, так ее и не одолел. Есть еще философский двухтомник Брюса Эккеля. Вернее, слово "философия" присутствует в названии второго тома. Я ее тоже читал местами.


 
wicked ©   (2008-05-17 01:01) [8]

для начала - ознакомиться с тем, что уже есть
STL - контейнеры данных, алгоритмы, как оно всё работает в связке

потом - с вещами, которые тебе будут облегчать жизнь - например, смарт поинтеры, паттерны (можно и не все, всё равно опыт приходит с практикой)

ознакомиться с тем, что такое парадигма RAII, нужна ли она тебе и как её использовать

и практика - писать и еще раз писать


 
Германн ©   (2008-05-17 01:09) [9]


> Как переучится? вернее не переучится, а научится эффективно
> писать на С++.
>

Это придёт со временем. Точнее с опытом многолетней работы. И это относится к любому языку, а не только к С++. Бо ни у какого языка нет простой "Инструкции по применению"! :)


 
ketmar ©   (2008-05-17 07:49) [10]

перенёс в си свои паскалевские привычки по наименованию идентификаторов. когда это видят заядлые сишники, у них начинаются припадки с пеной изо рта.

---
Understanding is not required. Only obedience.


 
Юрий Зотов ©   (2008-05-17 11:20) [11]

> ketmar ©   (17.05.08 07:49) [10]

Дык... функции WinAPI, надо полагать, писали экстрасуперсишники, а имена им дали вполне даже паскалевские.


 
LightRipple ©   (2008-05-17 11:36) [12]

> Offtop

Может подскажите с какой книжки лучше начинать изучать С++ ?
Или надо обратить свои взоры на С# ?

Лазила по форумам сишников, в поисках совета по стартовой литературе,
но вот беда: одни хвалят некую книгу, другие ее тут же разносят "в пух и прах" да еще и ногами топчут :)
Так как я там никого не знаю, то не могу и решить к чьему мнению надо прислушаться :(
Поэтому и решила спросить у нашего "сообщества" :)


 
Zeqfreed ©   (2008-05-17 11:53) [13]

Сколько книжек я не пробовал читать по С++, единственно полезной для меня, видимо, оказался «Полный справочник» Шилдта. На втором месте, однако, стоит упомянуть «Философию» Эккеля (см. [7]), которая тоже довольно интересна и познавательна.


 
Игорь Шевченко ©   (2008-05-17 12:03) [14]


> Может подскажите с какой книжки лучше начинать изучать С++
> ?


C++ лучше изучать со Страуструпа.

С просто (и это более достойно) лучше изучать с Кернигана и Ричи "Язык программирования С" - она не толстая. Параллельно с ней желаетльно читать книжку Кернигана и Пайка "Практика программирования".

Почему более достойно - потому что и Unix и Windows написаны на С, а не на С++ :)


 
Anatoly Podgoretsky ©   (2008-05-17 12:09) [15]

> LightRipple  (17.05.2008 11:36:12)  [12]

На C++ Microsoft наложила болт, так что не трать на него время.
Все новые примеры в MSDN идут на C# и VB.Net


 
oxffff ©   (2008-05-17 12:14) [16]


> Anatoly Podgoretsky ©   (17.05.08 12:09) [15]


Это не совсем так. :)
Сейчас у них в планах этот болт переложить.


 
ketmar ©   (2008-05-17 12:21) [17]

>[11] Юрий Зотов © (2008-05-17 11:20:00)
а это наследие тяжёлых времён первой винды, которая на паскале была.

---
Understanding is not required. Only obedience.


 
palva ©   (2008-05-17 12:59) [18]

Керниган и Риччи излагают старую версию языка си. Например функция там может быть определена так.

int fun(s, n)
char *s;
int n;
{
 return (*(s + n));
}

Теперь любой сишник опишет параметры в первой же строчке, а выражение после return не будет заключать в скобки. Хотя старый стиль и воспринимается современными компиляторами, я бы не советовал к нему привыкать.

Сама книга очень хороший учебник. Достаточно сказать, что я изучил первое издание этой книги (перевод у нас вышел где-то на стыке 70-х и 80-х) когда у меня даже не было компилятора - всё было четко изложено в самой книге и прилагавшихся примерах и упражнениях.


 
palva ©   (2008-05-17 13:15) [19]


> на стыке 70-х и 80-х

на стыке 80-х и 90-х


 
palva ©   (2008-05-17 14:35) [20]

Все-таки засомневался и стал уточнять. Перевод первого издания книги вышел в 1985 году. Вот его читать не надо. Сейчас в ходу 3-е издание. Там на обложке такое красное изображение штампика "ANSI C" - вот там изложен нормальный современный си.


 
LightRipple ©   (2008-05-17 23:57) [21]

Ух ты сколько у нас сишников :) Спасибо.

> [14] Игорь Шевченко ©   (17.05.08 12:03)
> С просто (и это более достойно) лучше изучать с Кернигана и Ричи
> "Язык программирования С" - она не толстая.

Ну раз "она не толстая", то придется прочитать.
Это конечно не самый, но довольно весомый агрумент :)

К сожалению, не помню кто именно (с нашего форума), рекомендуя мне книгу
по программированию приводил более весомый аргумент: "она с картинками" :)


 
Игорь Шевченко ©   (2008-05-18 00:00) [22]

LightRipple ©   (17.05.08 23:57) [21]


> Ну раз "она не толстая", то придется прочитать.


Страуструп, например, толстый. Впрочем и С++ толстый сам по себе


 
Pilum ©   (2008-05-18 14:36) [23]

Prolog изучи. Для расширения кругозора... :>


 
Дмитрий С   (2008-05-18 14:42) [24]

Покажите пример кода на Дельфи на фортране =)


 
_mirage   (2008-05-18 17:26) [25]

>[22] Игорь Шевченко © (2008-05-18 00:00:00)
>Страуструп, например, толстый.
и глупый.

---
Understanding is not required. Only obedience.


 
Anatoly Podgoretsky ©   (2008-05-18 17:40) [26]


> Страуструп, например, толстый.

Хорошего человека должно быть много.


 
_mirage   (2008-05-18 17:45) [27]

>[26] Anatoly Podgoretsky © (2008-05-18 17:40:00)
так то хорошего. а то труп страуса.

---
Understanding is not required. Only obedience.


 
Игорь Шевченко ©   (2008-05-18 21:11) [28]

_mirage   (18.05.08 17:26) [25]

Я конечно все понимаю, слонов нынче много, раздолье...


 
_mirage   (2008-05-18 21:55) [29]

>[28] Игорь Шевченко © (2008-05-18 21:11:00)
Игорь, ты ж в курсе, что я цпп не котирую. страус испортил отличный макроассемблер, за что я лично буду его в аду жарить. что хуже, он зачем-то назвал своё поделие «объектно-ориентированым», хотя это полная чушь. «объектно-ориентированый» — это Objective C, например. а никак не цпп.

---
Understanding is not required. Only obedience.


 
_mirage   (2008-05-18 21:56) [30]

>[29] _mirage (2008-05-18 21:55:00)
жарить страуса, конечно, не макроассемблер. %-)

---
Understanding is not required. Only obedience.


 
Игорь Шевченко ©   (2008-05-18 22:24) [31]

_mirage   (18.05.08 21:55) [29]


> Игорь, ты ж в курсе, что я цпп не котирую


Я не в курсе твоих пристрастий. Но тем не менее.

"Что ты такого написал, что устал?" (с)


 
KSergey ©   (2008-05-19 09:09) [32]

> Pilum ©   (18.05.08 14:36) [23]
> Prolog изучи. Для расширения кругозора... :>

Для перехода в измененное сознание часто достаточно boost посмотреть. Да и к теме С++ это ближе и, быть может, даже полезнее.


 
Mystic ©   (2008-05-19 11:05) [33]

> Такой подход приводит к тому, что на С++ переносятся недостатки
> Дельфи, и не используются преимущества С++.


Ну так посмотри на исходники boost и попытайся мутить в том же ключе. А вообще главный недостаток C++ это наличие большого количества преимуществ, что провоцирует использовать их все :)

> перенёс в си свои паскалевские привычки по наименованию
> идентификаторов. когда это видят заядлые сишники, у них
> начинаются припадки с пеной изо рта.


Я не знаю какого-то единого стандарта кодирования для C++. Кто как хочет, так и именует.


 
_mirage   (2008-05-20 06:09) [34]

>[31] Игорь Шевченко © (2008-05-18 22:24:00)
>"Что ты такого написал, что устал?" ©

«войну и мир» три раза от руки переписывал. тяжело.

алсо, в курсе, в курсе. или принципиально не отождествляешь «ketmar» и «mirage»? %-)

---
Understanding is not required. Only obedience.


 
Юрий Зотов ©   (2008-05-20 09:00) [35]

> Дмитрий С   (18.05.08 14:42) [24]

> Покажите пример кода на Дельфи на фортране =)

     CONST FMT="A=%F6.2";
     CASE SIGN(I) OF -1:GOTO LBL10; 0:GOTO LBL20; 1:GOTO LBL30; END;
LBL10:A := 100;
     GOTO LBL40;
LBL20:A := 11;
     GOTO LBL40;
LBL30:A := 153;
LBL40:WRITELN(FORMAT(FMT, [A]));

Это стиль Фортрана-2 или Фортрана-4 (он же Фортран-66). Справедливости ради надо сказать, что уже в следующем стандарте (Фортран-77) стиль был заметно улучшен, в Фортран-90 он стал еще лучше, а уж в современном Фортране (не знаю, какой сейчас последний), надо полагать - так и вовсе.


 
_mirage   (2008-05-20 09:19) [36]

>[35] Юрий Зотов © (2008-05-20 09:00:00)
убил. с первого выстрела.

---
Understanding is not required. Only obedience.


 
Юрий Зотов ©   (2008-05-20 09:27) [37]

Тот же код на Фортране (возможны ошибки, я его уже почти забыл).

1     FORMAT(%F6.2)
      IF SIGN(I) 10, 20, 30
10    A = 100
      GOTO 40
20    A = 11
      GOTO 40
30    A = 153
40    PRINT 1 (A);


 
Romkin ©   (2008-05-20 10:52) [38]

Я когда-то перевел исходник одного алгоритма с Фортрана на Паскаль. Причем буквально, там фиг разберешься: процедура была страниц на 6, монолитом. Вот это был фортран на паскале в чистом виде, я замучился метки описывать, сорок штук примерно :)


 
Юрий Зотов ©   (2008-05-20 10:58) [39]

Тот же код, на чем-то вроде C/Java/etc:

printf("%f6.2", a = sign(i) < 0 ? 100 : (sign(i) == 0 ? 11 : 153));

Честно говоря, вряд ли он более читабелен, чем фортрановский...
:о)


 
Слоник ©   (2008-05-20 11:06) [40]

> Юрий Зотов ©   (20.05.08 10:58) [39]
>
> Тот же код, на чем-то вроде C/Java/etc:
>
> printf("%f6.2", a = sign(i) < 0 ? 100 : (sign(i) == 0 ?
> 11 : 153));
>
> Честно говоря, вряд ли он более читабелен, чем фортрановский.
> ..
> :о)


дело привычки, мой встроенный парсер не спотыкнулся, сразу всё ясно стало
а фортрановский пришлось "дебажить", чтобы понять суть (после первого прочтения не стал вникать, только после сишного заинтересовало - как то же на фортране будет смотреться)


 
palva ©   (2008-05-20 11:14) [41]


> Честно говоря, вряд ли он более читабелен, чем фортрановский...

Потому что применение функции sign здесь излишне. (В фортрановском варианте тоже)


 
Юрий Зотов ©   (2008-05-20 11:20) [42]

> palva ©   (20.05.08 11:14) [41]

Да. Sign пришлось вводить в первый (дельфишный) вариант, чтобы более точно передать фортрановский арифметический IF. В остальных вариантах Sign не нужен и сохранен лишь для того, чтобы точно следовать первому.


 
_mirage   (2008-05-20 11:22) [43]

>[40] Слоник © (2008-05-20 11:06:00)
а вот не писал ты на GW-BASIC. ON x GOTO a,b,c ловится в коде «на раз».
%-)

---
Understanding is not required. Only obedience.


 
pasha_golub ©   (2008-05-20 12:06) [44]


> GW-BASIC

Эххх! Времена были. А какой Бейсик был на БК-10? (если правильно помню название железяки. там после каждого нажатия клавиши пик раздавался)


 
pasha_golub ©   (2008-05-20 12:08) [45]

Странно, написано в Википедии, что на БКшках Фокал был прописан в качестве языка. А я помню точно, что Басик


 
Romkin ©   (2008-05-20 12:18) [46]


> Странно, написано в Википедии, что на БКшках Фокал был прописан
> в качестве языка. А я помню точно, что Басик

Два варианта было. Фокал - более родной, Бейсик - был на каких-то моделях, но там памяти практически не оставалось из-за этого, 7 Кб, если память не изменяет.


 
_mirage   (2008-05-20 13:20) [47]

>[45] pasha_golub © (2008-05-20 12:08:00)
не знаю, но название стрёмное.

---
Understanding is not required. Only obedience.


 
Ins ©   (2008-05-20 13:47) [48]


> Странно, написано в Википедии, что на БКшках Фокал был прописан
> в качестве языка. А я помню точно, что Басик

У меня был и Бейсик, и Фокал, и машинные коды - БК-ноль-ноль-десять-ноль-один :)


 
Ins ©   (2008-05-20 13:58) [49]


> Тот же код, на чем-то вроде C/Java/etc:
>
> printf("%f6.2", a = sign(i) < 0 ? 100 : (sign(i) == 0 ?
> 11 : 153));


А че, и на Delphi так можно :)

writeln(format("%6.2f", [int(ifthen(sign(i) < 0, 100, ifthen(sign(i) = 0, 200, 300)))]));


 
_mirage   (2008-05-20 14:02) [50]

>[49] Ins © (2008-05-20 13:58:00)
а int() зачем? это не аналог сишного (кстати, ошибочного) кода получается.

---
Understanding is not required. Only obedience.


 
Ins ©   (2008-05-20 14:06) [51]


> а int() зачем?


И правда, незачем. Нужно было просто аргумент format вещественым сделать, а это лучше таким образом:
writeln(format("%6.2f", [ifthen(sign(i) < 0, 100.0, ifthen(sign(i) = 0, 200.0, 300.0))]));


 
Romkin ©   (2008-05-20 14:46) [52]

И format тоже не особо нужен :)
writeln(ifthen(sign(i) < 0, 100.0, ifthen(sign(i) = 0, 200.0, 300.0)):6:2);


 
DiamondShark ©   (2008-05-20 14:50) [53]


> и не используются преимущества С++.

У С++ нет преимуществ.


 
DiamondShark ©   (2008-05-20 14:54) [54]


> Советую почитать последнее издание Страуструпа. Учиться
> по этой книге невозможно, но некую философию программирования
> на си++

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


 
Ins ©   (2008-05-20 14:56) [55]


> И format тоже не особо нужен :)

Спасибо, не знал.


> У С++ нет преимуществ.

Уууу, пошел за попкорном... :)


 
DiamondShark ©   (2008-05-20 15:30) [56]


> pasha_golub ©   (20.05.08 12:06) [44]
> Эххх! Времена были. А какой Бейсик был на БК-10? (если правильно
> помню название железяки. там после каждого нажатия клавиши
> пик раздавался)
>
> pasha_golub ©   (20.05.08 12:08) [45]
> Странно, написано в Википедии, что на БКшках Фокал был прописан
> в качестве языка. А я помню точно, что Басик
>
> Romkin ©   (20.05.08 12:18) [46]
> Два варианта было. Фокал - более родной, Бейсик - был на
> каких-то моделях, но там памяти практически не оставалось
> из-за этого, 7 Кб, если память не изменяет


Фокал -- не более родной, а более ранний.
Стырили и немножко подработали напильником DEC-овский транслятор, видимо, сроки сдачи изделия в производство поджимали. Трянслятор влезал в одну микросхему ПЗУ (8 кБ).
Бэйсик ("Вильнюс-87") был более поздней разработкой. Диалект был выбран покоцанный MSX, а транслятор был оригинальный и он был крут -- полукомпилятор в шитий код. Скорость исполнения по сравнению с Фокалом раз в 10 выше.

Памяти, в смысле пользовательского ОЗУ, при использовании обоих трансляторов оставалось одинаково -- 16К + 16К видео, потому что хоть бейсик и занимал 3 микросхемы (точнее, 2.5, старшие 4К на DEC-овских машинах зарезервированы для АП ввода/вывода), но располагался с того же адреса -- в старших 32К, после Монитора.
А память бэйсик использовал даже эффективнее фокала.

Это для модификаций БК-0010(01).

На БК-0011 был уже только бэйсик, дальнейшая модификация "Вильнюса". С памятью на БК-0011 обошлись жестоко. Забацали целых 128 Кб ОЗУ и сделали возможность навешивать до 64 Кб ПЗУ в панельках и внешних модулях. Для управления всем этим хозяйством при 16-битной шине адреса процессора пришлось сделать что-то вроде аппаратного менеджера страниц памяти. Видео-ОЗУ и ПЗУ упрятали в теневые страницы, что, в принципе, дало возможность нормально пользоваться полным АП. Однако, при этом обращения к Монитору, видео и бэйсику стали нетривиальными и тормозными задачами, манипулировать страницами было нелегко, потому что гранулярность была 8 Кб (это при 64 Кб АП!).

Впрочем, на 11-ой никто тем удолбищным Монитором и Бэйсиком и не пользовался. Там можно было запустить полноценную DEC-овскую RT-11 и наслаждаться жизнью.


 
_mirage   (2008-05-20 15:30) [57]

>[55] Ins © (2008-05-20 14:56:00)
неа, за мухобойкой надо. эвтаназировать неадекватных любителей цпп.

---
Understanding is not required. Only obedience.


 
pasha_golub ©   (2008-05-20 16:01) [58]

Да, Монитор БКшный это был нечто. В сочетании с магнитофоном Романтика. Некоторые игры приходилось по десятку раз крутить.


 
DiamondShark ©   (2008-05-20 16:17) [59]


> Да, Монитор БКшный это был нечто.

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


 
Anatoly Podgoretsky ©   (2008-05-20 16:43) [60]

> pasha_golub  (20.05.2008 12:08:45)  [45]

Таки Фокал


 
Anatoly Podgoretsky ©   (2008-05-20 16:51) [61]

> DiamondShark  (20.05.2008 16:17:59)  [59]

Я тоже смотрел листинг, драйвер магнитофона был нормальный, написан профессионально.


 
Kostafey ©   (2008-05-29 21:34) [62]

Чуть ветку хорошую не пропустил.

Товаришь ketmar, объясните мне плз, нехрамотному
чем вас C++ не угодил?
Нормальный язык. Наглядная работа с указателями,
богатая библиотека, множество примеров...

По литературе. Читать Павловскую.


 
_mirage (17872)   (2008-05-29 21:39) [63]

совершенно нет желания опять начинать всю эту фигню. вкратце: в цпп угробили все хорошие фичи родителя-макроассемблера и не добавили ничего полезного. если уж надо «си с классами», то смотреть следует в сторону Objective C, а не на выблев дохлого страуса.

---
Understanding is not required. Only obedience.


 
Kostafey ©   (2008-05-29 21:45) [64]

> [63] _mirage

Ну хорошо, но почему тогда Objective C мирно сдох (затрудняюсь сказать
как давно), а С++ стал стандартом - де-факто, который лишь недавно был
потеснен Java/С# ?


 
Правильный_Вася   (2008-05-29 21:54) [65]

вот я тоже как-то с++ не люблю, а С мне нравится


 
@!!ex ©   (2008-05-29 22:02) [66]

> Ну хорошо, но почему тогда Objective C мирно сдох (затрудняюсь
> сказать
> как давно),

Я бы тоже затруднился, учитывая, что он живет и здравствуте.


> а С++ стал стандартом - де-факто,

Под виндой, из-за маркетинговой политики МС.


 
Kostafey ©   (2008-05-29 22:05) [67]

> [66] @!!ex ©   (29.05.08 22:02)
> > Ну хорошо, но почему тогда Objective C мирно сдох (затрудняюсь
> > сказать
> > как давно),
> Я бы тоже затруднился, учитывая, что он живет и здравствуте.

Хорошо. Какая есть IDE (хоть одна) для Objective C?


 
palva ©   (2008-05-29 22:07) [68]

> Под виндой, из-за маркетинговой политики МС.
Под Unix/Linux тоже чаще используют C++, а не Objective C. Так что MS здесь не причем.


 
_mirage (20223)   (2008-05-29 22:08) [69]

потому что Objective C слишком «заумен», плюс пиарился мало. фактически, Objective C используют только на маках (они же его и родили), а эплам традиционно было плевать, что там вне маков творится.

кстати, ты маководам скажи, что Objective C сдох, ага. хоть повеселишь их, бедняг. и эпплу это же скажи — они, оказывается, пишут на сдохшем языке.

натурально, концепция «расширеных структур» в черепа быдлокодеров ещё кое-как помещается, а концепция передачи сообщений — уже нет.

---
Understanding is not required. Only obedience.


 
_mirage (28880)   (2008-05-29 22:09) [70]

>[67] Kostafey © (2008-05-29 22:05:00)
>Хорошо. Какая есть IDE (хоть одна) для Objective C?

всё ясно. с тобой разговор окончен. быдлокодеры тусуются вон там, за углом. тебе туда.

---
Understanding is not required. Only obedience.


 
Kostafey ©   (2008-05-29 22:19) [71]

> [70] _mirage (28880)   (29.05.08 22:09)

Тфу.
Ладно, про маки я не знал. Уел.
Но что до IDE, то тут ты меня не правильно
истолковал. Я не к тому, что без IDE я себе кодинг не
представляю.
У меня IDE в свое время заменял FAR и пачка батников
с компилятором.
Отсутствием IDE я хотел лишь подчеркнуть непопулярнось
языка, только и всего!


 
_mirage (14315)   (2008-05-29 22:24) [72]

>[71] Kostafey © (2008-05-29 22:19:00)
>Отсутствием IDE я хотел лишь подчеркнуть непопулярнось
>языка, только и всего!

во-вторых: ты это, мак купи сначала. там есть.
во-первых: не важно, что ты там хотел подчеркнуть — это как раз «аргумент» типичного быдлокодера.

---
Understanding is not required. Only obedience.


 
Kostafey ©   (2008-05-29 22:32) [73]

> [72] _mirage (14315)  

Мля, я вообще не кодер.
А вот тебе бы следовало поступать как мастеру Фу, а не как
неофиту в известной притче.

Мастер Фу и конечный пользователь
В другой раз, когда Мастер Фу давал публичную лекцию, один пользователь, наслушавшись рассказов о мудрости Учителя, подошел к нему за советом.
Он трижды поклонился Мастеру ФУ. "Я хочу постичь тайны Влеикого Пути, но командная строка вводит меня в замешательсво".
Некоторые из наблюдавших это неофитов начали насмехаться над пользвателем, называя его невежественным и говоря, что Великий путь Unix предназначен только для тех, в ком есть порядок и интеллект.
Учитель поднял руку, призывая к тишине, и позвал самого шумного из неофитов, который засмеялся первым, подойти к месту, где они сидели с пользователем.
"Расскажи мне" - спросил он у неофита, - о коде, который ты написал, и о работе по проектированию, которую ты проделал".
Неофит начал, заикаясь, отвечать, но не мог ничего сказать.
Мастер Фу повернулся к пользвателю. "Скажи мне, - осведомился он, - зачем ты ищешь Великий Пусть?"
"Мне не нравится программное обеспечение, которое окружает меня, - отвечал пользователь. - Оно работает ненадежно и не радует глаз и сердце. Услышав о том, что пусть Unix, хотя и труден, но превосходен, я пытаюсь отпробись все препоны и обман".
"И чем же ты занимаешься, если так борешься с нынешним программным обеспечением?" - спросил Мастер Фу.
"Я- строитель, - ответил пользователь. - Многие дома в этом городе построены моими руками."
Мастер Фу повернулся к неофиту. "Кошка может насмехаться над тигром, - сказал он, - но это не превратит мяуканье в рев".
Услышав это, неофит достиг просветления.


 
_mirage (29700)   (2008-05-29 22:43) [74]

>[73] Kostafey © (2008-05-29 22:32:00)
>А вот тебе бы следовало

ты сам знаешь, куда посылают непрошеных советчиков, или рассказать?

---
Understanding is not required. Only obedience.


 
Kostafey ©   (2008-05-29 22:48) [75]

> [74] _mirage (29700)   (29.05.08 22:43)
> >[73] Kostafey © (2008-05-29 22:32:00)
> >А вот тебе бы следовало
> ты сам знаешь, куда посылают непрошеных советчиков, или
> рассказать?

Ну, во-первых не стоит,
во-вторых, совет невредный,
в-третьих, мы отошли от темы


 
_mirage (122)   (2008-05-29 23:03) [76]

>[75] Kostafey © (2008-05-29 22:48:00)
я как-то больше двух десятков лет сам решал, что мне делать, и в дальнейшем собираюсь поступать так же.
а по теме я всё сказал.

---
Understanding is not required. Only obedience.


 
Kostafey ©   (2008-05-29 23:18) [77]

> [76] _mirage (122)  

Я тут вот подумал... - неспецефичная для нас деятельность,
вообще говроя.
Дальнейший разговор на эту тему - сплошная схоластика.

Так что давай с этим завязывать.
Т.е. Мир. Дружба. Жевачка. :))

P.S. Java рулит :)


 
_mirage (6929)   (2008-05-29 23:23) [78]

Удалено модератором


 
Kostafey ©   (2008-05-29 23:29) [79]

> [78] _mirage (6929)

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

P/S Но вот уж чем Java не угодила обоснуй! :)


 
Узурап Мамуматкулович   (2008-05-29 23:32) [80]

Удалено модератором


 
_mirage (11606)   (2008-05-29 23:39) [81]

>[79] Kostafey © (2008-05-29 23:29:00)
lisp. javascript, кстати, неплох. Lua. Objective C достаточно интересен. smalltalk.

я думаю, после прочтения списка ясно, почему жаба — чушь?

---
Understanding is not required. Only obedience.


 
Kostafey ©   (2008-05-29 23:56) [82]

> [81] _mirage (11606)   (29.05.08 23:39)

Это надо думать.
Objective C и smalltalk в противовес С++/Java
используют упомянутую тобой концепцию передачи сообщений.

Хотя «Всё — объекты» свойственны как smalltalk так во
многом и Java.

javascript - ну с Java у него только название похоже.
Язык прост и вездесушь. Хм...

Lua. Интерпретируемый. Как вообще говоря и Java.
Хотя устроен иначе. Тамошние таблицы были для
меня вестма необычны.

Нет, к сожалению из этого рассуждения
я не понял что в Java плохого по сравнению с ними...


 
Узурап Мамуматкулович   (2008-05-30 00:06) [83]

>[82] Kostafey(c) 29-May-2008, 23:56
>> [81] _mirage (11606)  (29.05.08 23:39)
>
>Нет, к сожалению из этого рассуждения
>я не понял что в Java плохого по сравнению с ними...

Хотя бы VM.


 
_mirage (8963)   (2008-05-30 00:06) [84]

>[82] Kostafey © (2008-05-29 23:56:00)
>Язык прост

гыгыгы. настолько, что 90% «пейсателей» его не знают. %-)

в жабе всё плохо. казалось бы — всё равно VM, отчего не сделать в нём возможности динамических и функциональных языков (кстати, ты этого не заметил как раз; кроме Objective C остальные перечисленные позволяют писать в функциональном стиле; хотя в smalltalk это и не очевидно).

где в жабе closures? где функции как first class citizens? какого ангела я не могу передавать параметры по ссылке? короче, чушь ваша жаба.

---
Understanding is not required. Only obedience.


 
Kostafey ©   (2008-05-30 00:25) [85]

> кроме Objective C остальные перечисленные позволяют писать
> в функциональном стиле;

Что и javascript?
Это надо отдельно еще отдельно
голову поломать как ее использовать
для чисто фукционального программирования.


> где в жабе closures?

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


> first class citizens?

Просветите что это? Общий предок всех объектов?


> какого ангела я не могу передавать параметры по ссылке?

А чем передача по значению не устраивает?
Тем более, что там почти все объекты, так что
фактически всегда передаются собственно ссылки.
Хотим простые типы по ссылке передавать -
ну пожалуйста, делаем обертки, их передаем.


 
Ослик   (2008-05-30 02:19) [86]

[85] Kostafey ©   (30.05.08 00:25)

> Просветите что это? Общий предок всех объектов?

Не "first class citizens", а "функции как first class citizens".
Думаю, Кетмар имел ввиду это:

http://local.joelonsoftware.com/mediawiki/index.php/%D0%90_%D0%B2%D0%B0%D1%88_%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%82%D0%B0%D0%BA_%D0%BC%D0%BE%D0%B6%D0%B5%D1%82%3F


 
_mirage (24090)   (2008-05-30 04:12) [87]

>[85] Kostafey © (2008-05-30 00:25:00)
>Что и javascript?
>Это надо отдельно еще отдельно
>голову поломать как ее использовать
>для чисто фукционального программирования.

нет, достаточно javascript выучить. вы ж, которые кричите «простенький язык», его не знаете. если б знали, не надо было бы голову ломать.

>> где в жабе closures?
>В общем случае этого нет. Конечно память
>освобождать можно.
>Я полагаю, это было сделано чтобы избежать
>возможных ошибок разработчиков, т.е.
>повысить надежность ценой снижения производительности.
ты вообще знаешь, что такое closure? судя по ответу — нет.

>> first class citizens?
>Просветите что это?

в [86] ответили.

>А чем передача по значению не устраивает?
аналог вот такого в студию: function N (n: Integer; var c: Integer; out d: Integer): Boolean;
только без идиотского boxing, это придумали дебилы, которые ниасилили передачу по ссылке. за каким членом я должен оборачивать такое в класс? это было бы простительно, если бы были closures и functional programming. но их — увы.

---
Understanding is not required. Only obedience.


 
Evgeny V ©   (2008-05-30 07:10) [88]


> _mirage (24090)   (30.05.08 04:12) [87]

Вообще вроде для JVM есть функциональный язык или языки, встречалось по крайней мере упоминание о Scheme.


> _mirage (8963)   (30.05.08 00:06) [84]


> где в жабе closures?


Есть однако
Да и про функциональный стиль - это конечно только примеры, но тем не менее для меня это было таки довольно неожиданно http://rsdn.ru/article/funcprog/fp.xml. Конечно JAVA не функциональный язык и примеры в статье это некоторая натяжка,  но не все в ней так плохо...
Хотя нравится или не нравится - это конечно дело личных предпочтений...


 
guav ©   (2008-05-30 10:07) [89]

> _mirage

Ну а чем тогда С++ не угодил, в котором замыкания есть ? (более удобный синтаксис будет в С++09, но есть они уже сейчас).


 
_mirage (27862)   (2008-05-30 11:54) [90]

>[88] Evgeny V © (2008-05-30 07:10:00)
>Вообще вроде для JVM есть функциональный язык или языки, встречалось
>по крайней мере упоминание о Scheme.

но сделаны они немножко страшновато. %-) да и разговор шёл не о JVM.

>Есть однако
их и в паскале можно сделать. вопрос не в том, как можно извратнуться, а в том, что поддерживает язык «искаропки». если что-то можно, но сложно — 99% народа это использовать не будет.

>Да и про функциональный стиль
спрячьте это немедлленно. без оптимизации tail calls никакого «функционального стиля» быть не может.

>[89] guav © (2008-05-30 10:07:00)
>Ну а чем тогда С++ не угодил, в котором замыкания есть ?

ЩИТО? компилятор в студию. чтобы можно было такое:

int NewA (int start) {
 int c = start;
 int Iterator () {
   return c++;
 }
 return Iterator;
}

int IA = NewA(10);
int IB = NewA(20);
printf("%i\n", IA());
printf("%i\n", IB());

и на выходе 10 и 20 соответственно. хотя бы такое чтобы могло.
и — нет, всякие дополнительные выховы неизвестно чего при создании closure не предлагать. это будут костыли.

---
Understanding is not required. Only obedience.


 
_mirage (13370)   (2008-05-30 11:55) [91]

вдогон:

printf("%i\n", IA());
printf("%i\n", IB());

11 и 21.
%-)

---
Understanding is not required. Only obedience.


 
Evgeny V ©   (2008-05-30 12:26) [92]


> _mirage (27862)   (30.05.08 11:54) [90]


> спрячьте это немедлленно. без оптимизации tail calls никакого
> «функционального стиля» быть не может.


Согласен, с той оговоркой,  что практического функционального прогрммирования не может быть.
А так расписывать на бумажке вполне можно.
Просто понравилась сама статья, где довольно неплохо объяснено что и к чему.:-)


 
guav ©   (2008-05-30 12:30) [93]

#include <boost/function.hpp>
#include <boost/bind.hpp>

typedef boost::function<int ()> IntFunction;

int Iterator (int& c)
{
 return c++;
}

IntFunction NewA(int start)
{
 int c = start;
 return boost::bind(Iterator, c);
}

int _tmain(int argc, _TCHAR* argv[])
{
 IntFunction IA = NewA(10);
 IntFunction IB = NewA(20);
 printf("%i\n", IA());
 printf("%i\n", IB());
 printf("%i\n", IA());
 printf("%i\n", IB());
 return 0;
}


 
guav ©   (2008-05-30 12:30) [94]

Output как и ожидалось
10
20
11
21


 
guav ©   (2008-05-30 12:38) [95]

Теперь про замыкания в С++ с более человеческим лицом.
Такое будет только в C++0x ,вот тут можно глянуть http://en.wikipedia.org/wiki/C%2B%2B0x#Lambda_functions_and_expressions , правда это не окончательный вариант, они ещё добавили const-корректность и ещё могут чего-то успеть впихнуть до выхода стандарта.


 
_mirage (22471)   (2008-05-30 12:44) [96]

>[94] guav © (2008-05-30 12:30:00)
я не понял, что это ты написал. я тебе какой синтаксис показал? при чём тут костыли буста? нафига мне итератор в пространстве имён не NewA? что это за аргумент в итераторе?

короче. чушь. кривой эмулятор.

>[95] guav © (2008-05-30 12:38:00)
там тоже чушь. я что, ёжик — руками указывать, какие переменные из замыкания мне нужны? даже простейший лисп умеет это определять сам. алсо, не заметил, как вернуть наружу лямбду всместе с её замыканием для вызова из другой функции, не той, где лямбда создана. короче, как не крась костыли — они всё равно остаются костылями.

---
Understanding is not required. Only obedience.


 
guav ©   (2008-05-30 13:07) [97]

> [96] _mirage (22471)   (30.05.08 12:44)

> я не понял, что это ты написал

Это не аргумент.
я бы не понял если бы ты что-то написал на Lua, и что ?

> [96] _mirage (22471)   (30.05.08 12:44)
> нафига мне итератор в пространстве имён не NewA? что это за аргумент в итераторе?

Вложеных функций в С++ таки да, нету. Но сами замыкания есть.
Или я опять не понял ?

Начёт буста, ну это считай стандартная библиотека (по кр мере использованая часть буста, уже включена в STL). Примерно как в JavaScript встроены стандартные свойства для поддержки масссивов и ооп.

> там тоже чушь. я что, ёжик — руками указывать, какие переменные
> из замыкания мне нужны?

Указывай [=].
Смысл указывания - чтобы была возможность захвата по ссылке.

> алсо, не заметил, как вернуть наружу лямбду всместе с её
> замыканием для вызова из другой функции, не той, где лямбда
> создана.

1. auto type, т.е. тип вычисляемый компилятором
2. std::function, то что сейчас boost::function
3. Если не нужно захваченных переменных, достаточно захватить ссылки (например на поля класса или ссылки как параметры), то reference_closure

PS: Если очень хочется всё вовнуть запихнуть уже сейчас, есть boost::lambda

boost::function<int ()> NewA(int start)
{
 return boost::bind<int>(boost::lambda::_1++, start);
}

int _tmain(int argc, _TCHAR* argv[])
{
 boost::function<int ()> IA = NewA(10);
 boost::function<int ()> IB = NewA(20);
 printf("%i\n", IA());
 printf("%i\n", IB());
 printf("%i\n", IA());
 printf("%i\n", IB());
 return 0;
}



 
_mirage (16420)   (2008-05-30 13:19) [98]

>[97] guav © (2008-05-30 13:07:00)
>> я не понял, что это ты написал
>Это не аргумент.

в данном случае не понял не язык, не понял, что это продемонстрировать должно было. кроме того, что цпп — страна костылей. %-)

>Начёт буста, ну это считай стандартная библиотека
неа, не буду я так считать, пока она не будет таковой признана хотя бы в ANSI/ISO/ECMA.

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

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

>уже сейчас, есть boost::lambda
оно держит только простейшие выражения? нет, такого нам не надо. %-)

весь спор изначально странен: ты мне пытаешься доказать, что что-то можно сделать при помощи костылей. я разве с этим спорил? можно. можно и поле пахать детской лопаткой, но неудобно. поясню свою точку зрения: я лично не вижу смысла засовывать в зад отличному макроассемблеру костыли. я вижу смысл написать на макроассемблере язык более высокого уровня и дальше писать на нём. ну не лезут closures, continuations, lambdas, etc. в нединамические языки, не лезут. и как ты их ихолентой не приматывай — всенепременно где-то, что-то, да отвалится. потому что не лезет. а то я щаз попрошу показать мне dynamic scoping, и тут вообще начнётся язерный ужас.

---
Understanding is not required. Only obedience.


 
guav ©   (2008-05-30 13:41) [99]

> неа, не буду я так считать, пока она не будет таковой признана
> хотя бы в ANSI/ISO/ECMA.

Эти костыли входят в TR1 , через годик ISO их признают.


> [98] _mirage (16420)   (30.05.08 13:19)
> весь спор изначально странен: ты мне пытаешься доказать,
> что что-то можно сделать при помощи костылей. я разве с этим спорил?

Я просто считаю что если можно сделать что-либо, то оно есть, не важно встроено ли онО в язык или просто есть готовая библиотека. С чем ты спорил трудно понять из вопроса "ЩИТО?".


> ну не лезут closures, continuations, lambdas, etc. в нединамические
> языки, не лезут.

Да ну. closures и lambdas даже в Delphi обещают :)

PS: Да, я знаю, что я "типичный быдлокодер".


 
guav ©   (2008-05-30 14:17) [100]

Насчёт оригинального сабжа. Т.к. автор не видит кучи ошибокв примере здесь http://delphimaster.net/view/15-1211457004/ , советую изучить основы С++ , а не выдумывать проблему из "пытаюсь построить архитектуру так, как строил бы на Дельфе. Но это же в корне не правильно!"


 
@!!ex ©   (2008-05-30 14:25) [101]

> советую изучить основы С++

Этим я занимаюсь.
Однако проблемы это не решает.


 
guav ©   (2008-05-30 14:31) [102]

> [101] @!!ex ©   (30.05.08 14:25)
> Однако проблемы это не решает.

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


 
_mirage (11015)   (2008-05-30 14:34) [103]

>[99] guav © (2008-05-30 13:41:00)
>Эти костыли входят в TR1 , через годик ISO их признают.

вот тогда оно и будет стандартом. %-)
вообще, пора бы. а то бояре глаголют, что STL очень невменяемая.

>Я просто считаю что если можно сделать что-либо, то оно есть, не важно
>встроено ли онО в язык или просто есть готовая библиотека.

разница есть. встроеное часто эффективней, и синтаксис у него приятней.

>Да ну. closures и lambdas даже в Delphi обещают :)
ещё раз: нормальная реализация этих вещей возможна только в динамических языках на базе VM. всё, что возможно в языках типа C и Delphi — кривые костыли, которые частично иногда работают. ключ — динамика. это не значит, что C и Delphi — плохо, это значит, что они не для подобных штук.

а возмущаюсь я именно тем, что из хорошего макроассемблера C повыкидывали всё, что делало его хорошим макроассемблером и добавили кучу мусора. в итоге оно нормальным языком так и не стало, а вот элегантность и удобство потеряло.

>Да, я знаю, что я "типичный быдлокодер".
кажется, я этого не говорил.

---
Understanding is not required. Only obedience.


 
guav ©   (2008-05-30 15:05) [104]

> [103] _mirage (11015)   (30.05.08 14:34)
> а то бояре глаголют, что STL очень невменяемая.

Разные есть бояре, от разделяющих твою точку зрения про С++, до фанатов кинжки Александреску про темплейты.

По мне, уже вполне вменяемая, в Delphi или С++ такого счастья нет. А будет лучше. В Delphi никакой библиотеки контейнеров нет (всякие частные решения вроде THashedStringList или того что в unit contnrs не в счёт, пародия на STL - Delphi Container Library - тоже)

Или по-твоему даже контейнерам нечего делать в нединамическом языке ?


> [103] _mirage (11015)   (30.05.08 14:34)
> разница есть. встроеное часто эффективней, и синтаксис у
> него приятней.

Эффективность типа "[93] будет два вызова на каждый вызов замыкания, а когда замыкания будут встроены то нуль т.к. всё заинлайнится" ? Ну да эффективнее, но если тебя беспокоят такие мелочи эффективности, то динамические языки тебе тоже не подходят.

Встроенное лучше, с этим я не спорю. Но про не встроенное всё можно утверждать что оно есть.


> а возмущаюсь я именно тем, что из хорошего макроассемблера
> C повыкидывали всё, что делало его хорошим макроассемблером
> и добавили кучу мусора.

Ой, как будто С запретили.


> кажется, я этого не говорил.

Разве это не обобщение на всех, кого для каких-либо задач устраивает С++ ?

> [69] _mirage (20223)   (29.05.08 22:08)
> натурально, концепция «расширеных структур» в черепа быдлокодеров
> ещё кое-как помещается, а концепция передачи сообщений —
> уже нет.


 
__mirage_   (2008-05-30 16:35) [105]

>[104] guav © (2008-05-30 15:05:00)
>Или по-твоему даже контейнерам нечего делать в нединамическом языке ?

только не через шаблоны. в oo2c, например, есть generics.

>Ой, как будто С запретили.
нет. но цпп с C не совместим.

>Разве это не обобщение на всех, кого для каких-либо задач устраивает
>С++ ?

меня спрашивали про причины популярности — я ответил, что быдлокодерам другое сложно. но как отсюда следует, что все использующие — быдлокодеры, лично мне не ясно. если из A следует B, то не обязательно из B следует A. и не надо обобщать частность на весь класс.

---
Understanding is not required. Only obedience.


 
guav ©   (2008-05-30 18:26) [106]

> [105] __mirage_   (30.05.08 16:35)
> только не через шаблоны.

Чем автоматизированный копипаст на шаблонах хуже автоматзированного копипаста на макросах ?

> [105] __mirage_   (30.05.08 16:35)
> нет. но цпп с C не совместим.

Какие из этого претензии к именно С++ ?
Что спомпиленый С код можно прилинковать к С++ ? Так к другим несовместимым языкам тоже.
Что синтаксис С++ похож на С ? Так у многих несовместимых языков синтаксис похож на С.


 
__mirage_ ©   (2008-05-30 19:00) [107]

>[106] guav © (2008-05-30 18:26:00)
>на макросах ?

где я, блин, сказал «макрос»?!

>Какие из этого претензии к именно С++ ?
а такие, что труп страуса вякал: «оно должно быть совместимым с цэ, чтобы не переписывать кучу кода». если бы этого не вякали — претензий бы не было.

---
Understanding is not required. Only obedience.


 
имя   (2008-05-30 19:04) [108]

Удалено модератором


 
guav ©   (2008-05-30 20:09) [109]

> [107] __mirage_ ©   (30.05.08 19:00)
> где я, блин, сказал «макрос»?!

тогда поясни

> отличный макроассемблер



> оно должно быть совместимым с цэ, чтобы не переписывать
> кучу кода

Компиляторы С++ также могут компилировать С, т.к. различия не очень большие и реализация С компилятора на базе С++ компилятора не сильно затруднительна. Более того, то что получилось может быть слинковано в одну программу. Таким образом, нет смысла переписывать имещющийся С код на С++. Где Страуструп ошибся ?

И вообще, зачем вспоминать высказывания типа "640 кб должно быть достаточно всем" ?
Паскаль вот создавался для обучения процедурному программированию, так что его применяют только студенты ? А жаба - для написания софта для бытовой техники, получается, что серверные на ней приложения пишутся для пылесосов и кофеварок ?


 
ketmar ©   (2008-05-30 20:19) [110]

>[109] guav © (2008-05-30 20:09:00)
>тогда поясни

я сказал generics.

>Компиляторы С++ также могут компилировать С
а при чём тут компиляторы и их фичи? O_O

>И вообще, зачем вспоминать высказывания типа «640 кб должно быть
>достаточно всем» ?

ну да. чего там на какого-то изобретателя языка внимание обращать. кто он такой, в самом  деле. представляю: приходит, значит, Ларри Волл на конференцию по Perl, а ему: «ты кто такой? мы тебя не звали. иди на!»

>Паскаль вот создавался для обучения процедурному программированию, так
>что его применяют только студенты ?

его вообще никто не применяет. а то, что применяют, паскалем не является. ты хочешь сказать, что нечто, назывыаемое сейчас «C++» — это не «C++», а одно название? так где они тогда потеряли идею совместимости с C? (хинт: искать труп птички)

>серверные на ней приложения пишутся для пылесосов и кофеварок ?
нет, как раз их пишут пылесосы и кофеварки.

---
Understanding is not required. Only obedience.


 
palva ©   (2008-05-30 20:36) [111]

> а при чём тут компиляторы и их фичи?
При том, что их существование доказывает, что C совместим с C++ (или наоборот, это уж как понимать).

> ну да. чего там на какого-то изобретателя языка внимание обращать.
А никто не обращает на него внимания. Обращают внимание на его слова. Он поставил перед собой эту цель и эту цель он достиг.

>> Паскаль вот создавался для обучения процедурному программированию, так
>> что его применяют только студенты ?
> его вообще никто не применяет.

Вы сильно заблуждаетесь. Я его применяю.

> так где они тогда потеряли идею совместимости с C?

Тоже очень легко ответить на этот вопрос - нигде. Может быть вы что-то другое имеете ввиду? Да нет, перечитав ветку можно понять, что вы знакомы с этими языками...


 
ketmar ©   (2008-05-30 20:41) [112]

>[111] palva © (2008-05-30 20:36:00)
>При том, что их существование доказывает, что C совместим с C++ (или
>наоборот, это уж как понимать).

нет. оно доказывает всего лишь существование гибридных компиляторов. у меня вот GCC умеет паскаль и фортран компилять — это значит, что они тоже с C совместимы?

>Вы сильно заблуждаетесь. Я его применяю.
да? ссылочку на компилятор можно? ucsd pascal, небось?

>Тоже очень легко ответить на этот вопрос — нигде
угу. потому что нельзя потерять то, чего не было.

---
Understanding is not required. Only obedience.


 
guav ©   (2008-05-30 20:46) [113]

> [110] ketmar ©   (30.05.08 20:19)
> я сказал generics.

generics это конечно хорошо для высокоуровневого языка со статичесокй типизацией.

Возвращаясь к С/С++. Почему макроассеблер со своими макросами это хорошо, а шаблоны - уже нет ?


> а при чём тут компиляторы и их фичи?

При том, что С++ достаточно близок к С, что способствует реализуемости компиляции С компилятором С++ и делает Сшный код совместимым с этими С++ компиляторами.
Речь не идёт же о том что С++ пытается быть надмножеством С, С++ просто близок к С, для облегчения обеспечения совместимости.


> его вообще никто не применяет. а то, что применяют, паскалем
> не является.

Не понимаю. Почему паскаль не является паскалем.


> ну да. чего там на какого-то изобретателя языка внимание
> обращать.

Много ли влиял создатель паскаля на развитие Борландовского паскаля ?


 
palva ©   (2008-05-30 20:56) [114]

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

> ucsd pascal, небось?
А это что за зверь? Да так, на Delphi 7 иногда пишу.


 
ketmar ©   (2008-05-30 21:01) [115]

>[113] guav © (2008-05-30 20:46:00)
>Возвращаясь к С/С++. Почему макроассеблер со своими макросами это
>хорошо, а шаблоны — уже нет ?

штука в том, что C сознательно плюёт на контроль и позволяет засунуть урановый лом себе в анус — потому что макроассемблер. а цпп, вроде, позиционировался и как «защищённый». его шаблоны и недобны, и не дают норамльного контроля типов (потому что не обязаны быть частью компилятора — это таки препроцессор).

>Речь не идёт же о том что С++ пытается быть надмножеством С
да? O_O

>С++ просто близок к С, для облегчения обеспечения совместимости.
это фигня. нет ничего хуже, чем два очень похожих, но разных языка. помочь не помогает, а путаницу усиливает необходимость помнить о неочевидных ньюансах. так что или крестик снять, или трусы надеть, иначе никак.

>Не понимаю. Почему паскаль не является паскалем.
можно мне у Вирта в описании паскаля увидеть модули и объекты? ссылочку? то, что модули приволокли из Modula2 (причём криво) уже выводит такой «паскаль» из «паскализма». это язык, основаный на паскале, но никак не паскаль.

>Много ли влиял создатель паскаля на развитие Борландовского паскаля ?
много ли его спрашивали? алсо, у борланда Turbo/Borland Pascal, а не pascal. явно указано, что диалект. мало ли, кто что в свой диалект добавит.

---
Understanding is not required. Only obedience.


 
ketmar ©   (2008-05-30 21:04) [116]

>[114] palva © (2008-05-30 20:56:00)
>Просто обычно компилятор даже не может различить, на каком языке код.
>По расширению файла, конечно, можно понять. Но если переименовать
>файл, то компилятор создаст идентичный код.

если это про си, то чушь полная.

#include <stdlib.h>

int main (int argc, char *argv[]) {
 char *c = malloc(10);
}

gcc: ok
g++: a.cpp: In function "int main(int, char**)":
a.cpp:7: error: invalid conversion from "void*" to "char*"

вопросы есть?

>А это что за зверь?
компилятор такой.

>Да так, на Delphi 7 иногда пишу.
это не паскаль.

---
Understanding is not required. Only obedience.


 
palva ©   (2008-05-30 21:18) [117]

ketmar ©   (30.05.08 21:04) [116]
> если это про си, то чушь полная.
Это про си. А почему чушь?

> вопросы есть?
Вопрос единственный - ну и что?

> это не паскаль.
Я могу еще раз повторить - я пишу на паскале.

Да, либо вы слишком умный для меня, либо пытаетесь вкладывать в термины свое собственное понимание. А общепринятое понимание оставляете для "быдлокодеров". Мы не поймем друг друга.


 
@!!ex ©   (2008-05-30 21:27) [118]

> [117] palva ©   (30.05.08 21:18)
> ketmar ©   (30.05.08 21:04) [116]
> > если это про си, то чушь полная.
> Это про си. А почему чушь?
>
> > вопросы есть?
> Вопрос единственный - ну и что?

То, что С++ компилятор не совместим на 100% с С.


 
ketmar ©   (2008-05-30 21:36) [119]

>[117] palva © (2008-05-30 21:18:00)
>Вопрос единственный — ну и что?

да ничего. кроме того, что цпп с C не совместим. и если «поменять расширение», то компилятор очень даже обидится, и никакого кода не создаст вовсе.

засим беседу с palva завершаю ввиду того, что оппонент сам не знает, что хочет сказать.

---
Understanding is not required. Only obedience.


 
palva ©   (2008-05-30 21:49) [120]

ketmar ©   (30.05.08 21:36) [119]

> засим беседу с palva завершаю ввиду того, что оппонент сам
> не знает, что хочет сказать.

Я вам не оппонировал, я вас информировал. В частности о совместимости языков.
Все что я хотел сказать, я сказал.

@!!ex ©   (30.05.08 21:27) [118]
>> Вопрос единственный - ну и что?
> То, что С++ компилятор не совместим на 100% с С.
Это понятно. Правда я говорил нечто иное.


 
ketmar ©   (2008-05-30 21:56) [121]

>Правда я говорил нечто иное.
в качестве иллюстрации: «если переименовать файл, то компилятор создаст идентичный код». когда оппоненту продемонстрировали, что кода не будет не то, что идентичного, а и вовсе никакого — пошли увёртки. ща телеграфирую нашим на Марс — они рано мозговых слизней выпустили, я ещё команды не давал.

---
Understanding is not required. Only obedience.


 
guav ©   (2008-05-30 21:59) [122]

> [115] ketmar ©   (30.05.08 21:01)
> а цпп, вроде, позиционировался и как «защищённый».

Равзе ?
Понятно, что он не менее и не более "защищённый" чем С.


> его шаблоны и недобны

удобны/не удобны по сравнению с чем ?
по сравнению с ничем и копипастом вручную - удобнее.
по стравнению с макросами - удобнее.


> и не дают норамльного контроля типов

Дают, когда он потребуется.


> не обязаны быть частью компилятора — это таки препроцессор

А как же SFINAE ? А как компилятор находит ошибки в шаблонах, которые ни разу не истанциированы ? А зачем употребления кейворда typename, когда зависимое имя есть тип. Нет, шаблоны - это неотъемлимая часть языка, и обрабатываются они компилятором а не препроцессором.


> это фигня. нет ничего хуже, чем два очень похожих, но разных
> языка.

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


 
palva ©   (2008-05-30 22:04) [123]


> когда оппоненту продемонстрировали, что кода не будет не
> то, что идентичного, а и вовсе никакого — пошли увёртки.
>

Какие увертки, когда я оказался прав. Вы еще раз прочитайте пост, который вы выборочно цитировали, и подумайте немного. Попытайтесь отбросить сны про слизняков.


 
ketmar ©   (2008-05-30 22:08) [124]

>[122] guav © (2008-05-30 21:59:00)
>Понятно, что он не менее и не более «защищённый» чем С.

не понятно. отчего тогда [116]? не от попытки ли сделать «более защищённым»?

>удобны/не удобны по сравнению с чем ?
с generics из oo2c.

>шаблоны — это неотъемлимая часть языка, и обрабатываются они
>компилятором а не препроцессором.

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

>Не вижу сильно боьшой проблемы
это значит лишь, что ты или феноменально внимателен и скрупулёзен, или никогда не делал ничего серьёзного на двух «очень похожих, но разных» языках.

---
Understanding is not required. Only obedience.


 
ketmar ©   (2008-05-30 22:11) [125]

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

я сделал именно описываемое. даже если файл назвать «a.c», всё равно g++ его не компилирует. тебе так сложно признать, что ты спорол чушь, ЧСВ мешает?

---
Understanding is not required. Only obedience.


 
palva ©   (2008-05-30 22:25) [126]


> тебе так сложно признать, что ты спорол чушь, ЧСВ мешает?

Вообще-то я всегда признаю, если я спорол чушь. Вот то, что вы из меня процитировали, отбросив все остальное, это действительно чушь. ЧСВ - еще одно непонятное слово...


 
ketmar ©   (2008-05-30 22:32) [127]

>[126] palva © (2008-05-30 22:25:00)
и какие такие слова я выкинул из цитаты, которые кардинально меняют её смысл? если бы они были, ты бы их радостно привёл и показал, что я не прав, как показал тебе я, что не прав ты — конкретным примером. но таких нет, а признаваться в ошибке неохота — отсюда рассуждения плана «если бы у бабушки был хрен, она была бы дедушкой, а если у неё хрен воображаемый, да представим, что это раньше был дедушка, а потом хрен отрезали…»

клиника.

---
Understanding is not required. Only obedience.


 
guav ©   (2008-05-30 22:37) [128]

> [124] ketmar ©   (30.05.08 22:08)
> отчего тогда [116]? не от попытки ли сделать «более защищённым»?

Я думал, это связано с тем, что в С++ более сложные неявные преобразования типов (копирующие конструкторы, операторы преобразования), больше фич зависящих от типизации (к разрешению перегрузок добавляется инстанциирование/специаизация шаблонов и перегрузка операторов), что вынудило повысить строгость системы типов (и в последствии даже улучшить контроль над преобразованиями (*_cast, explicit) ).


> >удобны/не удобны по сравнению с чем ?
> с generics из oo2c.

Не видел.
Лениво искать, можешь показать.
они такиже же как в дотнете ?


> а вот чем должны по стандарту… тут я на всякий случай промолчу

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


> никогда не делал ничего серьёзного на двух «очень похожих,
> но разных» языках.

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


 
ketmar ©   (2008-05-30 22:43) [129]

>[128] guav © (2008-05-30 22:37:00)
>Я думал, это связано с тем, что в С++ более сложные неявные
>преобразования типов

ну скажи мне, какого ангела char * не совместим с void *, а? вот какое такое преобразование типа этому мешает? я тупой, до меня не доходит. честно.

>они такиже же как в дотнете ?
не знаю, с вротнетом не работал, лениво смотреть. %-) вот цитата из stdlib"ы oo2c:

TYPE
 Entry(K: Key; V: Value) = RECORD
 (**Invariant for entries: When in use, @ofield{key} is not @code{NIL} and not
    @ovar{dummy}.  When not in use, @ofield{key} is either @code{NIL} or
    @ovar{dummy}.  A dummy key value cannot be replaced by @code{NIL}, since
    otherwise other keys may be lost.  *)
   hash: Hash;
   (**The hash value of the object stored in @ofield{key}.  This is computed
      once, at the time the object is added to the dictionary.  *)
   key: K;
   (**Key object.  For an unused slot, this is either @code{NIL} or
      @ovar{dummy}.  Use @oproc{IsSet} to determine if a given key is part of
      a valid item.  *)
   value: V;
 END;
 Table(K: Key; V: Value) = POINTER TO ARRAY OF Entry(K, V);
 Item*(K: Key; V: Value) = RECORD
   key*: K;
   value*: V;
 END;
 ItemArrayPtr*(K: Key; V: Value) = POINTER TO ARRAY OF Item(K, V);


>Но зачем самому писать на С, когда есть С++ мне не понятно
например, потому, что часть проекта — библиотека, которая должна использоваться как в цпп, так и в ansi c.

---
Understanding is not required. Only obedience.


 
ketmar ©   (2008-05-30 22:47) [130]

а, и уточнение генерика:

dict-: Dictionary.Dictionary(STRING, ArrayList.ArrayList(STRING));

Dictionary описан примерно так же, как Entry.

---
Understanding is not required. Only obedience.


 
palva ©   (2008-05-30 22:54) [131]

ketmar ©   (30.05.08 22:32) [127]
А почему про бабушку и дедушку в кавычках? Это тоже, типа, из меня цитата? :)

Бросьте! Я думаю, вы прекрасно понимаете что подразумевают, когда говорят о совместимости языков. И тыкать вас в те слова которые вы пропустили при цитировании не нужно. Просто большинство сишников через эти несовместимости давно прошли. И у них на тех местах, где у вас набитые шишки, уже привычные мозоли.


 
guav ©   (2008-05-30 23:45) [132]

> [129] ketmar ©   (30.05.08 22:43)

> ну скажи мне, какого ангела char * не совместим с void *,
> а? вот какое такое преобразование типа этому мешает?

Неявные преобразования в С++ - штука сильно хрупкая. Если из void* можно сделать char*, то здесь выполнение идёт по другому пути:
const size_t blockSize = 4096;

struct binaryblockwrapper
{
 binaryblockwrapper(void*, size_t = blockSize){} // accepts any data
};

struct superstring
{
 superstring(char*){} // accepts NULL terminated string.
 superstring(binaryblockwrapper){}
};

int _tmain(int argc, _TCHAR* argv[])
{
 void *p = malloc(blockSize);
 //...
 superstring s(p);
 return 0;
}



> вот цитата из stdlib"ы oo2c:

Entry(K: Key; V: Value) = RECORD
?

> Item*(K: Key; V: Value) = RECORD

?


 
ketmar ©   (2008-05-30 23:57) [133]

>[131] palva © (2008-05-30 22:54:00)
слив защитан.

>[132] guav © (2008-05-30 23:45:00)
>Если из void* можно сделать char*, то здесь выполнение идёт по другому
>пути:

убедил. перегрузка вообще идиотизм, и твой код отлично показывает, почему. %-)

>Entry(K: Key ; V : Value ) = RECORD

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

>> Item * (K: Key; V: Value) = RECORD
звезда — это «export», модуль экспортирует идентификатор. Оберон потому что.

---
Understanding is not required. Only obedience.


 
guav ©   (2008-05-31 00:22) [134]

> [133] ketmar ©   (30.05.08 23:57)
> ограничение на допустимые типы, не обязательное.

Ага. Ну так в C++ шаблонах можно его прикручивать через шаблонное метапрограммирование, а кроме того в C++0x обещают concepts.

Вот как было бы в С++ : Если ключ не может быть хеширован, то для типа K не будет найдена специализация хеш-функции. Если значение не имеет семантику значения, то ни сможет быть инстанциирован сам хешмэп.

Т.е. concepts C++0x или то как их делают сейчас скорее нужно для более юзер-френдли ошибки компиляции, чем для предотвращения компиляции бреда.

Далее, какие преимущества у этих generics перед шаблонами ?
Если они как дотнетовские генерики - т.е. не могут быть специализированы, параметризируются только типами и подставление осуществляется в рантайме - то есть как преимущества, так и недостатки.


 
ketmar ©   (2008-05-31 01:24) [135]

>[134] guav © (2008-05-31 00:22:00)
>Далее, какие преимущества у этих generics перед шаблонами ?

прежде всего — вменяемый синтаксис, а не иероглифобредятина. этого достаточно. %-)

---
Understanding is not required. Only obedience.


 
guav ©   (2008-05-31 01:51) [136]

> [135] ketmar ©   (31.05.08 01:24)

Угловые скобки хуже круглых ? Имхо наоборот, угловые не путаются с функциями и приведениями.


 
ketmar ©   (2008-05-31 02:54) [137]

>[136] guav © (2008-05-31 01:51:00)
>Имхо наоборот, угловые не путаются с функциями и приведениями.

в Обероне и круглые не путаются. вообще, о синтаксисе цпп я могу много ругательств написать, но мне уже лень. %-)

---
Understanding is not required. Only obedience.



Страницы: 1 2 3 4 вся ветка

Форум: "Прочее";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 1 MB
Время: 0.01 c
2-1213304675
MaryM
2008-06-13 01:04
2008.07.13
Drag &amp; Drop TreeView


2-1213011349
Johnnnnn
2008-06-09 15:35
2008.07.13
Как заполнить Flesh форму?


2-1213341681
Yury
2008-06-13 11:21
2008.07.13
посылка сообщения


2-1213209020
slavikdr
2008-06-11 22:30
2008.07.13
Есть задачка с веб-страницами


15-1211734954
Дмитрий С
2008-05-25 21:02
2008.07.13
Облегчить реализацию IDispach





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский