Back to site

Бьерн Страуструп'ы FAQ



Зменены 7 сакавіка 2010 г.

Гэта пытанні, якія людзі пытаюць мяне часта. Калі ў вас ёсць лепшыя пытанні ці каментары на адказы, не саромейцеся, напішыце мне bs@research.att.com. Калі ласка, памятайце, што я не магу марнаваць увесь свой час палепшыць свае хатнія старонкі.

Гэтая старонка канцэнтруецца на асабістае меркаванне і агульныя пытанні, звязаныя з філасофіяй. Па пытаннях, якія больш непасрэдна звязаныя з C++, моўныя асаблівасці і выкарыстанне C++ гл ў маёй C++ стыль і тэхніку FAQ. Для C++ тэрміналогіі і паняццяў, гл мой C++ гласарый. Для спасылкі на карысныя крыніцы C++ звесткі см. ў маёй C++, старонкаі маёй C++0 х FAQ. Для атрымання інфармацыі аб маіх кніг (у тым ліку агляды і інфармацыйнай падтрымкі), гл маю кнігу спіс. Для дакументаў і нумары ISBN для перакладаў з маіх кніг, гл маю публікацыю спісу.

Некаторыя мае адказы былі пераведзены на кітайскую мову, гл тут (спрошчаны) і тут (традыцыйны).

Індэкс


Як вы прамаўляеце "Бьерн Страуструп"?

Гэта можа быць цяжкім для не-скандынаваў.
Лепшае прапанову я чуў, яшчэ не было "пачаць з таго, ён некалькі разоў на нарвежскім мове, то матэрыял бульбы ў горла і зрабіць гэта яшчэ раз:-)" Вось файл WAV.

Для людзей, якія не могуць атрымаць гук, вось прапанова: Абодва маіх імёны прамаўляюцца з двух складоў: Bjar-пе-Strou strup. Ні, ні B J ў маіх першых імёнаў і падкрэсліў М. даволі слабая так што, магчыма Бе-ар-NEH або Па-ар-пе дасць ідэю. У першага ў маёй прозвішчы на?самой справе павінна было быць V які робіць першы склад канца далёка ўніз па горла: Strov-strup. У другога чымсьці нагадвае OO ў ООП, але ўсё ж коратка, можа быць, Strov-струпа дасць ідэю.

Так, гэта, верагодна, найбольш часта задаюць пытанне:-)

PS Мой першы клічуць Б'ёрн - не Б'ёрн (не імя), Бьерн (звязаных, але іншае імя), ні Барні (не звязаныя імя). Маё другое імя Страуструп - не Stroustroup, Stroustrop, Strustrup, Strustrop, Strustroup, Straustrup, ні Straustroup (дакументы, выкарыстоўваючы кожны з гэтых памылкамі друку можна знайсці з дапамогай Google).


Ці магу я задаць вам пытанне?

Вядома.
Я паспрабую адказаць на маю электронную пошту. Аднак, калі ласка, паспрабуйце не задаваць пытанне, на які адказаў на мой хатніх старонак. Таксама, калі ласка, не належце на аператыўны адказ. Я атрымліваю шматлістоў.

Ніжэй прыведзены спасылкі на


Чаму б вам не адкажа на вашы электроннай пошце?

Я раблю, але я атрымліваю шмат электроннай пошты.
Я лічу, што я адказваю на больш чым 95% (не спам) паведамленняў я атрымліваю. Тым не менш, часам я атрымліваю перапоўненыя. Некаторыя паведамленні былі згубленыя ў маю паштовую скрыню, некаторыя з іх затрымліваецца пакуль я не магу знайсці час, некаторыя з іх затрымліваецца, пакуль я не знаходзіў час для адказу набор паведамленняў, звязаных з (гэта часта бывае на каментары аб патэнцыйных памылках у маіх кнігах). На жаль, больш доўгія і удумлівыя паведамлення больш шанцаў атрымаць затрымкай, чым проста тыя, якія маюць простых адказаў.

Таксама, калі вы напішыце мне, калі ласка, паспрабуйце пераканацца, што я магу адказаць вам. Я сапраўды ненавіджу, калі я напісаў і адправіў адказ, толькі каб выявіць, што зваротны адрас з'яўляецца несапраўдным або недаступныя.

Два выгляду паведамленні маюць адносна высокія шанцы заблудзіцца: хатняе заданне пытанняў і пытанняў у форме "як я магу выкарыстоўваць гэтую ўласнасць бібліятэку?". Я крыху сумна не адказвае апошнім пытаннях, таму што часта чалавек просіць не разумее, што DOS, Windows, або любы іншы інтэрфейс C++ не ўваходзіць у стандарт З++ (і я не ў стане угнацца за вялікай колькасцю C++ бібліятэкі). Калі вы не атрымалі адказу, калі ласка, разгледзець, калі ваш пытанне быў адной з гэтых відаў.

Акрамя таго, калі Вы даяце сваё прозвішча, і я цяпер, верагодна, каб выдаліць паведамленне непрачытаных. Гэта новая палітыка. Я ніколі не быў вялікім прыхільнікам псеўданімамі, але я лічу, што шанец на ветлівае тэхнічных гутарку з чалавекам, які думае, што гэта прахалодна, каб схавацца за імя, як suuupergeeek або coolGuy3 становіцца занадта нізкай для мяне турбуюць спробы.


Чаму б вам не зрабіць свой сайт выглядаюць сучасна?

Я "змесціва правайдэр" не вэб-сайт дызайнера.
Я магу выкарыстоўваць свой час, каб палепшыць змест і знешні выгляд, але не адначасова.

Тое, што выглядае "крута і сучаснай" каму-то часта лічыцца благім густам кімсьці іншым, а мода хутка змяняцца. Акрамя таго, вельмі просты HTML загружае і адлюстроўвае хутчэй, чым усе астатняе, і многія людзі ўсё яшчэ пакутуюць ад павольных злучэннях Інтэрнэту.


Ці з'яўляецца "Бьерн" самазванцам?

Напэўна, не.
Большасць груп навін, інтэрв'ю і г.д., якія прыходзяць ад мяне прыходзяць ад мяне. Відавочным выключэннем з'яўляецца сумна вядомы IEEE "інтэрв'ю", які я знаходжу даволі несмешной. Я, як вядома, для адпраўкі паведамленняў у групы навінаў ад майго акаўнта Gmail, дзе мой карыстацкі ідэнтыфікатар "Бьерн", як-то, які, здаецца, бянтэжыць некаторых людзей. Калі вы сумняваецеся, падумайце стыль і змест падазраванага паведамленне, праверце іншыя паведамленні ў форуме, або спытаць.


Што ж такога добрага ў класы?

Заняткі там, каб дапамагчы вам арганізаваць ваш код і разважаць аб сваіх праграмах. Вы маглі б прыкладна сказаць, што эквівалентна класы існуюць, каб дапамагчы вам пазбегнуць памылак і, каб дапамагчы вам знайсці памылкі пасля таго, вы робіце памылку. Такім чынам, класы значна дапамагае абслугоўвання.

Клас прадстаўлення ідэі, канцэпцыі, у кодзе. Аб'ект класа уяўляе канкрэтны прыклад ідэі ў кодзе. Без класаў, чытач кода б здагадацца аб адносінах паміж элементамі дадзеных і функцыі - класы робяць такіх адносін відавочных і "зразумеў" кампілятара. З класаў, больш высокага ўзроўню, структуры вашай праграмы, прадстаўленыя ў кодзе, а не толькі ў каментарах.

Добра распрацаваны клас ўяўляе просты і зразумелы інтэрфейс для сваіх карыстальнікаў, хаваючы сваё прадстаўніцтва і захаванне сваіх карыстачоў ад неабходнасці ведаць аб гэтым прадстаўленне. Калі ўяўленне не павінна быць утоена - напрыклад, таму, што карыстачы павінны мець магчымасць змяніць любы элемент дадзеных так, як ім падабаецца - вы можаце думаць аб тым, што клас як "проста звычайная старая структура даных", напрыклад:

	Структура Пара {пары (сопзЬ радок & п, сопз радок & V): імя (п), значэнне (у) {} радок імя, значэнне};
Звярніце ўвагу, што нават гэтыя структуры могуць атрымаць выгаду з дапаможных функцый, такіх як канструктары.

Пры праектаванні класа, часта бывае карысна разгледзець, што гэта дакладна для кожнага аб'екта класа і ва ўсе часы. Такое ўласцівасць называецца інварыянтнай. Напрыклад, інварыянтаў вектара можа быць, што яго прадстаўленне складаецца з паказальніка на лік элементаў і, што колькасць элементаў захоўваецца ў цэлае лік. Гэта праца кожнага канструктара для стварэння класа інварыянт, такім чынам, каб кожны член функцыя можа спадзявацца на яго. Кожны член функцыя павінна пакідаць інварыянтнай сілу з моманту выхаду. Такое мысленне асабліва карысна для класаў, якія кіруюць рэсурсамі, такіх як замкі, разеткі і іншыя файлы. Напрыклад, клас дэскрыптар файла будзе інварыянтнай, што ён утрымоўвае паказальнік на адкрыты файл. Канструктар дэскрыптар файла адкрывае файл. Деструкторы свабодных рэсурсаў, набытых канструктараў. Напрыклад, деструктор дэскрыптар файла закрывае файл, адкрыты ў канструктару:

Клас file_handle {грамадскасці: 
file_handle (сопзЬ сЬаг * п, сопзЬ сЬаг * RW) 
{F = Еореп (п, RW), калі (F == 0) кінуць Open_failure (п);} ~ file_handle () 
{fclose (е);}//деструктор//... 
прыватныя: FILE * F;};
Калі вы яшчэ не запраграмаваныя з класамі, Вы знойдзеце часткі гэтага тлумачэння незразумелых і вы будзеце недаацэньваць карыснасць класаў. Паглядзіце на прыклады. Як і ўсе добрыя падручнікі, TC++ PLмае мноства прыкладаў, гл, напрыклад, Тур стандартнай бібліятэкі. Большасць сучасных C++ бібліятэкі складаюцца (акрамя ўсяго іншага) класаў і бібліятэк падручнік з'яўляецца адным з лепшых месцаў, каб знайсці прыклады карысных класаў.


Што такое "ААП" і што гэта так цудоўна ў гэтай нагоды?

Ёсць шмат азначэнняў "аб'ектна-арыентаваным", "аб'ектна-арыентаванае праграмаванне" і "аб'ектна-арыентаваных моў праграмавання". Для доўгія тлумачэнні таго, што я называю "аб'ектна-арыентаваным", чытайце Чаму C++ не толькі аб'ектна-арыентаваная мова праграмавання. Тым не менш, аб'ектна-арыентаванага праграмавання з'яўляецца стыль праграмавання, якія адбываюцца з Simula (каля 40 гадоў таму!), Абапіраючыся інкапсуляцыі, атрымання ў спадчыну і палімарфізму. У кантэксце C++ (і шматлікіх іншых мовах з іх каранямі ў Simula), гэта азначае, праграмаванне з выкарыстаннем іерархіі класаў і віртуальных функцый, якія дазваляюць маніпуляцыі аб'ектамі розных тыпаў праз выразна вызначаныя інтэрфейсы і дазваляюць праграме быць прадоўжаны паступова праз выснову.

Глядзіце Што добрага аб класах? за ідэю аб тым, што вялікая аб "простых класаў". Справа аб арганізацыі класаў у іерархіі класаў заключаецца ў выразе іерархічныя адносіны паміж класамі і выкарыстоўваць гэтыя адносіны для спрашчэння кода.

Каб сапраўды зразумець ААП, шукаць нейкія прыклады. Напрыклад, у вас можа быць дзве (ці больш) драйвераў прылад з агульным інтэрфейсам:

клас драйвераў {//агульны інтэрфейс драйвера публіцы: віртуальнае Int чытаць (знак * р, Int N) = 0; 
//чытаем макс п знакаў з прылады на р 
//вяртае колькасць прачытаных знакаў віртуальнай Ьоо скіду () = 0; 
//скід прылады віртуальнай праверыць статус () = 0; 
//чытаем стане};
Гэты драйвер проста інтэрфейс. Яна вызначаецца без звестак членаў і мноства чыстых віртуальных функцый. Драйвер можа быць выкарыстаная праз гэты інтэрфэйс і шмат розных відаў кіроўцы могуць рэалізоўваць гэты інтэрфейс:
Driver1 класа: грамадскія драйвераў {
//кіроўца грамадскасці: Driver1 (Register); 
//канструктар Int чытаць (знак *, Int п); Ьоо скіду (); 
Праверка стану (); прыватныя: 
//дэталі рэалізацыі, у тым ліку. 
прадстаўленне}; Driver2 класа: грамадскія драйвераў {
//іншага кіроўцы грамадскасці: Driver2 (Register); 
Int чытаць (знак *, Int п); Ьоо скіду (); Праверка стану (); прыватныя:. 
//дэталі рэалізацыі, у тым ліку, прадстаўленне};
Звярніце ўвагу, што гэтыя драйверы захоўвання дадзеных (дзяржаўнай) і аб'ектаў, з іх не можа быць створаны.
Яны рэалізуюць функцыі, вызначаныя ў драйвер. Мы можам ўявіць сабе выкарыстоўванага драйвера накшталт гэтага:
несапраўдным е (Driver & D) 
//выкарыстоўваць драйвер {статус old_status = d.check (); 
//... 
d.reset (); сімвал BUF [512]; Int х = d.read (BUF, 512); 
//...}
Ключавым момантам тут з'яўляецца тое, што F () не трэба ведаць, які тып драйвера ён выкарыстоўвае: усё, што трэба ведаць, што ён перадаецца драйвера, гэта значыць інтэрфейс да розных відах кіроўцаў.
Мы маглі б спасылацца е () наступным чынам:
несапраўдным г () {Driver1 d1 (Рэгістр (0xf00)); 
//ствараем Driver1 для прылады 
//з прыладай рэгістрацыі па адрасе 0xf00 Driver2 d2 (Рэгістр (0xa00)); 
//ствараем Driver2 для прылады 
//з прылады рэгістрацыі па адрасе 0xa00 
//... Int распрацоўніка; CIN>> распрацоўніка, калі (Dev == 1) F (d1); 
//выкарыстанне d1 яшчэ ж (d2); 
//выкарыстанне d2 
//... }
Заўважым, што пры F () выкарыстоўвае драйвер правільны выгляд аперацыі няяўна абраны падчас выканання. Напрыклад, калі F () перадаецца d1, d.read () выкарыстоўвае Driver1: чытаць (), у той час, калі F () перадаецца d2, d.read () выкарыстоўвае Driver2: чытаць (). Гэта часам называюць падчас адпраўкі ці дынамічнай дыспетчарызацыі. У гэтым выпадку няма ніякай магчымасці, што F () мог ведаць тып прылады яна называецца, таму што мы выбіраюць яе, грунтуючыся на ўваходзе.

Калі ласка, звярніце ўвагу, што аб'ектна-арыентаванае праграмаванне не з'яўляецца панацэяй. "ААП" азначае не проста "добра" - калі Ёсць няма уласцівага іерархічныя сувязі паміж асноўнымі паняццямі ў вашай праблемы, то ніякае колькасць іерархіі і віртуальных функцый палепшыць ваш код. Сіла ООП, што Ёсць шмат праблем, якія могуць быць з карысцю выяўляецца з дапамогай іерархіі класаў - галоўная слабасць ААП з'яўляецца тое, што занадта шмат людзей спрабуюць прымусіць занадта шмат праблем у іерархічнай форме. Не кожная праграма павінна быць аб'ектна-арыентаваным. У якасці альтэрнатывы, разгледзім просты класаў, абагульненага праграмавання, і свабодна стаяць функцыі (як у матэматыцы, З і Fortran).


Што такое "радавое праграмаванне", а што добрага ў гэтым?

Generic праграмаванне праграмавання на базе параметризации: Вы можаце параметризации тыпу з іншым (напрыклад, вектар з тыпамі элементаў) і алгарытм з адным (напрыклад, функцыя сартавання з функцыяй параўнання). Мэта абагульненага праграмавання з'яўляецца абагульненне карысную структуру алгарытм або дадзеныя для найбольш агульнай і карыснай форме. Напрыклад, вектар цэлых лікаў у парадку, і так гэта функцыя, якая знаходзіць найбольшае значэнне ў вектар цэлых лікаў. Тым не менш, агульнае рашэнне, якое забяспечвае вектар любога тыпу карыстальнік захоча выкарыстаць і функцыю, якая знаходзіць найбольшае значэнне ў любы вектар, яшчэ лепш:

	вектар
Гэтыя прыклады ўзятыя з STL (кантэйнеры і алгарытмы частка ISO C++ стандартная бібліятэка), для кароткага ўвядзення, гл Тур стандартнай бібліятэкіад TC++ PL.

Абагульненае праграмаванне з'яўляецца ў пэўным сэнсе больш гнуткія, чым аб'ектна-арыентаванага праграмавання. У прыватнасці, ён не залежыць ад іерархіі. Напрыклад, няма іерархічных адносін паміж Int і радкі. Абагульненае праграмаванне як правіла, больш структураваныя, чым ООП, на самай справе, агульны тэрмін, які выкарыстоўваецца для апісання абагульненага праграмавання з'яўляецца "параметрычны палімарфізм", з "Спецыяльная палімарфізм" быць адпаведны тэрмін для аб'ектна-арыентаванага праграмавання. У кантэксце C++, абагульненае праграмаванне вырашае ўсе імёны на этапе кампіляцыі, яно не звязана з дынамічнай (падчас выканання) адпраўкі. Гэта прывяло абагульненага праграмавання, каб стаць дамінуючым у раёнах, дзе падчас выканання мае важнае значэнне.

Звярніце ўвагу, што абагульненае праграмаванне не з'яўляецца панацэяй. Ёсць шмат частак праграмы, якія не маюць патрэбу ў параметризации і шмат прыкладаў, калі падчас адпраўкі (ААП) не патрабуецца.


Чаму C++ дазваляе небяспечнага кода?

Гэта значыць, чаму C++, падтрымка аперацый, якія могуць быць выкарыстаны для парушаюць правілы статычнай (падчас кампіляцыі) тыпу бяспекі?
  • для доступу да апаратных непасрэдна (напрыклад, для лячэння цэлага як паказальнік на (адрас) прылады рэгістры)
  • для дасягнення аптымальнага выканання часу і прасторы паказчыкаў (напрыклад, бескантрольны доступ да элементаў масіва і доступ неотмеченным, каб аб'ект праз паказальнік)
  • для забеспячэння сумяшчальнасці з C
Тым не менш, гэта добрая ідэя, каб пазбегнуць небяспечнага кода, як ад чумы, калі вы на самой справе не патрэбна адна з гэтых трох функцый:
  • не выкарыстоўваць прывядзення
  • захоўваць масівы з інтэрфейсаў (схаваць іх у вантроб высокапрадукцыйных функцый і класаў, дзе яны неабходныя і пісаць астатняй часткі праграмы з дапамогай належнай радкі, вектары і г.д.)
  • пазбегнуць несапраўдным * (трымаць іх унутры функцыі нізкага ўзроўню і структуры дадзеных, калі яны вам сапраўды патрэбныя і гэтага тыпізаваных інтэрфейсамі, як правіла, шаблоны, для карыстальнікаў)
  • пазбягаць саюзаў
  • калі ў вас ёсць якія-небудзь сумневы з нагоды правільнасці паказальнікаў, выкарыстанне смарт-паказальнік, замест гэтага,
  • не выкарыстоўваць "голы" навіны і выдаляе (выкарыстанне кантэйнераў, рэсурс ручкі і г.д., замест гэтага)
  • не выкарыстоўвайце...- стыль пераменным лікам функцый ("Printf стылю")
  • Пазбягайце макрасаўexcpt для ахоўнікаў ўключаюць
Амаль усе C++ кода могуць прытрымлівацца гэтым простым правілах.
Калі ласка, не бянтэжыць той факт, што вы не можаце прытрымлівацца гэтых правілах, калі вы пішаце код C ці C-код у стылі C++.


Што такое лепшая кніга вучыцца C++ з?

Існуе не адна кніга, якая лепш за ўсё падыходзіць для кожнага чалавека.
Там не магло быць. Людзі занадта розныя, у тым, як яны вучацца, у тым, што яны ўжо ведаюць, у чым яны маюць патрэбу, у тым, што яны хочуць, і ў якой намаганні, якія яны гатовыя зрабіць. Ёсць нямала выдатных кніг па С++. Паглядзіце АККУ (Асацыяцыі C і C++ карыстальнікаў) сайта. Гэта адно з лепшых месцаў для кніжных рэкамендацый дасведчаных праграмістаў, якія не баяцца выказваць свае думкі (кнігагандляроў, як правіла, даюць ружовыя агляды і водгукі ў форме "Гэтая кніга з'яўляецца дасканалым, я люблю яго, я прачытаў амаль трох главах, і не магу чакаць, каб даведацца больш "горш, чым бескарысна - чаму хто-то за саветам аб тым, як навучыцца C++ ад таго, хто цалкам не хапае C++, вопыт б'е мяне). ACCU стаўкі кніг для ўзроўню вопыту патрабуецца, і агульнае якасць.

Для людзей, якія не запраграмаваны да або прыходзяць з іншай мовы і хочуць адносна спадзісты ўвядзенне ў сучасным C++, разгледзім Праграмаванне: прынцыпы і практыка выкарыстання C++. Гэта кніга, якую я напісаў для пачаткоўцаў (першы год студэнты універсітэта) праграмавання класа і ён выйграў ад трох гадоў выкарыстання ў класе.

Для людзей, якія праграмісты і жадае, каб даведацца новыя канцэпцыі і прыёмы з класічнага падручніка, я рэкамендую, C++ Programming Language (3-е выданне). Гл. нататку аб структуры, зместу і мэтам "C++ Programming Language (3-е выданне)": Кніга прызначана для праграмістаў з некаторым вопытам і хочаце асвоіць C++. Яна не накіравана на не-праграмістаў, спрабуючы даведацца іх першы мова праграмавання або выпадковага праграмісты спрабуюць атрымаць павярхоўнае ўяўленне пра C++ як мага хутчэй. Такім чынам, гэтая кніга прысвечана канцэпцыі і метады, і выходзіць на які болю быць поўнымі і дакладнымі. У ім апісваецца "чысты З++", гэта значыць мова, незалежна ад якой-небудзь асяроддзі распрацоўкі праграмнага забеспячэння або фонд бібліятэкі (акрамя стандартнай бібліятэкі, вядома).

Калі вы хочаце ведаць, чаму C++, так яно і ёсць, паглядзіце на Дызайн і эвалюцыя C++ (D & E). Разуменне праектных крытэрыяў і абмежаванняў дапамагае лепш пісьмова праграм.


Колькі часу трэба для таго, каб даведацца C++?

Гэта залежыць ад таго, што вы разумееце пад "навучання".
Калі вы праграміст C вы можаце даведацца досыць, C++, каб зрабіць вас больш эфектыўнымі ў C-стылі праграмавання ў дзень.

На TAMU, мы выкарыстоўваем Праграмаванне: прынцыпы і практыка выкарыстання C++ , каб атрымаць першакурснікаў (1-ы курс) па асновах C++ і метады праграмавання ён падтрымлівае (у прыватнасці, аб'ектна-арыентаванае праграмаваннеі абагульненае праграмаванне) у семестр.

З іншага боку, калі вы хочаце быць цалкам задавальняе ўсе асноўныя C++ моўныя канструкцыі, з абстракцыі дадзеных, аб'ектна-арыентаванае праграмаванне, абагульненае праграмаванне, аб'ектна-арыентаванага дызайну і г.д., вы можаце лёгка выдаткаваць год ці два - калі Вы яшчэ не знаёмыя з тымі метадамі (скажам, ад Java або C #).

Гэта той час, якое патрабуецца, каб даведацца C++? Можа быць, але зноў жа, гэта значыць тэрміны, мы павінны разгледзець, каб стаць лепш дызайнерамі і праграмістамі. Калі драматычныя змены, як мы працуем і думаем аб пабудове сістэм не з'яўляецца нашай мэтай, то навошта вывучаць новы мову? У параўнанні з Час, неабходнае, каб навучыцца граць на фартэпіяна або стаць свабодна гаворыць на замежных (натуральнага) мовы, навучанне новых і розных моў праграмавання і праграмавання стыль лёгка.

Для большай колькасці назіранняў аб вывучэнні C++ гл D & Eабо запіску ад comp.lang.c++ , які я напісаў некаторы час назад.


Ведаючы З з'яўляецца неабходнай умовай для навучання C++, ці не так?

Няправільна.
Агульны набор З і З++ лягчэй вучыцца, чым С. Там будзе менш памылак тыпаў злавіць ўручную (C++ тып сістэмы з'яўляецца больш жорсткім і больш выразным), меншае колькасць трукаў, каб даведацца (C++ дазваляе вам выказваць больш рэчаў, без хітрыкаў), а лепш бібліятэк. Лепшае пачатковае падмноства C++, каб даведацца, ці не "усё С".

Глядзіце навучання Standard C++ як новага мовы для абмеркавання выбар C++ канструкцый, метадаў і бібліятэк для навучання ў раннім узросце. Для прыкладу кніг, якія прымае гэты падыход сістэматычна гл. Страуструпа: Праграмаванне: прынцыпы і практыка выкарыстання C++і Koenig & Му: "Паскоранае C++" ад Addison Wesley ў C++ In Depthсерыі.


Калі я даведаюся, чысты мову ГА да C++, каб стаць сапраўдным праграмістам OO?

Колькасць навучання што-нешта новае амаль заўсёды добрая ідэя.
Тым не менш, кожны мову адрозніваецца і мае свой?уласны стыль і асаблівасці. Код, напісаны ў некаторых нібыта "чыстай" ГА стылі па ўзоры некаторых іншых моў (і ўсё дзівацтвы) часта неаптымальнай і расчараванне, калі занадта літаральна транскрибируется ў C++. Акрамя таго, "пісьмовая форма толькічыстыя аб'ектна-арыентаваны код "не з'яўляецца адным з маіх ідэалаў, гл маю OOPSLA асноўным Чаму C++ не толькі аб'ектна-арыентаванага мовы праграмавання. Калі вы хочаце стаць добрым C++ праграміст і не некалькі месяцаў, каб зэканоміць, засяродзіцца на C++ і канцэпцый яна ўвасабляе.


Як мне пачаць вывучаць C++?

Натуральна, што ў значнай ступені залежыць ад таго, што вы ўжо ведаеце, і ваша прычын для вывучэння C++.
Калі вы пачатковец у праграмаванні, я настойліва рэкамендую вам знайсці дасведчанага праграміста, каб дапамагчы вам. У адваротным выпадку непазбежныя памылкі пра мову канцэпцыі і практычныя праблемы, звязаныя з ажыццяўленнем вы карыстаецеся, могуць павялічыць у сур'ёзныя расчараванні.

Вам спатрэбіцца падручнік для навучання C++. Гэта той выпадак, нават калі ваша рэалізацыя ідзе з дастатковым он-лайн дакументацыі. Прычына ў тым, што мова і бібліятэку дакументацыі разам з прыкладамі кода не з'яўляюцца добрымі настаўнікамі паняццяў. Як правіла, такія крыніцы маўчаць пра тое, чаму ўсё так, як яны ёсць, і якія перавагі вы можаце чакаць (і які вы не павінны чакаць) з тэхнікай. Засяродзьцеся на канцэпцыі і метады, а не мовы тэхнічныя дэталі.

Выбіраючы кнігу, паглядзіце на адзін, які ўяўляе Standard C++ і выкарыстоўваць стандартныя сродкі бібліятэкі на аснове комплекснага падыходу з самага пачатку. Напрыклад, чытаючы радкі з уваходнага павінен выглядаць прыкладна так

Радок с; 
//Standard C++ стыль CIN>> с;
і не так
сімвал з [MAX]; 
/* Standard C стылю * 
/зсапЕ ("% S", з);
Шукайце кнігі рэкамендацыі ад праграмістаў з цвёрдымі C++ вопыт.

Я рэкамендую Праграмаванне: прынцыпы і практыка выкарыстання C++, але памятайце, што ніхто не кніга лепш для ўсіх. Звярніце ўвагу на рэцэнзіі на АККУ (Асацыяцыі C і C++ карыстальнікаў) сайта.

Мэта пісаць ідыёматычны C++: пазбягайце проста пісаць код у стылі вашага папярэдняга мову з дапамогай C++ сінтаксіс, мала што можна атрымаць ад простага змены сінтаксісу.


Ці будзеце вы дапамагчы мне з маёй хатняй працы?

Не. Выбачайце.
Я не раблю (чужых) хатняе заданне. Я атрымліваю занадта шмат запытаў аб дапамозе ў выкананні хатніх заданняў і дапамогу ў пошуку памылак у студэнцкіх праграм, якія будуць у стане знайсці час. Ва ўсякім выпадку, маючы далёкі эксперт выправіць вашыя праграмы не самы лепшы спосаб вучыцца. Паспрабуйце знайсці мясцовы жыхар з C++, вопыт, які вы можаце звярнуцца за радай. Добры настаўнік лепш за ўсё дапамагчы студэнту можа быць, можа быць, менавіта таму яны не так лёгка знайсці.

Акрамя таго, няма, я не прапаную "добры праект для студэнтаў для працы на". Мой вопыт паказвае, што вучыцца досыць аб студэнт і яго/яе курс, каб ведаць, што ўзровень складанасці патрабуецца і які праект уяўляе цікавасць займае шмат часу. Думаць аб добрым праекце, то нетрывіяльнае, і растлумачыць, што менавіта праект і як падысці да яго можа заняць некалькі паведамленняў і некалькі гадзін. Я проста не маюць, што такое час. Памятаеце, што гэтыя запыты прыходзяць па крайняй меры раз у тыдзень. Нарэшце, некаторыя студэнты, падобна, ідэя, што калі я прапаную праект, я маральна абавязаны падаць досыць падрабязную даведку па яго завяршэнні.

Ідэі: Паглядзіце на вучэннях у МС++ PL3 або іншыя добрыя падручнікі. Многія з тых, практыкаванні прызначаны для трымаць студэнт заняты на працягу некалькіх дзён, і чытаць гэтыя практыкаванні могуць натхніць прадпрымальны студэнт да так-то падобнае. Ці паглядзіце на не-кампутарных навук часткай вашага свету: Можа быць, біялогіі праект мог бы выкарыстаць для падтрымкі новага прылады вымярэння або сябрам вывучэння гісторыі маглі б выкарыстоўваць палепшаны інтэрфейс базы дадзеных. Многія з лепшых праектаў і лепшае выкарыстанне кампутараў знаходзяцца па-за межамі традыцыйных кампутарных навук.

Глядзіце таксама маю C++ стыль і метады FAQ. Рэальная пачаткоўцаў, якія стаяць перад іх першым "чытаем трохі дадзеных, зрабіць што-то да яго, і вырабляць якія-небудзь дадзеныя" практыкаванні могуць быць зацікаўлены ў вельмі простая праграма або праграма чытання радкі з ўваходны.


Дзе я магу атрымаць бясплатны кампілятар З++?

З шматлікіх месцах, гл мой C++ кампілятараў спіс.


Вы шведскай?

Не, я дацкі.
Паглядзіце на маю біяграфію.


Які самы лепшы спосаб палепшыць свой C++ праграмы?

Я не магу сказаць.
Гэта залежыць ад таго, як вы яго выкарыстоўваеце. Большасць людзей недаацэньваюць абстрактных класаў і шаблонаў. І наадварот, большасць людзей, сур'ёзна ставіць пад празмерным і макрасаў. Звярніце ўвагу на адну з маіх работабо кнігідля ідэй. Адзін са спосабаў мыслення абстрактных класаў і шаблонаў у якасці інтэрфейсаў, якія дазваляюць больш чыстым і лагічнага прадстаўлення паслуг, чым гэта лёгка забяспечыць з дапамогай функцый або асобныя укаранелыя іерархіі класаў. Гл. мой стыль і метады FAQдля некаторых канкрэтных прыкладаў і ідэй.


Ці мае значэнне, якую мову праграмавання я магу выкарыстоўваць?

Так, але не чакайце цудаў.
Некаторыя людзі мяркуюць, што мова праграмавання можа ці, па крайняй меры, павінны вырашыць большасць сваіх праблем з сістэмай будынка. Яны асуджаныя на пошук вечна дасканалым мовай праграмавання і стаць неаднаразова апыняліся падманутымі. Іншыя звольніць моў праграмавання як неістотныя "дэталі рэалізацыі" і ўкладваць грошы ў развіццё працэсаў і метадаў праектавання. Яны асуджаныя на праграму ў COBOL, C, і ўласныя мовы дызайн назаўжды. Добры мова - такіх, як C++ - можа зрабіць многае для дызайнера і праграміста, да тых часоў, як яе моцныя бакі і абмежаванні выразна разумець і паважаць.


Хіба ANSI/ISO стандарты камітэта сапсаваць C++?

Не, яны/мы зрабілі добрую працу.
Вы можаце спрачацца з дэталямі (і я, часам гучна), але я шчаслівы з мовай і новай стандартнай бібліятэкі. ISO C++ з'яўляецца лепшым і больш паслядоўны мову, чым больш раннія версіі C++. Вы можаце напісаць значна больш вытанчаным і зручным C++ праграм сёння, чым гэта было магчыма, калі стандарты запуску працэсу. Новы стандарт бібліятэка таксама сапраўднай знаходкай. Прадастаўленне радкі, спісы, вектары, карты і базавыя алгарытмы для такіх асноўных тыпаў робіць асноўнае адрозненне з тым, як можна падысці C++. Глядзіце бібліятэцы кіраўніка C++ Programming Language (3-е выданне) (Частка 3: Тур стандартнай бібліятэкі даступны ў электронным выглядзе) або адзін з маіх апошніх прац.

C++0 хбудзе яшчэ лепш.


Калі ў нас будзе стандарце З++?

У нас адна!
Канчатковае тэхнічнае адбылося галасаванне 14 лістапада 1997 года, каля 10:30 раніцы. Гл прэс-рэліз ад ISO C++ стандарты камітэта. Пасля тэхнічнай галасы, стандартныя была ратыфікавана ў 1998 годзе 22-0 ўсенародным галасаваннем. Стандарт ISO/IEC 14882. Нязначных перагляд быў выдадзены ў 2004 годзе, гл. мой C++ старонкі.

Гэта мова і стандартныя бібліятэкі апісаны ў C++ Programming Language (3-е выданне). C++ кампілятар і бібліятэкі пастаўшчыкі ўжо пастаўляе рэалізацыі, якія вельмі блізкія да праекту стандарту.

Першы праект наступны стандарт C++0 х, знаходзіцца ў публічнага разгляду і канчатковага галасавання, як чакаецца, у 2010 годзе.


Дзе я магу атрымаць машыначытэльную версію стандарту?

C++ стандарт (ISO/IEC 14882) даступны для запампоўкі на ANSI электронны магазін. Пошук па "14882", знайсці "INCITS/ISO/IEC 14882-2003 Мовы праграмавання - C++" кошт (калі я пішу гэта) US $ 30,00 запазычанасці он-лайн з дапамогай крэдытнай карты. Спампаваць дакумент ў фармаце PDF формы, каля 3Mb агульны памер.

Праект стандарту, як гэта было ў больш позніх стадыях працэсу стандартаўможна спампаваць бясплатна.

Майце на ўвазе, што стандарт не падручнік, і нават эксперт праграмісты зробяць лепш даведацца пра C++ і новага C++ функцыі з падручніка.

Глядзіце мой C++0 х FAQдля спасылкі на C++0 х матэрыял.


Ці ёсць якія-небудзь функцыі вы хочаце выдаліць з C++?

Не зусім так.
Людзі, якія задаюць такое пытанне звычайна думаюць, адной з асноўных функцый, такіх як множны ўспадкоўванне, выключэнні, шаблонаў і тыпаў падчас выканання ідэнтыфікацыі. C++ была б няпоўнай без іх. Я прааналізаваў іх канструкцыі на працягу многіх гадоў, а разам з камітэтам стандартаў я палепшыў некаторыя іх падрабязнасці, але ніхто не мог быць выдалены, не наносячы шкоды.

Большасць магчымасцяў я не люблю з мовы гледжання праектавання (напрыклад, сінтаксіс і описатель масіва распад) з'яўляюцца часткай падмноства З З++ і не могуць быць выдалены без нанясення шкоды праграмістаў, якія працуюць у рэальных умовах. C++ з C сумяшчальнасць ключавых дызайнерскае рашэнне мове, а не маркетынгавы трук. Сумяшчальнасць было цяжка дасягнуць і падтрымліваць, але рэальную карысць рэальным праграмістам прывёў, і да гэтага часу вынік сёння. Да цяперашняга часу, C++ мае асаблівасці, якія дазваляюць праграмістам ўстрымацца ад выкарыстання найбольш праблемных З асаблівасцямі. Напрыклад, стандартныя кантэйнеры бібліятэкі, такія як вектар, спіс, карта, і радок можа быць выкарыстаная, каб пазбегнуць найбольш складаных нізкаўзроўневых паказальнік маніпуляцыі.


У чым розніца паміж C+ 98 і 03 C+?

З гледжання праграміста няма ні аднаго.
C+ 03 перагляд стандарту рэлізе выпраўленая памылка для выканаўцаў для забеспячэння большай паслядоўнасці і партатыўнасць. У прыватнасці, падручнік і даведачныя матэрыялы, якія апісваюць C+ 98 і 03 C+ можа выкарыстоўвацца як узаемазаменныя усімі, акрамя кампілятараў і стандартаў гуру.

Асабіста я імкнуся не выкарыстоўваць тэрмін "C+ 03", таму што гэта лёгка зблытаць з "C++0 х" і можа скласціся ўражанне, што C+ 98 састарэлая.


Што будзе C++0 х выглядаць?

Гл. мой C++0 х FAQ.
Мэта складаецца ў "х" ў C++0 х, каб стаць '9 ': C+ 09, а не (скажам) C++0 ха (шаснаццатковы:-).

Звярніце ўвагу, што мова З++ будзе заставацца стабільнай, паколькі сумяшчальнасць заўсёды выклікае сур'ёзную занепакоенасць. Камітэт імкнецца не парушаць вашы (стандартны адпаведны код).

Я коратка прадставіў некаторыя з маіх ідэй на панэлі ў SD2001w і ў трохі больш падрабязна ў дакладзе на канферэнцыі вясной 2002 ACCU. Глядзіце таксама мае правілы для дызайну З++0 х і іншых нядаўніх работ на маёй старонцы публікацый. Для больш поўнага спісу прапаноў гл. WG21 сайта.


Калі ў нас будзе новы ARM?

Эліс і Страуструпа: Анатаваны C++ Reference Manualгутарковай вядомай як "Узвод" быў напісаны ў 1989 годзе і паслужыў базай для C++ намаганняў стандартам.
Гэта ўжо даволі старыя і не апісвае Standard C++.

Па цэлым шэрагу прычын, планавай замены ("ARM++"), які апісвае стандарт ISO C++ і не была напісана. Як працаваць на C++0 х зараз ідзе, гэта занадта позна для ARM++ на аснове ISO C++ 1998. Мне здаецца, што я не знайду час, каб напісаць новы ARM. 4-е выданне TC++ PL і 2-е выданне Праграмаванне: прынцыпы і практыка выкарыстання C++ , каб адпавядаць C++0 х (калі C++0 х стала дамінуючай C++), верагодна, будуць больш важнымі.


Калі вы будзеце публікаваць 4-е выданне "C++ Мова праграмавання"?

Не хутка.
Вызначэнне C++ і фундаментальныя метады, якія ён падтрымлівае, наўрад ці істотна зменіцца да C++0 х становіцца дамінуючай. Калі я пішу, я стаўлю мэтай для доўгіх "тэрмін прыдатнасці" і ISO C++ стандартная забяспечвае асноўную стабільнасць. У гэтым кантэксце важна, што C++ Programming Language (3-е выданне)апісвае стандарт C++, стандартнай бібліятэцы, і метады, якія яны падтрымліваюць, а не які канкрэтнай рэалізацыі і некаторыя ўласныя бібліятэкі. Што знаходзіцца ў Бягучы ISO C++ стандартная і апісана ў маёй 3. Выданне, застаюцца ў сіле C++ для доўгія гады - нават пасля перагледжанага стандарту з'яўляецца.

Дзіўна, нямецкі пераклад "Special Edition" завецца 4-е выданне.


Ці варта купляць "Special Edition" з "C++ Мова праграмавання"?

Вядома!
Купіць рана і часта:-)

Калі сур'ёзна, розніца паміж бягучых наклады спецыяльныя выданні і 3-е выданне проста цвёрдым пераплёце (і розніца ў кошце маецца на ўвазе, што больш моцныя вокладкі).

Калі б я быў?C++ праграміст, які не чытаў C++ Programming Language (3-е выданне), я б купляць і чытаць або 3-е выданне або спецыяльнае выданне. Калі б я выкарыстаў мае падручнікі і спасылкі цяжка, я б абраў цвёрдым пераплёце. Вечка на трэці лепшы мяккай вокладцы даступная, але яна не роўная цвёрдай вокладцы спецыяльнага выдання.

Калі ў мяне ўжо было 3-е выданне, я б купіў SE, калі мой дзеючы асобнік быў зношванне або калі копія была ранняй друку (трэці ў цяперашні час каля 30 друкаваных выданняў і ГП каля 20).

У параўнанні з першым друку, спецыяльныя выданні і апошнія наклады маюць 3-е выданне 1000+ выпраўленні і ўдакладненні. У цяжкіх C++ карыстачу, я лічу, што значным. Ёсць таксама два новых прыкладанні (крыху больш за 100 старонак і даступны для запампоўкі: Мовы і стандартнай бібліятэкі Надзейнае выключэнне).

Існуючыя матэрыял не рухаўся так нумары старонак могуць быць выкарыстаны для абазначэння матэрыялу ў старых друкаваных выданняў, новыя накладам 3-е выданне, а ў SE.

SE таксама паляпшэнне азначніка.


У чым розніца паміж "TC++ PL" і "Праграмаванне" кнігі?

C++ Мова праграмавання ў першую чаргу напісана для дасведчаных праграмістаў, хто хоча вывучыць C++.
Гэта стыль, які прафесійнага кнігі. праграмаванне - прынцыпы і практыка выкарыстання C++, у першую чаргу напісана для тых, хто хоча навучыцца праграмаванні з выкарыстаннем C++. Ён можа быць выкарыстаны/чытаюць людзі, якія не маюць або толькі слабы фон праграмавання, а таксама людзі, якія хочуць даведацца сучасныя метады праграмавання, такіх, як аб'ектна-арыентаванае праграмаванне і абагульненае праграмаванне, так як падтрымліваецца C++. Гэта стыль, што ў тэксце кнігі.


Дзе я магу знайсці свабодны машыначытальны копіі вашых кніг?

Ёсць ніякіх прававых свабоднай машыначытальных копій маіх кніг.
Калі вы бачыце, копія ў свабодным доступе яно павінна быць аўтарскіх правоў (гэта значыць, яна была скрадзена).

Addison-Wesley прапануе электронную версію праз Safari онлайн богаслужбовых кнігах


Які кампілятар З++ вы рекомендуете? Якія бібліятэкі?

Я не рэкамендую. Было б не справядліва. Аднак, не атрымаць апошнія версіі. Натуральна, што новыя версіі кампілятараў прыкладны стандарт ІСО значна бліжэй, чым кампілятары ад некалькі гадоў таму.

За няпоўны пералік C++ рэалізацыі, гл. мой C++ кампілятараў спіс.

Таксама, дзе гэта магчыма, аддаюць перавагу стандартныя бібліятэкі для нестандартных "бібліятэкі фонду" і імкнуцца звесці да мінімуму выкарыстанне ўласных пашырэнняў.


Ці з'яўляецца Java мову, які распрацавалі, калі Вы не павінны быць сумяшчальныя з C?

Колькасць Java не з'яўляецца нават блізка.
Калі людзі настойваюць на параўнанні C++ і Java - як яны, здаецца, робяць - я прапаную ім чытаць Дызайн і эвалюцыя C++ (D & E), каб зразумець, чаму C++, так яно і ёсць, і разгледзець абодва мовы ў святле крытэрыяў праектавання я набор для C++. Гэтыя крытэры, відавочна, будзе адрознівацца ад крытэраў Java каманда Sun. Нягледзячы на падабенства сінтаксічных, C++ і Java вельмі розных мовах. У многіх адносінах, Java здаецца бліжэй да Smalltalk, чым C++.

Большая частка адносная прастата Java - як і для большасці новых моў - збольшага ілюзія, а часткова ў залежнасці ад яго няпоўнасць. Чым больш праходзіць часу, Java будзе расці значна ў памерах і складанасці. Гэта будзе падвойны або патройны памер і рост залежыць ад рэалізацыі пашырэнняў і бібліятэк. Вось так кожны камерцыйна паспяховых мовы распрацаваў. Дастаткова зірнуць на любы мову вы лічыце паспяховымі на вялікіх маштабах. Я не ведаю ні аднаго выключэння, і Ёсць важкія прычыны для гэтага з'явы. [Я напісаў гэтую да 2000 года; цяпер бачыць папярэдні прагляд Java 01/05.]

Я пракаментаваў (адмоўна) аб шуміха Java і прыпісваецца вялікая частка поспеху Java на маркетынг. Напрыклад, гл маю HOPL-3 паперы. Сёння (2010), сцвярджэнняў аб Java больш рэальнасці заснаваныя і менш бязвыплатна прыніжальны аб альтэрнатывах. Гэта не заўсёды так. Напрыклад, параўнаць арыгінальную 1995 Java-белая папера з версіі вы знойдзеце на вэб-сайце (часам з надпісам "арыгінальныя афіцыйны дакумент Java"); стар 69 будзе добрым месцам для пачатку.

Java не залежыць ад платформы, гэта платформа. Як і ў Windows, гэта ўласныя камерцыйныя платформы. Гэта значыць, вы можаце пісаць праграмы для Windows/Intel або Java/JVM, і ў кожным выпадку вы пішаце код для платформы належаць адной карпарацыі і аптымальнай для камерцыйнай выгады ад гэтай карпарацыі. Было адзначана, што вы можаце пісаць праграмы на любой мове, для віртуальнай машыны Java і звязаныя з аперацыйнымі сістэмамі аб'ектаў. Тым не менш, віртуальная машына Java, і г.д., якія моцна зрушаныя ў карысць Java. Гэта далёка не будучы агульным разумна мовы В. М./OS.

Асабіста я буду прытрымлівацца разумнай партатыўных C++ для большасці відаў работ я думаю, больш за ўсё і выкарыстоўваюць розныя мовы для адпачынку.


Што вы думаеце пра C #?

У мяне няма каментароў па C # ў якасці мовы.
Гэта зойме шмат, каб пераканаць мяне, што свет мае патрэбу ў яшчэ адзін уласны мову. Гэта будзе асабліва цяжка пераканаць мяне, што ён мае патрэбу мову, які цесна інтэграваны з канкрэтнымі ўласная аперацыйная сістэма.

. Калі вы хочаце напісаць выключна для Чыстая платформы, C # гэта не самы горшы альтэрнатыва, але памятайце, што З++ з'яўляецца цалкам падтрымлівае - хоць і менш моцна разадзьмутымі - альтэрнатыва для гэтай платформы.


Што вы думаеце пра C++/CLI?

C++/CLI ўяўляе сабой набор пашырэнняў да ISO C++, якая забяспечвае надзвычай поўны "прывязка" З++ CLI Microsoft (общеязыковая інфраструктура).
Ён быў стандартызаваныя ECMA (ECMA-372). Я рады, што ён робіць усе магчымасці CLI лёгка дабрацца з З++ і рады, што З++/CLI гэта значна лепш, мовы, чым яго папярэднік "Managed C++". Тым не менш, я менш шчаслівы, што C++/CLI дасягае сваіх мэтаў, істотна павялічваючы C++ з асобнай функцыі мовы для кожнай функцыі інтэрфейсу каманднага радка (інтэрфейсы, уласцівасці, шаблоны, паказальнікі, атрыманне ў спадчыну, пералічанымі, і многае, многае іншае). Гэта будзе асноўнай крыніцай блытаніны (што б хто-небудзь робіць або кажа). Мноства новых аб'ектаў мовы C++/CLI у параўнанні з стандартам ISO C++ праграмістаў спробы пісаць невыноснымі код, які (часта нябачна) сталі цесна звязаны з Microsoft Windows.

CLI падае набор інтэрфейсаў (у сістэме аб'ектаў), якія моцна адрозніваюцца ад традыцыйных інтэрфейсаў аперацыйнай сістэмы сродкаў і прыкладанняў. У прыватнасці, гэтыя інтэрфейсы маюць семантыку, якая не можа быць поўнасцю або зручна выказаць у звычайных мовах праграмавання. Адзін са спосабаў апісання CLI гэтак жа (часткова) "платформы" або "віртуальнай машыны". Яна складаецца з вялікага набору функцый мовы (ўспадкоўванне, метады, пятля канструкцый, механізмаў зваротнага выкліку і г.д.), падтрымка вялікага набору бібліятэк падставы (BCL), а таксама прадуманая сістэма метададзеных. CLI часам апісваецца як "мова нейтральны". Тым не менш, мова, які не прымае вялікае падмноства з гэтых аб'ектаў не можа выкарыстаць нават Basic. NET аб'ектаў (або будучай АС Microsoft Windows сродкаў, мяркуючы, што планы Microsoft не змяняюцца) і мова, які не можа выказаць усегэтыя функцыі не могуць быць выкарыстоўваецца для рэалізацыі рэсурсаў азначае, якімі могуць карыстацца іншыя мовы. Такім чынам, CLI з'яўляецца "нейтральнай мовай" толькі ў тым сэнсе, што кожны мова павінна падтрымліваць усе CLI функцый, якія будуць "першакласных" на. Net.

Я аддаю перавагу абавязковае для выканання некалькіх прымітываў, прадставіць у выглядзе простых выклікаў функцый і простыя структуры дадзеных на любой мове, магчыма, інкапсуляваць у пэўным мове бібліятэк. Для CLI, гэта можа ў лепшым выпадку будзе зроблена для спажыўцоў аб'ектаў CLI толькі. Мова, які выкарыстоўваецца для вытворчасці CLI модулі павінны быць у стане выказаць усе аб'екты CLI, уключаючы метададзеныя. Толькі мову, які можа зрабіць гэта можна лічыць моўных сістэм праграмавання на. Net. Такім чынам, Microsoft C++ Група прыйшла да высновы, што толькі ўбудаваны мова аб'ектаў, прымальных для сваіх кліентаў. Іх дызайн адлюстроўвае меркаванне, што прымае абсалютна ніякіх абмежаванняў на тое, што частка CLI можа быць выяўленае ў C++ з C++/CLI пашырэнняў, абсалютна ніякага шматслоўе параўнанні з іншымі мовамі пры выкарыстанні CLI аб'ектаў, а таксама абсалютна ніякіх накладных расходаў у параўнанні з іншымі мовамі. Яны накіраваныя на захаванне C++ у якасці дамінуючага мовы сістэмы праграмавання для Windows.

Як заўсёды, я стаўлю акцэнт на партатыўнасцьі рэкамендаваць людзям для распрацоўкі прыкладанняў, так што доступ да сістэмы канкрэтных аб'ектаў праз выразна вызначаныя інтэрфейсы, названыя ў ISO C++ (напрыклад, не выкарыстоўваць C++/CLI наўпрост). У Windows, гэта часам можа быць нязручна ў параўнанні з выкарыстаннем C++/CLI аб'екты наўпрост, але гэта адзіны спосаб атрымаць мабільнасць і ступень незалежнасці ад вытворцы. Відавочна, што зброя даўжынёй падыход да CLI не можа быць забяспечана, калі мэта кавалак кода з'яўляецца прадастаўленне CLI інтэрфейс для спажывання іншым кодам. Звярніце ўвагу, што я прызнаю неабходнасць сістэмна-арыентаваных пашырэнняў і, што Microsoft не толькі C++ пастаўшчыка з такімі пашырэннямі, я проста моцна аддаюць перавагу мець справу з такімі пашырэннямі праз "тонкія інтэрфейс", паказаны ў стандарце ІСО C++.

Як працаваць з сістэмай спецыфічных пашырэнняў па сваёй сутнасці складанае пытанне. Microsoft C++ каманды, асабліва Херб Саттер, захавала актыўны дыялог з (іншымі) чальцоў ISO C++ стандарты камітэта такім чынам, каб адносіны паміж ISO C++ і пашыраны C++/CLI ў канчатковым рахунку будзе распрацавана. У нас ёсць доўгі паслужны канструктыўнай сумеснай працы ў ISO C++ камітэта. Акрамя таго, для мінімізацыі блытаніны паміж ISO C++ і C++/CLI пашырэнняў, Microsoft у цяперашні час пераглядаюць свае Visual C++ дакументацыі, каб паспрабаваць выразна адрозніваць C++/CLI з ISO C++ (просты некваліфікаваны C++ азначае, ISO C++). Я спадзяюся, што іншыя будуць вынікаць, што свінец.

На складаным і супярэчлівым пытаннем аб тым, што CLI абавязковымі/пашырэнняў для C++ будзе называцца, я аддаю перавагу C++/CLI, як скарачэнне для "пашырэння інтэрфейсу каманднага радка ISO C++". Захоўванне C++ як частка назвы нагадвае людзям, што з'яўляецца базавым мовай і дапаможа захаваць C++ ўласнае падмноства C++ з C++/CLI пашырэнняў. C/C++ праблемы сумяшчальнасці паказаць, як важна захаваць гэта падмноства уласнасці.

Вось некаторыя дакументы, звязаныя з C++/CLI:


Чаму вы так зацікаўлены ў мабільнасці?

Паспяховая праграма доўгажывучых; жыцця ахоплівае дзесяцігоддзі не з'яўляюцца рэдкасцю.
Добрае прыкладанне/праграма часта перажывае апаратнае ён быў распрацаваны для аперацыйнай сістэмы яна была напісана для, сістэма базы дадзеных яна першапачаткова выкарыстоўвалася, і г.д. Часта, добры кавалак праграмнага забеспячэння перажыве кампаній, якія пастаўлялі асноўныя тэхналогіі, якія выкарыстоўваюцца для стварэння яго.

Часта паспяховая праграма прыкладанні/у кліентаў/карыстальнікаў, якія аддаюць перавагу разнастайнасць платформаў. Набор пажадана платформаў змены як змены колькасці карыстальнікаў. Будучы прывязаныя да адной платформе або аднаго пастаўшчыка, абмяжоўвае прымяненне/праграма "Патэнцыял выкарыстання.

Відавочна, што поўная незалежнасць ад платформы несумяшчальная з магчымасцю выкарыстоўваць усе платформы канкрэтных аб'ектаў. Тым не менш, часта можна прыблізны незалежнасць платформы для прыкладанняў шляхам доступу платформы сродкі праз "тонкія інтэрфейс", якая прадстаўляе гледжання прыкладання яго навакольнага асяроддзя, як бібліятэка.


Вы сапраўды рэкамендую Ада над C++ для вялікіх праектаў?

Не, я паняцця не маю, хто пачаў гэты слых, але яно павінна быць празмеру захоплены або шкоднасныя Ада адданым.


Вы б параўнаць C++ для "якога-небудзь мовы"?

Не, прабачце, я не буду.
Вы можаце знайсці прычыну ў ўводны ноты Дызайн і эвалюцыя C++:

"Некаторыя рэцэнзенты папрасіў мяне параўнаць C++ з іншымі мовамі Гэта я вырашыў не рабіць Такім чынам, я зноў пацвердзіў даўняе і цвёрдае перакананне:... Мова параўнання рэдка значных і яшчэ радзей справядлівай добрае параўнанне асноўных праграмавання моў патрабуе больш намаганняў, чым большасць людзей гатовыя выдаткаваць, досвед працы ў шырокім дыяпазоне абласцей прымянення, жорсткая падтрыманне асобных і бесстаронні погляд, і пачуццё справядлівасці. У мяне няма часу, і як дызайнер З++, мая бесстароннасць ніколі не будзе ў поўнай меры заслугоўвае даверу.

Я таксама турбавацца пра з'яву я неаднаразова назіраў у сумленнай спробы мовай параўнанняў. Аўтары імкнуцца быць бесстароннім, але безнадзейна перадузятым, засяродзіўшы ўвагу на адно прыкладанне, адзіны стыль праграмавання, або адной культуры сярод праграмістаў. Горш, калі на адной мове, значна больш вядомы, чым іншыя, тонкае змяненне ў перспектыве адбываецца: Недапрацоўкі вядомага мовы лічацца нязначнымі і простыя рашэнні прадстаўленыя, тады як аналагічныя дэфекты на іншых мовах, якія лічацца асноватворнымі. Часта, абыходныя шляхі, звычайна выкарыстоўваюцца ў менш вядомых моў проста невядомых людзей, якія робяць параўнання або лічыцца нездавальняючым, паколькі яны будуць непрыдатным да працы ў больш знаёмым мове.

Акрамя таго, інфармацыю аб добра вядомым мове, як правіла, які поўнасцю адпавядае сучасным патрабаванням, а для менш вядомых моў, аўтары абапіраюцца на некалькі гадоў інфармацыю. Для моў, якія варта параўнанне, параўнанне мовы X, як гэта вызначана тры гады назад у параўнанні з мовы Y, як ён з'яўляецца ў апошняй эксперыментальная рэалізацыя не з'яўляецца ні справядлівым, ні інфарматыўным. Такім чынам, я ўсталяваць абмежаванні на каментары пра іншых мовах, акрамя C++ для абагульненняў і вельмі канкрэтных заўваг ".

Тым не менш, я лічу, C++ лепшы выбар мовы праграмавання для шырокага кола людзей і прыкладанняў.


Іншыя робяць параўнаць іх моў C++; хіба гэта не раздражняюць?

Ён робіць, калі гэта робіцца некампетэнтна або для атрымання камерцыйнай выгады.
Найбольш шырока распаўсюджаны параўнання, як правіла, напісаныя прыхільнікамі якога-небудзь мовы, Z, каб даказаць, што Z лепш, што і іншыя мовы. Улічваючы яго шырокае прымяненне, C++ часта першае месца ў спісе моў, на якіх прыхільнікі Z хоча даказаць, саступае. Часта такія дакументы ", апублікаванай" ці распаўсюджвацца кампанія, якая прадае Z як частка маркетынгавай кампаніі. Дзіўна, але шматлікія, здаецца, прымаеце паперы неразгледжанымі напісана людзей, якія працуюць на кампанію, прадавалую Z "даказаць", што Z лепш сур'ёзна. Адной з праблем з'яўляецца тое, што заўсёды Ёсць доля праўды ў такіх параўнанняў. У рэшце рэшт, ні адна мова лепш, чым любы іншы усімі магчымымі спосабамі. C++, вядома, не ідэальная, але селектыўнага ісціна можа быць найбольш прывабным, а часам і поўнасцю ўвесці ў зман.

Пры поглядзе на мове параўнання разгледзець, хто напісаў яго, падумайце, калі апісанні фактычнай і справядлівай, а таксама калі крытэрыяў параўнання самі па сабе з'яўляюцца справядлівымі для ўсіх моў разглядаецца. Гэта нялёгка.


Вы не будзеце параўноўваць C++ для іншых моў, але вы пішаце выкрывальны гаворкі пра C++?

Я не пішу выкрывальны прамовы (гэта варожая характарыстыка якой-небудзь тэкст), але я лічу гэта разумным - магчыма, нават абавязак - для тых, хто прызначаны мовай растлумачыць свае вартасці і абараняць яе ад варожых характарыстыкі.
Глядзіце спіс маіх публікацый. У paticular гл. у маёй шырокай і рэцэнзаванне дакументаў для гісторыі ACM па праграмаванні канферэнцыі:
  • Б. Страуструп: Гісторыя C++: 1979-1991. ACM HOPL-II. 1993 год.
  • Б. Страуструп: Эвалюцыя мовы ў сабе і для рэальнага свету: C++ 1991-2006 гг. ACM HOPL-III. 2007 год.
Часта я таксама адзначыць абмежаванасць C++ і асноўных палажэнняў дызайн C++ (гл., напрыклад, D & E).


C лепш, чым З++ для невялікіх праектаў, не ці так?

Не па маім меркаванні.
Я ніколі не бачыў праект, для якога C была лепш, чым C++ па любой прычыне, але адсутнасць добрага кампілятара Сі++.


Ці з'яўляецца C падмноства C++?

У строгай матэматычным сэнсе, то З не з'яўляецца падмноствам C++.
Ёсць праграмы, якія сапраўдныя С, але не дзейнічае C++ і нават некалькі спосабаў напісання кода, які мае іншае значэнне ў З і З++. Тым не менш, C++ падтрымлівае кожны тэхналогія праграмавання падтрымліваецца C. Кожная праграма C можа быць запісана ў асноўным такім жа чынам у C++ з тым жа падчас выканання і эканоміі прасторы. Гэта не рэдкасць, каб мець магчымасць канвертаваць дзесяткі тысяч радкоў ANSI C да C-стылі C++ на працягу некалькіх гадзін. Такім чынам, C++ ў такой жа ступені пашырэннем ANSI C, як ANSI C з'яўляецца падмноствам K & R C і колькі ISO C++ з'яўляецца пашырэннем C++, як яна існавала ў 1985 годзе.

Добра напісаныя C, як правіла, З++ і. Напрыклад, кожны прыклад у Кернигана і Рычы: "Мова праграмавання C (другое выданне)" таксама C++ праграмы.

Прыклады C/C++ праблем з сумяшчальнасцю:

Int асноўных () 
{падвойныя SQ2 = SQRT (2);/* Не З++: выклік неаб'яўленай функцыі */Int S = SizeOf 
('');/* маўчыць розніца: 1 ў C++ SizeOf (INT) у C */}
Выклік неабвешчаная функцыя бедных стыль у З і незаконным ў C++. Так перадачы аргументаў на функцыю, выкарыстоўваючы заяву, што не спіс аргументаў тыпу:
несапраўдным е ();/* аргумент тыпу не згаданых */несапраўдным г () 
{е (2);/* дрэнным стылі C. Ня C++ */}
У C, пустэча * можна няяўна пераўтварыць у любы тып паказальніка, і свабодна-краме размеркавання, як правіла, робіцца з дапамогай таНос (), якая не мае магчымасці праверыць, калі "дастаткова" памяці прапануецца:
пустата * таНос (size_t); пустэча ж (Int N) 
{Int * р = таНос (п * SizeOf (Char));/* не C++. 
У C++, вылучаюць, выкарыстоўваючы `новай '*/сімвал с; пустэча * ру = &c; 
Int * пі = ру/* невідавочнае пераўтварэнне пустэчы * у цэлае *. Не ў C++ */}
Звярніце ўвагу на магчымую памылку выраўноўванне выкліканых невідавочнае пераўтварэнне пустэча * для Int *. Глядзіце C++ альтэрнатыва пустэча * і таНос ().

Пры пераўтварэнні з С у З++, трэба ўлічваць, што C++ мае некалькі ключавых слоў, чым C:

Int класа 2 =/* OK ў С. Сінтаксічная памылка ў C++ */INT віртуальных = 3;/* OK ў С. Сінтаксічная памылка ў C++ */
За выключэннем некалькіх прыкладаў, такіх, як тыя, паказана вышэй (і падрабязна пералічаны ў стандарце З++ і ў Дадатку У C++ Programming Language (3rd Edition)), C++ з'яўляецца пашырэннем З (Дадатак B даступная для запампоўкі).

Звярніце ўвагу, што "C" у пунктах вышэй ставіцца да класічнага C і C89. C++ ня нашчадкам C99, C++ і C99 з'яўляюцца братамі і сёстрамі. C99 замяняе некалькі магчымасцяў раман для C/C++ несумяшчальнасці.


У чым розніца паміж З і C++?

З++ з'яўляецца прамым нашчадкам C, што захоўвае амаль усе З як падмноства. C++ забяспечвае больш надзейную праверку тыпаў, чым З і непасрэдна падтрымлівае шырокі дыяпазон стыляў праграмавання, чым С. З++ з'яўляецца "лепшай З" у тым сэнсе, што ён падтрымлівае стылі праграмавання ажыццяўляецца з дапамогай C з лепшай праверкай тыпаў і больш пазначэнняў падтрымкі (без страты эфектыўнасці). У тым жа сэнсе, ANSI C з'яўляецца лепшай З, чым у K & R С. Акрамя таго, C++ падтрымлівае абстракцыю дадзеных, аб'ектна-арыентаванае праграмаванне і абагульненае праграмаванне (гл. C++ Programming Language (3-е выданне) "; Дадатак У абмеркаванні праблемы сумяшчальнасці даступны для запампоўкі).

Я ніколі не бачыў праграму, якая можа быць выказана лепш у З, чым у C++ (і я не думаю, што такая праграма магла б існаваць - кожны пабудаваць у З мае відавочныя C++ эквівалент). Тым не менш, існуюць яшчэ некалькі асяроддзяў, у якіх падтрымка C++ настолькі слабая, што ёсць перавага выкарыстання C замест гэтага. Ёсць не ўсё, што многія з тых, хто застаўся, хоць, гл. маю (няпоўны) спіс кампілятараў.

Для абмеркавання дызайну C++, уключаючы абмеркаванне яго адносіны з C бачыць Дызайн і эвалюцыя C++.

Звярніце ўвагу, што "C" у пунктах вышэй ставіцца да класічнага C і C89. C++ ня нашчадкам C99, C++ і C99 з'яўляюцца братамі і сёстрамі. C99 замяняе некалькі магчымасцяў раман для C/C++ несумяшчальнасці. Вось апісанне адрозненняў паміж C+ 98 і C99.


Вы сапраўды думаеце, што З і З++, могуць быць аб'яднаны ў адзіны мову?

Я думаю, што гэта было б вельмі добра для C/C++ супольнасць, калі яны былі.
Гэта значыць, калі на C/C++ несумяшчальнасці сістэматычна і цалкам ліквідаваны, і што будучыня развіццё было арганізавана такім чынам, каб прадухіліць новыя несумяшчальнасці з развіваюцца. Незалежна ад таго, што магчыма, гэта іншае пытанне.

Мой асноўны кропкай з'яўляецца тое, што бягучы C/C++ несумяшчальнасць "няшчасныя выпадкі гісторыі", якія не маюць фундаментальных прычын іх (хоць усе яны "выглядалі як добрая ідэя, у той час" некаторым кампетэнтным і добранамераных чалавек). C/C++ несумяшчальнасці прадастаўляць ніякіх пераваг у грамадстве ў цэлым, выклікаюць сур'ёзныя праблемы для значнай часткі C/C++ супольнасць, і мог, - з вялікай працай - быць ліквідаваны.

Для значна больш падрабязнае выкладанне маіх поглядаў на C/C++ сумяшчальнасць гл серыю артыкулаў я пісаў аб гэтым:

  • Б. Страуструп: C і C++: аналіз сумяшчальнасці. C/C++ Часопіс карыстальніка. Верасні 2002 года. Pdf версіі.
  • Б. Страуструп: C і C++: чахол для сумяшчальнасці. C/C++ Часопіс карыстальніка. Жніўні 2002 года. Pdf версіі.
  • Б. Страуструп: C і C++: Браты і сёстры. C/C++ Часопіс карыстальніка. Ліпеня 2002 года. Pdf версіі.
  • Б. Страуструп: суперніцтва паміж дзецьмі: C і C++. AT & T Labs - Навукова-даследчы тэхнічны справаздачу. TD-54MQZY. Студзеня 2002 года.
Я мяркую, што калі несумяшчальнасці былі выключаны (шляхам ўнясення змяненняў у З і З++), усё яшчэ будзе аб'екты, званыя C і C++, але потым C сапраўды было б вызначыць як падмноства C++.

Калі ласка, звярніце ўвагу, што гэтыя працы былі напісаны ў канцы 2001 і пачатку 2002 года, калі яшчэ можна было сабе ўявіць скаардынаваныя дзеянні C і C++ камітэтаў па стандартах вядучых да практычных выніках да канца дзесяцігоддзя. Гэтага не адбылося.


Чаму вы зрабілі C++ (амаль), сумяшчальныя з C?

Я хацела C++, каб быць сумяшчальным з поўнага мовы з дастатковай прадукцыйнасці і гнуткасці для нават самых патрабавальных сістэм праграмавання.
Я дасканалы жах вытворчасці яшчэ не яшчэ адзін прыгожы мову з ненаўмысных абмежаванняў. Гл. раздзел 02/07 Дызайн і эвалюцыя C++ для гістарычных дэталяў і чытаць артыкулы ў Няўжо вы думаеце...? для (рэтраспектыўнае) тэхнічныя абмеркавання C/C++ праблемы з сумяшчальнасцю.

У той час я лічыў C лепшых сістэм мова праграмавання даступныя. Гэта было не так відавочна, то (1979) як потым стала, але я павінен быў эксперты, такія як Дэніс Рытчы, Стыў Джонсан, Сэндзі Фрэзер, Грэг Чессон, Дуг Макилрой, а Браян Керниган па калідоры, у якога я мог бы вучыцца і атрымаць зваротную сувязь. Без іх дапамогі і рады, і без C, C++ была б асуджаная на правал.

Насуперак чуткам паўтарацца, я ніколі не казаў, што я павінен быў выкарыстаць C, і я не быў ніколі не казаў, каб не выкарыстоўваць С. У самай справе, першы C++ кіраўніцтва вырасла з TROFF крыніца кіраўніцтва С, што Дэніс даў мне. Многія новыя мовы былі распрацаваны ў Bell Labs, у "Даследаванні" па крайняй меры, не было ніякіх правілаў захавання мову фанатызму.


Што вы думаеце пра C/C++?

Не, гэта не зусім пытаньне, якое я часта атрымліваю.
У гэтым сэнсе, гэта толькі "падробленыя FAQ" у гэтым FAQ. Тым не менш, яна павінна быць FAQ, таму што людзі выкарыстоўваюць "C/C++", як калі б гэта азначала нешта канкрэтнае і як калі б яны ведалі, што гэта значыць, што прыводзіць да шмат блытаніны і пакуты. Людзі павінны спытаць: "Што такое C/C++?" , А затым на адлюстраванне спыніць выкарыстанне тэрміна. Гэта шкодзіць.

Існуе не мову, званы "C/C++". Фраза, як правіла, выкарыстоўваецца людзьмі, якія не маюць паняцця аб праграмаванні (напрыклад, супрацоўнікаў HR-мэнэджараў і беднымі). Акрамя таго, ён выкарыстоўваецца людзьмі, якія простым не ведаю, C++ (і часта не C небудзь). Калі выкарыстоўваецца праграмістамі, гэта звычайна азначае "З++ С з некалькімі карыснымі і мноства бескарысных функцый, дададзеных складаныя" адносіны. Часта, гэта кропка гледжання людзей, якія любяць пісаць свае ўласныя радкі і хэш-табліц з невялікім веданнем стандартнай бібліятэкі за Printf і тетсру. Ёсць людзі, якія прытрымліваюцца абмежаванага падмноства C++ для цалкам важкія прычыны, але яны (наколькі я заўважыў), не людзі, якія кажуць "C/C++".

Я выкарыстоўваю C/C++ толькі ў такія фразы, як "C/C++ сумяшчальнасць" і "C/C++ супольнасць".


Калі C++ прыдумаў?

Я пачаў працаваць на тое, што стала C++ у 1979 годзе.
Першапачатковая версія была названая "C з класамі". Першая версія C++ выкарыстоўваўся для ўнутраных патрэб у AT & T у жніўні 1983 года. Назва "C++" быў выкарыстаны канцы таго ж года. Першая камерцыйная рэалізацыя была выпушчаная кастрычніка 1985, у той жа час, як публікацыя першага выдання C++ мова праграмавання. Шаблоны і апрацоўка выключных сітуацый былі ўключаныя ў канцы 1980-х і задакументаваныя ў Анатаваны C++ Reference Manual і C++ Programming Language (2-я рэдакцыя).

Цяперашняе вызначэнне C++ з'яўляецца ISO C++ Standardапісана ў C++ Programming Language (3-е выданне).

Вы можаце знайсці больш поўную шкалу і больш падрабязныя тлумачэнні ў Дызайн і эвалюцыя C++і гісторыі C++: 1979-1991.


Чаму вы вынаходзіць C++?

Я хацеў напісаць эфектыўных праграм сістэм у стылях натхнёныя Simula67.
Каб зрабіць гэта, я дадаў ўмовы для лепшай праверкі тыпаў, абстракцыі дадзеных і аб'ектна-арыентаванае праграмаванне на З больш агульнай мэтай было стварэнне мовы, на якім я мог бы напісаць праграмы, якія былі як эфектыўнымі, так і элегантна. Многія мовы прымусіць вас выбіраць паміж гэтымі двума альтэрнатывамі.

Канкрэтных задач, якія прымусілі мяне пачаць распрацоўку і ажыццяўленне C++ (першапачаткова называўся "C з класамі") былі звязаны з гандлёвай сеткі аперацыйнай сістэмы па сеткі.

Вы можаце знайсці больш падрабязныя тлумачэнні ў Дызайн і эвалюцыя C++. Глядзіце таксама Гісторыя C++: 1979-1991і Развіццё мовы ў сабе і для рэальнага свету: C++ 1991-2006 гг.


Чаму AT & T падтрымкі развіцця C++?

Калі я ўпершыню распрацавана C++, AT & T пабудаваны сістэм большай складанасці і з большай надзейнасцю, чым патрабаванні большасці арганізацый.
Такім чынам, мы павінны былі паўплываць на рынак і дапамагчы ўсталяваць стандарты, якія адказваюць нашым патрэбам - інакш мы б не прылады для пабудовы нашай сістэмы. Прадстаўлены самому сабе "прамысловасць" створыць мовы і інструменты для працы з "сярэдні" праблем. Сапраўды гэтак жа настаўнікі маюць тэндэнцыю засяроджвацца на мовы і інструменты, якія служаць студэнтам і даследнікам добра - нават калі яны не маштабуецца для самых патрабавальных задач.

У той час, калі я распрацоўваў C++ - а да гэтага, калі Кен Томпсан і Дэніс Рытчы распрацаваў Unix і C - AT & T, верагодна, самы вялікі ў свеце грамадзянскі карыстальнік (і спажывец) праграмных сродкаў. Затым, мы, верагодна, выкарыстоўваліся больш шырокі дыяпазон сістэм - ад драбнюткіх ўбудавальных працэсараў для найбуйнейшых суперкампутараў і сістэм апрацоўкі дадзеных. , Якія ставяць у раздзел кута сістэмы, якія былі дастасавальныя ў многіх тэхнічных культур і на шматлікіх платформах. З і З++ былі распрацаваны з такімі патрабаваннямі на ўвазе.

Такім чынам супольнасці мае важнае значэнне, і ўласныя функцыі разглядаюцца як абмяжоўвае выбар платформаў і пастаўшчыкоў. Як следства AT & T быў і застаецца асноўным прыхільнікам фармальных стандартаў (напрыклад, ISO C і ISO C++).

На самай справе, AT & T зарабіў дастаткова грошай на Cfront, мой арыгінальны C++ кампілятар, плаціць за развіццём C++ у некалькі разоў.


У вас ёсць C++?

Не, калі хто-небудзь "валодае C++", ён павінен быць ISO.
AT & T даў права на C++ кіраўніцтва, якое я напісаў ISO. ISO C++ Standard , абаронена аўтарскім правам ISO.

Кампілятара пастаўшчыкі не плацяць ганарараў мне, ні AT & T для C++ і ISO стандарты ўяўляюць сабой спецыфікацыі прызначаныя для бязвыплатнае выкарыстанне ўсіх (як толькі яны заплацілі ISO або нацыянальнага стандарту камітэт па сваёй копіі стандарт). Асобныя кампілятары з'яўляюцца ўласнасцю іх адпаведных вытворцаў/пастаўшчыкоў.

"Але хто-небудзь з ШАС заявілі, што яны валодаюць C++", з'яўляецца тое, што не так? Гэта поўная лухта. Я бачыў, што інтэрв'ю. ШАС хлопец відавочна не ведалі, што C++ быў, называючы яго "Сі++". Самае большае, што ШАС можа мець ва ўласнасці 15-гадовая і сур'ёзна састарэлую версію Cfront - мой арыгінальны C++ кампілятар. Я быў дастаткова асцярожны, каб не патэнта або гандлёвай маркі нічога агульнага з C++. Гэта адна з прычын мы пішам просты "C++", а не "C++ (TM)". C++ стандарт Неабцяжараны патэнтаў - камітэт старанна правяраецца, што таксама.


Адкуль назва "C++" бяруцца?

Кіраўнік 3 D & E: `` Я выбраў C++, таму што быў маленькага росту, былі добрыя інтэрпрэтацыі, і не ў форме "прыметнік C" 'У C++ можа, у залежнасці ад кантэксту, варта чытаць як "далей" "пераемнік", або "прырашчэнне", хоць гэта заўсёды вымаўляецца як "плюс плюс".
Назва C++ і яго другое месца C++ з'яўляюцца прасвяднай крыніц для жартаў і каламбураў - амаль усе з якіх былі вядомыя і ацэнены, перш чым назва была абрана. Назва C++ быў прапанаваны Рыкам Mascitti. Упершыню ён быў выкарыстаны ў снежні 1983 года, калі ён быў адрэдагаваны ў канчатковай копіі [Страуструп, 1984] і [Страуструп, 1984c].

У главе 1 TC++ PL: `` імя C++ (вымаўляецца як "бачыць плюс плюс") было прыдумана Рыкам Mascitti ў летам 1983 года. Імя азначае эвалюцыйны характар?зменаў З; "++" з'яўляецца аператарам З прыростам. Трохі карацей назву "C+" з'яўляецца сінтаксічнай памылкі, яна таксама выкарыстоўваецца ў якасці імя незвязаных мове. Знаўцы семантыкі З знаходзяць C++ саступае++ C. Мова не называецца D, таму што гэта пашырэнне C, і ён не спрабуе ліквідаваць праблемы, выдаляючы функцыі. Для яшчэ адну інтэрпрэтацыю назвы C++, гл. дадатак да [Оруэла, 1949].''

"З" у З++ мае доўгую гісторыю. Натуральна, гэта назва мовы Дэніс Рытчы распрацаваны. Неадкладнае продка C быў інтэрпрэтаваць нашчадкам BCPL званыя B распрацаваны Кеном Томпсанам. BCPL была распрацавана і рэалізавана Марцін Рычардс з Кембрыджскага універсітэта падчас наведвання Масачусецкім тэхналагічным інстытуце ў Кембрыджы іншыя. BCPL у сваю чаргу, асноўныя CPL, CPL, дзе гэтае імя даволі вялікі (для свайго часу) і элегантны мова праграмавання, распрацаваны сумеснымі высілкамі універсітэтаў Кембрыджа і Лондана. Да Лондана людзі далучыліся да праекту "З" выступае за Кембрыджы. Пазней, "З" афіцыйна выступае за камбінаваны. Неафіцыйна, "З" выступае за Крыстафер таму што Крыстафер Стрэчи быў галоўным ўлада за CPL.''


На якой мове вы выкарысталі для напісання C++?

Першы C++ кампілятар (Cfront) была напісаная ў C++.
Каб пабудаваць гэта, я ўпершыню выкарыстаў C пісаць "C з класамі"-да-C препроцессора. "C з класамі" быў дыялекце C, які стаў непасрэдным продкам для C++. Гэта препроцессор перакладаецца як "C з класамі" канструкцыі (такія як класы і канструктары) у С. Гэта быў традыцыйны препроцессор, які не разумеў іх мова, пакінуў большую частку праверкі тыпаў для кампілятара C, каб зрабіць, і перакладзены асобныя канструкцыі без поўнага веды. Затым я напісаў першую версію Cfront ў "C з класамі".

Cfront быў традыцыйны кампілятар, які зрабіў поўны сінтаксіс і семантычныя праверкі C++ зыходны. Для гэтага ён поўны сінтаксічны аналізатар, пабудаваны табліцы знакаў, і пабудаваў поўнае ўнутранае прадстаўленне дрэва для кожнага класа, функцыі і г.д. Ён таксама зрабіў некаторыя аптымізацыі ўзроўні зыходнага кода на яго ўнутранае прадстаўленне дрэва C++ канструкцый перад высновай С. версію, якая спароджаны З, не належыць на C для любога тыпу праверкі. Ён проста выкарыстаў З як асэмблер. Атрыманы код быў бескампрамісна хутка. Для атрымання дадатковай інфармацыі гл D & E.


Чаму не C++ ёсць зборка смецця?

Калі вы жадаеце аўтаматычнага збору смецця, Ёсць добрыя камерцыйныя і грамадскія дамена зборшчыкі смецця для C++.
Для прыкладанняў, дзе збор смецця падыходзіць, C++ з'яўляецца выдатным зборшчыкам смецця мову з прадукцыйнасцю, што выгадна адрозніваецца ад іншых смецце мовах. Глядзіце C++ Programming Language (3rd Edition) для абмеркавання аўтаматычны збор смецця ў C++. Глядзіце таксама, Ханс-J. Боем гэта сайт для C і C++ зборкі смецця.

Акрамя таго, C++ падтрымлівае метады праграмавання, які дазваляе кіраванне памяццю, каб быць бяспечным і няяўных без зборшчыка смецця.

C++0 хпрапаноў GC ABI.


Чаму не C++ ёсць GUI?

C++ мае мноства камерцыйных і адкрытых графічных інтэрфейсаў (напрыклад, Gtkmm, SmartWin++, V C++ GUI, FLTKі Qt).
У прыватнасці, кожны пастаўшчык прадастаўляе платформу C++ бібліятэка для доступу да сваіх графічным інтэрфейсам. Праблема ў тым, што ён не мае стандартны графічны інтэрфейс, і гэта сапраўды сур'ёзная праблема.

Звярніце ўвагу, што прадастаўленне графічнага інтэрфейсу і тэхнічныя і палітычныя праблемы. Ёсць шмат графічных інтэрфейсаў карыстальніка з вялікай колькасцю карыстальнікаў, ды і наогул яны не хацелі б некаторыя іншыя GUI, які быў абвешчаны стандартам. У любым выпадку, камітэт па стандартах не маюць рэсурсаў для стварэння новых і лепшых GUI.


Чаму не C++ тэмы падтрымкі?

ISO C++ стандарт не згадаць паралелізм, але ўсе асноўныя C++ тэмы рэалізацыі падтрымкі; Pthreads працуе па сутнасці ўсюды, і шматлікія вытворцы платформы падтрымкі ўласных сістэмных патокаў.
Для пераноснасці, выкарыстоўваць некаторыя тэмы бібліятэкі, такія як ўзмацненне патоку.

C++0 хпрапануе тэмы.


Ці з'яўляецца C++ ў заняпадзе?

Не, я так не думаю.
C++ выкарыстоўваць падобна, пачынае зніжацца ў некаторых абласцях і, каб быць на ўздыме ў іншых. Калі б мне давялося адгадваць, я падазраю чыстае скарачэнне то на працягу 2002-2004 гадоў і чыстае павелічэнне ў 2005-2007 гадах, але я сумняваюся, што хто не ведае. Большасць папулярных мер у асноўным меры шуму і павінна прадставіць свае высновы ў дэцыбелах, а не "папулярнасць". Многія з асноўных відаў прымянення З++ у інфраструктуру (тэлекамунікацыі, банкаўская справа, які ўбудоўваецца сістэмы і г.д.), дзе праграмісты не ходзяць у канферэнцыях або апісаць свой код у грамадскіх месцах. Многія з найбольш цікавых і важных C++ прыкладанняў не заўважылі, яны не для продажу насельніцтву, як праграмных прадуктаў, і іх рэалізацыя мовы ніколі не згадваецца. Прыкладамі з'яўляюцца Google і "800" тэлефонных нумароў. Калі б я думаў пра "C++ ўнутры" лагатып ў 1985 годзе, праграмаванне свет мог бы быць іншым сёння.

Адзін простай рэчы, што бянтэжыць многіх дыскусій выкарыстання мовы/папулярнасць адрозненне паміж адноснай і абсалютнай меры. Напрыклад, я кажу, што C++ выкарыстоўваць расце, калі я бачу карыстальнік насельніцтва вырасце на 200 тысяч праграмістаў ад 3,1 M да 3.3M. Тым не меней, хто-то можа сцвярджаць, што "C++ памірае", таму што "папулярнасць" знізілася з 16 працэнтаў да 11 працэнтаў ад агульнай колькасці праграмістаў. Абодва патрабаванні могуць быць адначасова праўдзівымі, як лік праграмістаў, працягвае расці і, асабліва, як тое, што лічыцца праграмавання працягвае змяняцца. Я думаю, што З++ з'яўляецца больш праводзіць сваю ўласную ў сваёй традыцыйнай вобласці ядра, такіх як інфраструктура, сістэмы праграмавання, убудаваных сістэм і прыкладанняў з сур'ёзнымі часу і/або прасторавых абмежаванняў. Глядзіце таксама маю DevX інтэрв'ю.


Што робіцца для паляпшэння C++?

Выканаўцаў пастаянна ўдасканальваем свае кампілятары, бібліятэкі і прылады.
Апошнія пяць гадоў назіраецца вельмі значнае паляпшэнне якасці. Гэта тое, што самым непасрэдным і самым неадкладна дапамагае людзям, то і мноства маёмасных і адкрытым зыходным кодам, бібліятэкі і прылады, якія бесперапынна выпрацоўваецца C супольнасць++. Глядзіце мой C++, старонкадля прыкладаў.

ISO C++ стандартнаябыла ратыфікавана ў 1998 годзе. Наступная версія, па мянушцы C++0 х, з'яўляецца поўным і грамадскага разгляду, пасля чаго адбываецца "proofeading прайсці", і працэс ратыфікацыі. Вы можаце знайсці артыкулаў, якія апісваюць C++0 х на маю старонку публікацый і ўсе дакументы, звязаныя з новым стандартам па ISO C++ старонак камітэта дома. Мой HOPL-III паперына апошнія 15 гадоў C++ эвалюцыя можа лепшае тлумачэнне таго, што робіцца і чаму. Нядаўнім інтэрв'ю змяшчае спіс новых магчымасцяў мовы і стандартныя бібліятэкі.

Пры разглядзе эвалюцыі C++, не варта забываць, што мэта складаецца ў тым, каб не дадаць вялікая колькасць новых функцый, але і палепшыць C++ для сваіх ключавых галінах прыкладанняў, уключаючы сістэмы праграмавання і будынак бібліятэкі, не парушаючы старога кода (Ёсць мільярды радкоў C++ "там").


Чаму код, згенераваны для "Прывітанне свет" праграмы ў дзесяць разоў больш для C++, чым для C?

Гэта не на маёй машыне, і яна не павінна быць на вашай.
Я нават бачыў C++ версіі "прывітанне свет" праграмы менш, чым версія C. У 2004 годзе я пратэставаныя з выкарыстаннем GCC-O2 на Unix і двух варыянтах (iostreams і stdio) далі аднолькавыя памеры. Існуе няма мовы прычына адна версія павінна быць больш, чым іншыя. Гэта ўсё пытанне аб тым, як распрацоўшчык арганізуе стандартных бібліятэк (напрыклад, статычнае звязванне супраць дынамічнага звязвання, падтрымка мовы па змаўчанні лакалі супраць падтрымкі магчымай дзякуючы опцыі і г.д.). Калі адной з версій значна больш, чым іншыя, паведаміце аб праблеме рэалізатар з вялікіх.


Як спадчына мову, як C++ канкураваць з сучасным, сучасныя мовы?

Натуральна, называючы C++ спадчыны мову паказвае зрушэння (гл. спадчыну кода).
Менавіта ў бок, людзі, як правіла, думае пра Javaабо C #, калі яны задаць такое пытанне. Я не буду параўноўваць C++ для гэтых моў, але я магу адзначыць, што "сучасныя" не абавязкова азначае "лепш", і што як Java і C #, сыходзяць каранямі ў 1980-я гады стыль ААП ў яшчэ большай ступені, чым раннія З++.

З 1987 года або каля таго, Цэнтр развіцця мовы З++ і звязаныя з ёй стылі праграмавання было выкарыстанне шаблонаў, статычны палімарфізм, абагульненае праграмаванне і Мультипарадигмальное праграмавання. Гэта спосаб выходзіць за рамкі гэтак разадзьмутымі ўласныя мовы. Яшчэ адно важнае адрозненне ў тым, што C++ падтрымлівае карыстацкія тыпы ў той жа ступені, як ўбудаваныя тыпы. Гэта - асабліва ў спалучэнні з выкарыстаннем шаблонаў, канструктары і деструкторы - дазваляе C++ праграмістам, каб выкарыстоўваць праграмаванне і дызайн метады, якія (ИМО) з'яўляюцца больш прасунутымі, чым падтрымліваецца ў мовах, з якім C++ з'яўляецца найбольш часта параўноўваюць, напрыклад, гл RTTI.

Standard C++ і дызайн і праграмаванне стыляў ён падтрымлівае ў даўгу перад функцыянальных моў, асабліва ў ML. Раннія варыянты механізмаў ML-тып выліку былі (разам з шматлікім іншым) частка натхнення шаблонаў. Некаторыя з найбольш эфектыўных метадаў функцыянальнага праграмавання былі часткай натхнення STL і выкарыстанне функцыі аб'ектаў у C++. З іншага боку, функцыянальнае супольнасць прапусціў лодку з аб'ектна-арыентаваным праграмаваннем, і нешматлікія з моў і інструментаў гэтага таварыства выгаду ад паспявання вопыт буйнамаштабнага прамысловага выкарыстання.

Відавочна, я не думаю, што збор смеццяз'яўляецца адзінай вызначальнай характарыстыкай "прасунутых" у кантэксце моў праграмавання. У прыватнасці, звернеце ўвагу, што C++ забяспечвае падтрымку для эфектыўнага і выніковага кіравання памяццю, якія могуць ліквідаваць уцечкі рэсурсаў без выкарыстання зборшчыка смецця. Калі вы не згодныя, вы можаце проста пачаць выкарыстоўваць зборшчык смецця для C++; Ёсць добрыя даступныя.


Што такое "Мультипарадигмальное праграмавання"?

Мультипарадигмальное праграмаванне мудрагелісты спосаб сказаць "праграмаванне з выкарыстаннем больш за аднаго стылю праграмавання, кожны ў сваёй найлепшы эфект".
Напрыклад, пры выкарыстанні аб'ектна-арыентаванага праграмавання, калі падчас спрэчак паміж рознымі тыпамі аб'ектаў не патрабуецца, і абагульненае праграмаванне, калі статычная бяспеку тыпу і падчас выканання ў вялікай пашане. Натуральна, што галоўная сіла Мультипарадигмальное праграмавання ў праграмах, дзе больш адной парадыгмы (стыль праграмавання) выкарыстоўваецца, так што было б цяжка дамагчыся такога ж эфекту шляхам складання сістэмы з частак, напісаных на мовах, якія падтрымліваюць розныя парадыгмы. Я знаходжу найбольш пераканаўчым выпадках Мультипарадигмальное праграмавання знаходзіліся там, дзе тэхналогіі розных парадыгмаў выкарыстоўваюцца ў цесным супрацоўніцтве, каб напісаць код, які з'яўляецца больш элегантным і больш лёгкім у абслугоўванні, чым гэта магчыма ў рамках адной парадыгмы. Просты прыклад абыходу статычна тыпізаваных кантэйнер аб'ектаў паліморфнага тыпу:
	несапраўдным draw_all (вектар <Форма *> і супраць)//малюем кожны элемент стандартнага вектара {for_each (vs.begin (), vs.end (), mem_fun (і Форма:: маляваць));}
Тут, форма будзе абстрактны базавы клас, які вызначае інтэрфейс для іерархіі геаметрычных фігур.
Гэты прыклад лёгка абагульняецца на любым стандартным кантэйнеры бібліятэкі:
	шаблон <клас C> пустэча draw_all (C & CS)//малюем кожны элемент стандартнага кантэйнера {for_each (cs.begin (), cs.end (), mem_fun (і Форма:: маляваць));}

Кніга Джыма Coplien ў "Мультипарадигмальное Дызайн для C++" (Addison Wesley, 1998) даследуе выкарыстанне некалькіх парадыгмаў у кантэксце распрацоўкі і метады праектавання.


Чаму C++ такі вялікі?

C++ не так вялікая, як некаторыя людзі сабе ўявіць.
Гэта не малюсенькі мову прызначаны для мінімальнымі мовы для выкладання, але і не мовы людзей, якія найбольш часта параўноўваюць яго, напрыклад, C, Java, C #. Яны таксама велізарная у параўнанні, скажам, Паскаль, як доктар Вірт першапачаткова вызначылі яго - па цалкам зразумелых прычынах, я думаю. Міры праграмавання з'яўляецца значна больш складаным, чым гэта было 30 гадоў таму, і сучасных моў праграмавання адлюстроўваюць гэта.

C++ стандарт 740 старонак, але, што ўключае ў сябе 400 старонак бібліятэка апісанняў. Моўныя асаблівасці апісаны (у драбнюткіх дэталях) у 340 старонак. Акрамя таго, ТК++ PLскладае 1000 старонак+, але толькі 350 з тых, прысвечаны тлумачэнню моўных сродкаў і іх выкарыстанне; астатняе абмяркоўваць бібліятэкі, метады праграмавання і г.д.

C++ непасрэдна падтрымлівае (гэта значыць у мове), што некаторыя іншыя падтрымку моў з дапамогай бібліятэк, так што частка мовы будзе адносна вялікім. З іншага боку, калі вы хочаце напісаць "тыповых сучасных прыкладанняў", якія неабходна ўлічваць аперацыйнай сістэмы інтэрфейсы, GUI, баз дадзеных, вэб-інтэрфейсаў і г.д. Сума магчымасці мовы, бібліятэкі і праграмавання канвенцыямі і стандартамі, што вы павінны азнаёміцца?з карлікам мовы праграмавання. Тут C++ 'ы памер можа быць перавагай, паколькі яна лепш падтрымлівае добрыя бібліятэкі.

Нарэшце, дні, калі пачатковец праграміст можа ведаць усіх моў зніклі, па меншай меры на тых мовах, на шырокае прамысловае выкарыстанне. Мала хто ведае "усё З" ці "усё Java", альбо, і ніхто з іх з'яўляюцца пачаткоўцамі. Адсюль вынікае, што ніхто не павінен прасіць прабачэння за тое, што пачаткоўцы не ведаю, усё C++. Тое, што вы павінны зрабіць - на любой мове - гэта абраць падмноства, атрымаць працу напісання кода, і паступова даведацца больш пра мову, яго бібліятэкі, і яго інструментаў. За маё прапанову аб тым, як пачаткоўцы могуць падыходзіць C++, гл Праграмаванне: прынцыпы і практыка выкарыстання C++.


Што вы думаеце пра EC++?

EC++ з'яўляецца (амаль) падмноства C++ не хапае выключэнняў, шаблоны, прасторы імёнаў, падтрымка RTTI, множны ўспадкоўванне і т. д., які вызначаецца па "прамысловага кансорцыума".
Я не ў карысць мовы падмноства ці дыялекты. Я асабліва не любяць падмноства, якія не падтрымліваюць стандартную бібліятэку, так што карыстальнікі гэтага падмноства павінны вынайсці свае ўласныя несумяшчальныя бібліятэкі падмурак. Я баюся, што вызначана падмноства C++ можа раскалоць супольнасць карыстачоў і выклікаць раздражняльнасць (3/31/1999: Я толькі што бачыў рэкламу, якая выкарыстана яркая графіка, каб паказаць, як EC++ паніжаная "тлушч" (г.зн. памяці) шляхам адмены - сярод іншых рэчы - імёнаў, шаблоны і C++ радкі стандартнага Уздых).!. Я рашуча аддаю перавагу працаваць на "стандарты" адбываецца ў адкрытым форуме (напрыклад, ISO або арганізацыі нацыянальных стандартаў).

Для абмеркавання таго, як убудаваныя сістэмы распрацоўнікі могуць вырашэння праблем прадукцыйнасці з выкарыстаннем стандартных C++ (лепш, чым з дапамогай дыялекту) см. ISO C++ камітэта справаздачу аб дзейнасці. Наколькі мне вядома, EC++ мёртвы (2004), і калі гэта не так павінна быць.

Для паглядзім, як ISO C++ могуць быць выкарыстаны для сур'ёзнага праграмавання ўбудаваных сістэм, гл аўтамабіля JSF паветра C++, стандарты кадавання.


C++ атрымаў сваё аб'ектна-арыентаванай канцэпцыі з Smalltalk?

Не. C++ атрымаў ключавыя паняцці класаў, вытворных класаў, віртуальных функцый (іншымі словамі, паняцці інкапсуляцыі, атрыманне ў спадчыну і палімарфізм) з Simula гэтак жа, як Smalltalk і зрабіў.
З пункту гледжання сямейных адносін, C++ і Smalltalk з'яўляюцца братамі і сёстрамі.


Ці з'яўляецца C++ аб'ектна-арыентаванага мовы?

З++ з'яўляецца мульты-парадыгмы мовы праграмавання , які падтрымлівае аб'ектна-арыентаванае і іншыя карысныя стылі праграмавання.
Калі тое, што вы шукаеце што-тое, што прымушае вас рабіць тое, у дакладнасці так, C++ ці не так. Існуе не адзін правільны спосаб пісаць кожную праграму - і нават калі б не было б спосаб прымусіць праграмістаў выкарыстоўваць яго.

Тым не менш, пісаць у стылі З праграмамі на З++ для большасці прыкладанняў, не аптымальнае выкарыстанне C++. Каб быць сапраўды эфектыўнымі C++ праграміст, вы павінны выкарыстоўваць абстракцыі і механізмы тыпу сістэмы такім чынам, які адпавядае разумна з іх намерам. Спробы ігнараваць ці паражэнне C++ тып сістэмы з'яўляецца найбольш гняце.

Напісанне Java-кода ў стылі З++ можа быць расчараванне і неаптымальнай, як напісанне C-код у стылі C++.

Для больш дэталёвага абмеркавання гл. любы з маіх агляд або стыль артыкулаў з маёй бібліяграфіі. У прыватнасці, гл маю OOPSLA паперы "Чаму C++ не толькі аб'ектна-арыентаваная мова праграмавання".


Няўжо вы так кажаце?

"C дазваляе лёгка стрэліць сабе ў нагу, C++ робіць гэта цяжэй, але калі вы робіце гэта ўдары ўсю сваю нагу".
Так, я сказаў нешта падобнае (у 1986 годзе ці каля таго). Тое, што людзі, як правіла, не прапусціце, гэта тое, што тое, што я сказаў, што пра C++ з'яўляецца ў той ці іншай ступені ставіцца да ўсіх магутныя мовы. Як абараніць людзей ад простых небяспекі, яны трапляюць у новыя і менш відавочныя праблемы. Кто-то, хто пазбягае простых задач можа быць проста загаловак не вельмі простая. Адна з праблем, з вельмі падтрымлівае і ахоўных абалонак з'яўляецца тое, што складаныя праблемы могуць быць выяўлены занадта позна ці занадта цяжка выправіць аднойчы выявілі. Акрамя таго, рэдкая праблема цяжэй знайсці, чым часта, таму што вы не падазраяце гэтага.

"У C++, ёсць нашмат менш і чысцей мовы з усіх сіл спрабуе выбрацца з". Так, гэта цытаты можна знайсці на старонцы 207 Дызайн і эвалюцыя C++. І няма, што больш дробныя і больш чыстага мовы не Java або C #. Цытата адбываецца ў раздзеле "Файлы і Beyond Сінтаксіс". Я паказваў на тое, што C++ семантыка нашмат чысцей, чым яго сінтаксіс. Я думаў пра стылях праграмавання, бібліятэк і асяроддзя праграмавання, які падкрэсліў, больш чыстых і эфектыўных метадаў больш архаічныя выкарыстоўвае сканцэнтраваны на нізкаўзроўневыя аспекты C.

"Я заўсёды жадаў мой кампутар, каб быць максімальна простым у выкарыстанні, як мой тэлефон; маё жаданне збылося, таму што я больш не могуць зразумець, як выкарыстоўваць свой?тэлефон". Я сказаў, што пасля расчараванняў спробы выкарыстоўваць "шматфункцыянальных" тэлефон-то каля 1990 года. Я ўпэўнены, што настроі не быў арыгінальны, і, верагодна, нават не агульная фармулёўка, хто-то павінна быць, думаў аб тым, што перада мной.

"Ёсць толькі два тыпу моў: тыя людзі скардзяцца і тыя, ніхто не выкарыстоўвае". Так. Зноў жа, я вельмі сумняваюся, што настроі арыгінала. Вядома, усе "Ёсць толькі два" двукоссі павінны быць прыняты з недаверам.

"Доказ па аналогіі махлярства". Так, старонка 692 ТК++ PL. Добрай аналогіяй з'яўляецца выдатным спосабам ілюстраваць ідэю, але занадта часта падобныя аналогіі не суправаджаюцца цвёрдай аргументацыі, дадзеных і г.д.

"Людзі, якія думаюць, што ведаюць усё на самай справе раздражняюць тых з нас, хто ведаюць, што мы не". Так.

"C++ гэта мой любімы смецце мову, таму што ён генеруе вельмі мала смецця". Так, гл Чаму не C++ ёсць зборка смецця?і Як спраўляцца з уцечкамі памяці.

"Калі вы думаеце, гэта проста, то вы не зразумелі праблему". Так, але не, я не памятаю, якое пытанне выклікаў такі адказ.

"Ёсць больш карысныя сістэмы, распрацаваныя на мовах лічыцца жахлівым, чым у мовах хвалілі за тое, што хораша - шмат больш". Так, у Масачусецкім тэхналагічным інстытуце інтэрв'ю Агляд тэхналогій і ў іншых месцах. Там я таксама сказаў:

  • "Я думаю, мы павінны глядзець на элегантнасць ў прыкладаннях, створаных, а не самі мовы". Я павінен быў сказаць "больш", а не "замест".
  • "Каб выкарыстаць C++ добра, вы павінны зразумець, дызайн і тэхналогія праграмавання".
  • "C++ прызначаны, каб дазволіць вам выказаць свае ідэі, але калі ў вас няма ідэй або не маюць ніякага паняцця пра тое, як іх выказаць, C++ не прапануе вялікую дапамогу".

Занадта часта "камп'ютэрныя навукі" з'яўляецца адной з формаў матэматыцы зайздрасці. Так, але, калі ласка, не забывайце, што "занадта часта". Цытата з кантэксту, у якім я турбавацца аб недастатковай увазе да дадзеных (эмпірызм) і недастатковая ўвага да сувязі да кампутараў. Гэта не франтальнае наступ на тым, што інфарматыка можа быць навукай (гл., напрыклад, Пуга на алгарытмы і аналіз алгарытмаў; гэта навука, і гэта не любая іншая навука). І, не, я не збіраюся даваць канкрэтныя прыклады і імёны.

Занадта часта "праграмнага забеспячэння" не з'яўляецца ні інжынерных, ні аб праграмным забеспячэнні. Так, але, калі ласка, не забывайце, што "занадта часта". Цытата з кантэксту, у якім я турбавацца аб недастатковай увазе да дадзеных (эмпірызм) і недастатковая ўвага да сувязі ў кодзе. Я баюся, што рэаліямі таго, каб даставіць карысны і ў суправаджэнні код можа быць патоплены ў працэсах, карпаратыўных стандартаў, і маркетынгавыя даследаванні, што распрацоўка праграмнага забеспячэння часам знаходзіцца пад кантролем людзей, якія не маглі распазнаць добры код, калі ён ускочыў і ўдарыў ім на носе, і ганарымся гэтым. І, не, я не збіраюся даваць канкрэтныя прыклады і імёны. Калі па добраму, распрацоўка праграмнага забеспячэння з'яўляецца годным дысцыпліны інжынернай, забяспечваючы вынікі, якія параўноўваюцца з пунктам гледжання старэй інжынерных дысцыплін.

Калі (не калі) аўтаматычны збор смецця становіцца часткай C++, гэта будзе дадатковым. Ды ў 2000 інтэрв'ю з/..

Лёгка выйграць прабачэння за тое, што няправільна, а калі іх права гэта тое, што вы ў рэальныя непрыемнасці. Так.

Любая праблема ў вобласці кампутарнай навукі могуць быць вырашаны з іншы ўзровень ўскоснага, вядомы як першы закон вылічэнняў. Так, я сказаў, што цытаванні (маёй доктарскай дысертацыі advison) Дэвід Дж. Уілерам. Калі ласка, не misattribute яго мне.


Ці сапраўды вы даць інтэрв'ю IEEE?

, У якой вы прызналіся, што C++ была свядома створана як жудасны мова для напісання Непадтрымоўваны кода павялічыць заробкі праграмістаў?

Вядома, няма. Прачытайце рэальныя інтэрв'ю IEEE.


Што такое "успадкаваны код"?

"Спадчына код" тэрмін часта выкарыстоўваецца уніжальна, каб ахарактарызаваць кода, напісанага на мове, ці стыль, які (1) дынаміка/пісьменнік лічаць састарэлай і/або (2) канкуруе з чым-то прадалі/спрыяла дынаміка/пісьменнік.
"Спадчына код", часта адрозніваецца ад свайго прапанавалі альтэрнатыву, на самай справе працуе і маштабаванне.


Ці з'яўляецца колькасць C++ карыстальнікі па-ранейшаму падвойваецца кожны год?

Колькасць У 1980-1991, колькасць карыстальнікаў падвойваецца кожныя сем з паловай месяцаў (гл. Дызайн і эвалюцыя C++).
Тым не менш, проста не хапае праграмістаў для падтрымання гэтага. З некалькі лічбаў, я магу атрымаць (кампілятар продажаў, кніга продажаў, аб'ёму работ кансультантаў, я ведаю, IDC і інш), па маіх ацэнках, тэмпы росту некалькі адсоткаў. Устойлівы і, безумоўна, станоўчы. IDC ацэнак, 1200000 C++ Рэалізацыі былі прададзеныя ў 1996 годзе. Іх 2001 адзнака ліку праграмістаў З++ было "каля 3 мільёнаў", іх колькасць склала 2004 "больш за 3 мільёнаў". Гэта здаецца праўдападобным і паказвае на працяг росту.


Хто-небудзь выкарыстаць C++, у гэтыя дні?

Так, многіяробяць.
Ёсць занадта шмат C++ карыстачам эфектыўна іх злічыць, але іх колькасць у мільёны. C++ падтрымліваецца усімі асноўнымі вытворцамі. Прыклады C++ выкарыстоўваць ўбачыць мае прыкладанні сэмплер.


Чаму не C++ для аперацыйных сістэм?

Яна ёсць, і яна была на працягу больш за дзесяць гадоў, гл мой спіс C++ прыкладанняў.


Вы чакалі, C++, каб стаць такі поспех?

Вядома, няма.
Поспеху агульнага прызначэння моў праграмавання знікаюча малая. Я ведаў, што, і я ведаў, што шанец на поспех паўплываў маркетынгу ўплыў, якое ў мяне не было.

C++ быў першапачаткова распрацаваны і рэалізаваны ў выглядзе набору агульных сродкаў вырашэння некаторых канкрэтных праблем, якія я і мае калегі сутыкнуліся. Супольнасці - і эфектыўнасць - са сродкаў, якія прадстаўляюцца апынулася служыць значна шырэй патрэбаў, чым я чакаў. Акцэнт на агульных аб'ектаў - у адрозненне ад прадастаўлення канкрэтных рашэнняў канкрэтных праблем - засталася з C++ і служыў свайго супольнасці і канкрэтных праблем, якія стаяць перад супольнасцю змяніліся за гэтыя гады.


Што такое добрая сертыфікацыі для праграмістаў З++?

Наколькі мне вядома, няма добрай праграмы сертыфікацыі для C++ праграмістаў.
Вось жаль. Добраяпраграма сертыфікацыі будзе найбольш карысным. Тым не менш, C++ не хапае цэнтральнай арганізацыі, якая будзе вырабляць цвёрдыя праграмы сертыфікацыі, а таксама праграмы сертыфікацыі без дазволу або, накіраваную на сінтаксіс быў бы горш, чым бескарысна.


Што вы цяпер працуеце?

FAQ лепш:-)

Сур'ёзна, я шукаю фундаментальныя шляхі ўдасканалення сродкаў і метадаў, якія мы выкарыстоўваем для пабудовы вялікіх рэальных сістэм. Адна частка маёй працы складаецца ў C++0 х.


Што такое C++?

З++ з'яўляецца універсальным мовай праграмавання з ухілам да сістэм праграмавання, які Яна вызначаецца па стандарту ІСО, забяспечвае стабільнасць на працягу дзесяцігоддзяў, і мае вялікі і жывы супольнасці карыстальнікаў.
Глядзіце таксама C++ Мова праграмаванняі Развіццё мовы ў сабе і для рэальнага свету: C++ 1991-2006 гг.


Дзе я магу даведацца пра гісторыю C++?

Аб дызайне C++?
Пра гісторыю C++?

Паглядзіце на мае дакументы для HOPL-2і HOPL-3; HOPL расшыфроўваецца як "Гісторыя Мовы праграмавання", прэм'ер-міністр канферэнцыі па гэтым пытанні, аўтарам якога ACM. Гэта моцна рэцэнзуюцца прац. Для яшчэ больш падрабязна гл маю кнігу Дызайн і эвалюцыя C++і прадмову да 2006 Японская пераклад D & E , які прыносіць інфармацыю да 2006 года. Акрамя таго, многія з маіх інтэрв'ю закрануты пытанні фон, дызайн, гісторыя C++.


Ці праўда, што...?

Многія пытанні прыходзяць да мяне ў форме сцвярджэнняў
  • З++ з'яўляецца нізкаўзроўневы (?)
  • C++ занадта павольны для нізкаўзроўневай працы (?)
  • C++ мае сэнс толькі калі вы пішаце па-сапраўднаму аб'ектна-арыентаванага кода (?)
  • Сучаснае праектаванне на З++ з'яўляецца ўсё абагульненае праграмаванне і метапрограммирование шаблонаў (?)
  • C++ распрацаваны Microsoft (?)
Часта, чалавек выхоўвае адзін з гэтых пунктаў лічыць заяву факт (але ні адно з гэтых сцвярджэнняў дакладна), а часам, ёсць маецца на ўвазе знак пытання.
Такім чынам,


Што вы думаеце пра Boost?

Павышэннез'яўляецца вялікі і які пашыраецца набор бібліятэк прызначаны для сумеснай працы з ISO C++ стандартная бібліятэка.
Ён змяшчае шмат вельмі карыснай і добра прадуманая бібліятэкі, такія як ASIO, файлавай сістэмы, рэгулярны выраз, і ніткі (прабачэнні за не спрабуючы вызначыць больш карысным бібліятэк; Ёсць толькі занадта шмат). Адзін бібліятэка, TR1, утрымлівае добрым набліжэннем новага C++0 х стандартных кампанентаў бібліятэкі.

Павышэнне бібліятэкі тэстаў люксаў, ёсць дакументацыя, былі пратэставаныя на некалькіх кампутарах, і рэцэнзаванне.

У мяне дзве праблемы з Boost, хоць, які, спадзяюся, будуць разгледжаны ў канцы канцоў:

Тым не менш, як правіла, сапраўды дурная ідэя, каб пайсці і вынаходзіць кола, якія павышаюць ўжо прапаноўвае.


Што вы думаеце пра шаблоннага метапрограммирования?

Шаблон метапрограммирование набор магутных метадаў праграмавання, якія пры выкарыстанні з клопатам і густам можа дапамагчы вырашыць даволі складана праблемы, у асноўным, звязаных з архітэктурай вялікіх сістэм, іх мабільнасць, і іх змест (гл. Абрахамс і Гуртовой: C++ Метапрограммирование пра шаблон і некаторыя з Павышэнне бібліятэк.

Як і ўсе магутныя метады яны лёгка злоўжываць. Асабіста я аддаю перавагу выкарыстоўваць шаблоны ў першую чаргу для абагульненага праграмавання (напрыклад, у вызначэнні кантэйнераў і алгарытмаў над кантэйнерамі) і шаблоны, якія генеруюць досыць відавочныя код, заснаваны на шаблоне аргументаў (напрыклад, стварэнне буфераў і зарэгістраваць код доступу), што часам называюць генератыўнай праграмавання. Будзьце асцярожныя складанасці шаблонаў вы пішаце або выкарыстання; лёгка атрымаць overenthusiastic і пісаць код шаблону, які з'яўляецца занадта разумны, каб быць карысным у якасці падтрымоўванага кода вытворчасці.

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

Published (Last edited): Jun 30 , source: http://www2.research.att.com/~bs/bs_faq.html