
Ամենակարևոր փիլիսոփայությունը
1. Ծրագրավորման լեզուները մարդկանց համար
Ծրագրավորման լեզուները այն են, ինչպիսին մարդիկ խոսում են համակարգիչների հետ: Համակարգիչը ուրախ կլինի խոսել ցանկացած լեզվով, որը չի լինի երկիմաստ: Սեփական բարձր մակարդակի լեզվեր ունեցողների պատճառը այն է, որ մարդիկ չեն կարող դիմակայել մեքենայական լեզվին: Ծրագրավորման լեզուների էությունը այն է, որ կանխարգելի մեր խոցելի մարդկային ուղեղը ծանրաբեռնվածության պատճառով:
Арքիտեկտները գիտեն, որ որոշ նախագծման խնդիրներ ավելի հսկայական են, քան մյուսները: Ամենայ واضح և աբստրակտ նախագծման խնդիրներից մեկն այն է, որ կամուրջների նախագծումն է: Այս դեպքում ձեր աշխատանքն է, որպեսզի նվազագույն նյութի վրա ժամանարարության պահանջը լրացնեք: Մյուս կողմում սպեկտրը գտնվում է աթոռների նախագծումն է: Աթռոքների նախագծողներն իրենց ժամանակը պետք է անցկացնեն մարդկային գաղափարների մասին:
Ծրագրային ապահովման զարգացումը ունի նման տարբերակ: Տվյալների մարագության միջոցով տվյալների անցնելու ալգորիթմների նախագծումը լավ abstract խնդիր է, ինչպես կամուրջների նախագծումը: Եւ մինչ ծրագրավորման լեզուների նախագծումը նման է աթոռների նախագծմանը, դուք պետք է աշխատանքով զբաղվեք մարդկայի կախվածություններով:
Մեր շատերը դժվարանում են դա հասկանալ: Գեղեցիկ մաթեմատիկական համակարգերի նախագծումը թվում է, որ շատ ավելի գրավիչ է մեզ շատերի համար, քան մարդկային կախվածությունների մանրակրկիտ հաշվի առումը: Մաթեմատիկական գեղեցկության դերը այն է, որ որոշակի աստիճանի գեղեցկություն ծրագրերը պարզացնում է հասկանալու համար: Բայց գեղեցկությունը այս բանով չի ավարտվում:
Երբ ես ասում եմ, որ լեզուները պետք է նախագծվեն, որպեսզի հաշվի առնեն մարդկային կախվածությունները, ես չեմ նկատի, որ լեզուները պետք է նախագծվեն վատ ծրագրավորողների համար: Իրականում դուք պետք է ծրագրային ապահովումը նախագծեք լավագույն ծրագրավորողների համար, բայց նույնիսկ լավագույն ծրագրավորողները ունեն իրենց սահմանը: Ես չեմ կարծում, որ որևէ մեկին կհավանի ծրագրավորումը լեզվով, որտեղ բոլոր փոփոխականները նշվում են 'x' տառով ամբողջական թվային ցուցակներով:
2. Նախագիծ արեք ձեզ և ձեր ընկերների համար
Եթե դուք նայում եք ծրագրավորման լեզուների պատմությանը, այն լեզուներից շատերը, որոնք լավագույնն են եղել, նախագծվել են իրենց հեղինակների կողմից, իսկ շատ վատագույնները՝ ուրիշ մարդիկների համար:
Երբ լեզուները նախագծվում են ուրիշ մարդկանց համար, դրանք միշտ կատարում են ամենաբավականը կոնկրետ մարդկանց խմբից: մարդիկ այնքան էլ խելացի չեն, որքան լեզվի հեղինակը: Այդպես ես ստանում եմ լեզու, որը ձեզ խոսում է համեստությամբ: Cobol-ն ամենահայտնի օրինակն է, բայց շատ լեզուներ դրականությամբ են վերածվել:
Սա ոչ մի առնչություն չունի լեզվի մակարդակի բարձրության հետ։ C-ն բավականին ցածր մակարդակի լեզու է, բայց այն ստեղծվեց իր հեղինակների կողմից օգտագործելու համար, այդ պատճառով հաքերներն այն սիրում են։
Լեզուների նախագծման օգտին այդ փաստարկը, որ վատ ծրագրավորողներ ավելի շատ են, քան լավերը, կարելի է հավանել։ Միգուցե դա այդպես է։ Բայց այս փոքրաթիվ լավ ծրագրավորողները գրանցում են ոչ համամասնաբար ավելի շատ ծրագրեր։
Ես հետաքրքրված եմ հարցով, թե ինչպես ստեղծել լեզու, որ կپسախի լավագույն հաքերներին։ Իմ կարծիքով, այս հարցը հավասար է հարցին, թե ինչպես ստեղծել որակյալ ծրագրավորման լեզու, սակայն նույնիսկ եթե դա այդպես չէ, գոնե դա հետաքրքիր հարց է։
3. Տվեք ծրագրավորողին այնքան վերահսկողություն, որքան հնարավոր է
Շատ լեզուներ (विशेष रूप से वे, जो अन्य लोगों के लिए बनाए गए हैं) ऐसे व्यवहार करते हैं जैसे पालकներ։ նրանք փորձում են նախազգուշացնել ձեզ այն բաներից, որոնք, իրենց կարծիքով, ձեզ օգուտ չեն բերի։ Ես հակառակ կարծիքի եմ՝ տվեք ծրագրավորողին այնքան վերահսկողություն, որքան կարող եք։
Երբ ես առաջին անգամ ուսումնասիրում էի Lisp-ը, ամենից շատ ինձ դուր էր գալիս, որ մենք զրույց ենք վարում հավասար պայմաններում։ այլ լեզուներում, որոնք ես այդ ժամանակ ուսումնասիրել էի, կար լեզու և կան իմ ծրագիրը այդ լեզվով, և նրանք գոյություն ունեին բավականին առանձին։ Բայց Lisp-ում իմ գրած ֆունկցիաներն ու մաքսերը նույնքան էին, որքան իրենց լեզուն։ Ես կարող էի վերագրել լեզուն, եթե ուզենայի։ Այն ունեին նույն գրավչությունը, ինչ բաց կոդ ունեցող ծրագիրը։
4. Կարճությունը տաղանդի հրաշքովն է
Կարճությունը undervalued է և անգամ արհամարհվում է։ Բայց եթե դուք նայեք հաքերների սրտերին, դուք կտեսնեք, որ նրանք շատ են սիրում կարճությունը։ Քանի անգամ եք լսել, թե հաքերները սիրով խոսում են այն բանի մասին, որ, ասենք, APL-ում նրանք կարող են անզարմանալի բաներ անել ընդամենը մի քանի տող կոդով։ Ես կարծում եմ, որ իսկապես խելացի մարդիկ սիրում են ուշադրություն դարձնել այս բանին։
Ես կարծում եմ, որ գրեթե ամեն ինչ, ինչը թույլ է տալիս ծրագրերը կրճատելու՝ լավ է։ Բազմաթիվ գրադարանային ֆունկցիաներ պետք է լինեն, ամեն ինչ, ինչը կարող է լինել անահայտ՝ պետք է լինի այդպիսին։ Մանրակրկիտությունը պետք է լինի հիմնականում կարճ, նույնիսկ գոյություն ունեցող անունները պետք է լինեն կարճ։
Եվ ոչ միայն ծրագրերը պետք է լինեն կարճ։ Մանուալները նույնպես պետք է լինեն կարճ։ Մանրամասնությունների մեծ մասը լի է պարզաբանություններով, վերապահումներով, նախազգուշացումներով և հատուկ դեպքերով։ Եթե ձեզ անհրաժեշտ է կրճատել մանուալը, լավագույն տարբերակը լեզվի շտկումն է, որը պահանջում է այդքան շատ պարզաբանումներ։
5. Տեղյակ եղեք, թե ինչ է հաքերությունը
Շատ մարդկանց կուզեր, որ հաքերությունը լիներ մաթեմատիկան կամ, գոնե, ինչ-որ բան, որը նման է բնական գիտություններին: Ես կարծում եմ, որ հաքերությունը ավելի շատ նման է ճարտարապետությանը: Ճարտարապետությունը կապված է ֆիզիկայի հետ, որովհետև ճարտարապետը պետք է նախագծի շենք, որը չի collapsել, բայց ճարտարապետի իսկական նպատակն է ստեղծել մեծ շենք, ոչ թե բացահայտումներ անել ստատիկայի ոլորտում:
Ինչը հաքերների համար հարազատ է, դա մեծ ծրագրեր ստեղծելն է: Եվ ես կարծում եմ, որ, գոնե մեր սեփական մտքերում, մենք պետք է հիշենք, որ հրաշալի ծրագրեր գրելն հրաշալի է, նույնիսկ երբ այս աշխատանքը հեշտությամբ չի փոխակերպվում գիտական աշխատանքների սովորական մտավոր արժույթի: Միտքային տեսակետից, ոչ պակաս կարևոր է ինչպես մշակել լեզու, որն կսիրեն ծրագրավորողները, այնպես էլ ստեղծել վատ, գաղափարը մարմնավորող, որի մասին կարող եք հոդված հրապարակել:
Բաց խնդիրներ
1. Ինչպես կազմակերպել մեծ գրադարաններ?
Գրադարանները դառնում են ծրագրավորման լեզուների կարևոր մաս: Նրանք այնքան մեծ են դառնում, որ դա կարող է վտանգավոր լինել: Եթե ձեզ անհեշտ է գտնել մի ֆունկցիա գրադարանում, որը անում է այն, ինչ ձեզ անհրաժեշտ է, քան գրել այդ ֆունկցիան ինքներդ, ապա ողջ ծ.code-ը ոչինչ չի անում բացի ձեր ձեռնարկի շտկելուց: (Symbolics-ի ձեռնարկները դրա օրինակն էին): Այսպիսով, մեզ պետք է լուծել գրադարանների կազմակերպման խնդիրը: Իդեալում անհրաժեշտ է նախագծել այնպես, որ ծրագրավորողը կարողանա կռահել, որ գրադարանի ֆունկցիան համապատասխան է:
2. Մարդիկ իսկապես վախենում են նախածանցային սինտաքսից?
Այս բաց խնդիրն այն իմաստով, որ ես մտածել եմ դրա մասին մի քանի տարի և դեռ չեմ գիտակցում պատասխան: Նախածանցային սինտաքսը ինձ համար թվում է հաստատապես բնական, հնարավոր է բացի այն օգտագործելուց մաթեմատիկայում: Բայց կարող է լինել, որ Լիսպերի մեծ մասի հայտնիության պակասը պարզապես անծանոթ սինտաքսի պատճառով է... Արդյո՞ք ի՞նչ-որ բան պետք է անել այս հարցում, եթե դա ճշմարիտ է, սա այլ հարց է:
3. Ինչ պետք է լինի սերվերային Ծրագրին?
Ես կարծում եմ, որ մեծ մասը ծրագրերի, որոնք կգրվեն հաջորդ 20 տարիների ընթացքում, կլինեն վեբ-ծրագրեր, այս իմաստով, որ ծրագրերը կգտնվեն սերվերի վրա և կհամագործակցեն ձեզ հետ զննարկիչի միջոցով: Եվ այդպիսի ծրագրեր գրել համար անհրաժեշտ են նոր բաներ:
Այսպիսի բաներից մեկը սերվերային ծրագրերի նոր թողարկման եղանակի աջակցությունն է: Մեկ կամ երկու մեծ թողարկման փոխարեն, տարվա ընթացքում, որպես գեղջկական ծրագիր, սերվերային ծրագրերը կթողարկվեն փոքր փոփոխությունների շարքով: Դուք կարող եք ունենալ հինգ կամ տասը թողարկում օրական: Եվ բոլորի մոտ միշտ կլինի վերջին տարբերակը.
Դուք գիտեք, թե ինչպես ծրագրավորել ծրագրեր, որպեսզի դրանք պահպանվող լինեն? Սերվերային ծրագրակազմը պետք է նախագծված լինի փոփոխական լինելու համար: Դուք պետք է կարողանաք հեշտությամբ պայքարել դրա մեջ, կամ գոնե իմանալ, թե ինչ է նշանակում փոքր փոփոխություն և ինչն է կարևոր:
Մեկ այլ բան, որը կարող է օգտակար լինել սերվերային ծրագրակազմում, դա խիստ շեղող առաքումն է: Աղբյուրային ծրագրում կարող եք օգտագործել ինչ-որ բան նման , որպեսզի ստանաք ենթածրագրերի ազդեցությունը stateless աշխարհում վեբ-սեսիաներում: Շարունակական առաքումն արժե, եթե այս հնարավորությունը շատ թանկ չլինի:
4. Տեղ են նոր աբստրակցիաներ, որոնք պետք է բացահայտել:
Ես չգիտեմ, թե որքան բանական է այս հույսը, բայց անձամբ ինձ իսկապես ցանկանում եմ բացահայտել նոր աբստրակցիա՝ ինչ-որ նման, որն ունենա այնքան մեծ նշանակություն, որքան առաջին կարգի գործառնություններ, ճյուղավորում, կամ գոնե ըստ ամրագրող պարամետրեր: Գուցե սա անհնար երազանք է: Այսպիսի բաները հաճախ չեն բացահայտվում: Բայց ես չեմ կորցնում հույսը.
Փոքր անկյուն stones
1. Դուք կարող եք օգտագործել ցանկացած լեզու, որը ցանկանում եք
Ավելի վաղ ծրագրերի ստեղծումը ենթադրում էր աշխատանքային ծրագրերի ստեղծում: Աշխատանքային ծրագրերում կա մեծ շեղում դեպի այն լեզուն, որը նույնն է օպերացիոն համակարգի հետ: Այնպիսին է, որ տասը տարի առաջ ծրագրային ապահովման ստեղծումը հիմնականում նշանակում էր C լեզվով ծրագրի ստեղծում: Ի վերջո, ավանդույթը զարգացավ. ծրագրերի ստեղծման համար չպետք է օգտագործվեն անկոչ լեզուներ: Եվ այս ավանդույթը այդքան երկար զարգացել է, որ ոչ տեխնիկական մարդիկ, ինչպիսիք են մենեջերները և ռիսկային կապիտալիստները, նույնպես դրանք սովորեցին:
Սերվերային ծրագրակազմը ամբողջովին ավերում է այս մոդելն: Սերվերային ծրագրակազմում կարող եք վերցնել ցանկացած լեզու, որը ցանկանում եք: Nearly nobody still understands this (especially managers and venture capitalists). But some hackers get it, which is why we've heard about indie languages like Perl and Python. We don't hear about Perl and Python because people use them to write applications for Windows.
Ի՞նչ է սա նշանակում մեզ համար, ովքե՞ր հետաքրքրված են ծրագրավորման լեզուների ձևավորման մեջ, որ մեր աշխատանքի համար հնարավոր լսարան գոյություն ունի.
2. Վրայքը գալիս է պրոֆեյլերներից
Լեզվի մշակողները կամ, առնվազն, դրա իրականացնողները սիրում են գրել կոմպիլյուրներ, որոնք ստեղծում են արագ կոդ: Բայց ես կարծում եմ, որ դա չէ, ինչ արագացնում է լեզուները օգտվողների համար: Քնուտի մեծ հեղինակությունը նկատել է, որ արագությունը կախված է մի քանի նեղ տեղերից: Եվ ով էլ փորձել է արագացնել ծրագիրը, գիտի, որ դուք չեք կարող կանխագուշակել, որտեղ է նեղ տեղը: Պրոֆեյլերը հենց պատասխանն է:
Ծրագրավորման լեզու մշակողները խնդիրը լուծում են սխալ ուղղությամբ: Օգտատերերին պետք չէ, որ բենչմարկները արագ աշխատեն: Նրանց պետք է լեզու, որը կարող է ցույց տալ, թե ինչ մասեր են իրենց ծրագրից պետք է նորից գրել: Այս պահին արագությունը պետք է լինի գործնական: Այսպես, գուցե ավելի լավ է, եթե լեզվի իրականացնողները իրենց ժամանակի կեսը, որը ծախսում են կոմպիլատորի օպտիմիզացիայի վրա, ծախսեն quality profiler գրելու վրա:
3. Вам нужно приложение, которое заставляет ваш язык развиваться
Գուցե դա վերջին ինստանցիայի ճշմարտությունը չէ, սակայն թվում է, որ լավագույն լեզուները զարգացել են այն ծրագրերի հետ միասին, որտեղ նրանք օգտագործվել են: C-ն գրել են մարդիկ, ովքեր համակարգչային ծրագրավորում ունեին անհրաժեշտություն: Lisp-ը մասնակիորեն մշակվել էր խորհրդանշական տարբերակումների համար, Մաքկարթին այնքան impatient էր սկսել, որ նա սկսեց գրել տարբերակումների ծրագրեր անգամ Lisp-ի առաջին փաստաթղթում 1960 թվականին:
Սա հատկապես լավ է, եթե ձեր ծրագիրը լուծում է որոշ նոր խնդիրներ: Դա հրահրում է ձեր լեզուն նոր հնարավորությունների ունենալ, որոնք անհրաժեշտ են ծրագրավորողներին: Ան شخصно ինձ հետաքրքիր է գրել լեզու, որը լավ կլինի սերվերային ծրագրերի համար:
[Երբ քննարկման ժամանակ Գայ Սթիլ նաև արտահայտել է այս միտքը, ավելացնելով, որ ծրագիրը չպետք է բաղկացած լինի ձեր լեզվի համար կոմպիլատոր գրելուց, եթե ձեր լեզուն նախատեսված չէ կոմպիլատորների գրելու համար.]
4. Լեզուն պետք է համապատասխանի մեկանգամյա ծրագրեր գրելուն.
Դուք գիտեք, թե ինչ է նշանակում մեկանգամյա ծրագիր: Դա այն ժամանակ է, երբ ձեզ անհրաժեշտ է արագ լուծել որոշ սահմանափակ խնդիրը: Ես կարծում եմ, թե եթե շուրջը նայեք, ապա կհայտնաբերեք բազմաթիվ լուրջ ծրագրեր, որոնք սկսվել են որպես մեկանգամյա: Ես չեմ զարմանա, եթե շատ ծրագրեր սկսել են որպես մեկանգամյա: Այսպիսով, եթե ցանկանում եք ստեղծել լեզու, որը համապատասխանում է ծրագրային ապահովման ոլորտին, ապա այն պետք է համապատասխանի նաև մեկանգամյա ծրագրերի գրանցմանը, քանի որ դա շատ ծրագրերի առաջին փուլն է:
5. Սինտեքսը կապված է սեմանտիկայի հետ
Traditionally считается, что синтаксис и семантика — сильно отличающиеся вещи. Может это прозвучит шокирующе, но это не так. Я думаю, что то, что вы хотите получить в вашей программе связано с тем, как вы это выражаете.
Ակնհայտ է, որ գործընթացային գործավարությունները մեծ օգուտ են բարդագույն լեզուների հաղթելու համար։ Մասնավորապես, նիշերի հետ աշխատող երկրները կարող են հեշտությամբ ստեղծել նոր գործառույթներ, որոնք միանգամից կծանոթանան: Եթե դուք դնում եք նավի նոր թվի, որը դուք հորինել եք, կարող եք պարզապես նոր գործառույթ ստեղծել նրա գումարելու համար։ Եթե դուք նույնն անեք երկրում, երեւում է, որ տարբերություն կա overloaded operator-ի եւ գործառույթի զանգահարելու մեջ։
Հորինված գաղափարներ
1. Նոր ծրագրավորման լեզուներ
1970-ականներին նոր ծրագրավորման լեզուներն ստեղծելը նորաձեւություն էր։ Այսօր արդեն այդպես չէ։ Սակայն կարծում եմ, որ սերվերի ծրագրերը նորից դարձնելու են նոր ծրագրավորման լեզուներ ստեղծելու մոդան։ Սերվերի ծրագրերով դուք կարող եք գումարել ցանկացած լեզու, որը ցանկանում եք, այնպես որ, եթե որեւէ մեկը ստեղծի լեզու, որն ավելի լավ է թվում, կլինեն մարդիկ, ովքեր այն կիրառում են։
2. Ժամանակի բաժանում
Ռիչարդ Քելսին այս գաղափարը ներկայացրեց, որի ժամանակն արդեն վերադարձել է, եւ ես լիովին աջակցում եմ դրան։ Ցանկանում եմ (եւ Microsoft-ը նույնպես) շատ թիվային հաշվարկներ կտեղափոխվեն գեղագիտական սերվերները։ Մյուս խոսքով, ժամանակի բաժանումը վերադարձել է։ Կարծում եմ, որ լեզվի մակարդակում աջակցություն է անհրաժեշտ։ Օրինակ, Ռիչարդը եւ Ջոնաթան Ռիվզը շատ աշխատանքներ կատարել են գործընթացի պլանավորման ներդրման համար Scheme 48-ում։
3. Արդյունավետություն
Վերջերս թվում էր, որ համակարգիչները արդեն բավական արագ են։ Ամեն օր մենք ավելի ու ավելի լսում ենք բայթ-կոդի մասին, որը, համենայն դեպս, ինձ նշանակում է, որ մեզանից մեծ արագություն ունենք պաշարում։ Բայց կարծում եմ, որ սերվերի ծրագրերով մեզ մոտ դրա մասին չի լինելու։ Ո alguien ուսադիր պետք է վճարի. սերվերներ, որտեղ ծրագրերը աշխատում են, եւ այն օգտվողների քանակը, որ սերվերը կարող է հանդուրժել մեկ մեքենայի հաշվարկի մեղմում, կլինի նրանց կապիտալ ծախսերի բաժանումը։
Կարծում եմ, որ արդյունավետությունը նշանակություն կունենա, գոնե հաշվարկների ձգելու դեպքում։ Դա հատկապես կարևոր է կլինելու մուտք-մարտկցի операцияն, որովհետև սերվերի դիմումները հարյուրավոր այդպիսի գործողություններ արտադրում են։
Վերջում կարող է պարզվել, որ բայթ-կոդը չի լինի լուծում։ Sun-ը եւ Microsoft-ը ներկայումս, ըստ երեւույթի, պայքարում են բայթ-կոդի դաշտում։ Բայց նրանք դա անում են, որովհետև բայթ-կոդը գործընթացում ներգրավելու հարմար գործ է, այլ ոչ թե որովհետև բայթ-կոդն ինքնին լավ գաղափար է։ Կարող է պատահել, որ այս ամբողջ պայքարը անցնի աննկատ։ Դա կվախեցնի։
Նավարկություններ եւ ծուղակներ
1. Հաճախորդներ
Դա միայն ենթադրություն է, սակայն այն այն է, որ հաղթելու են միայն այն ծրագիրները, որոնք ամբողջովին ծառայող են։ Ծրագրում ես ծրագրային ապահովումն այն միության վրա, որ բոլորի մոտ ձեր կլիենտ է լինելու, ասես հասարակություն ստեղծել, որը հիմնված է այն ենթադրության վրա, որ բոլորը անկեղծ կլինեն։ Դա, իհարկե, շատ հարմար կլինի, սակայն դուք պետք է ընդունեք, որ դա երբեք տեղի չի ունենա։
Ես կարծում եմ, որ կլինի արագ աճ սարքերի հետ, որոնք ունեն մուտք դեպի վեբ, և կարող ենք ենթադրել, որ դրանք կմատուցեն հիմքային html և ձևեր։ Ինձնից կա բրաուզեր հեռախոսում թե՞ Ձեր PalmPilot-ում կլինի հեռախոս։ Ամեն բան ձեր blackberry-ի մեծ էկրան կունենա՞։ Կարո՞ղ եք մուտք ունենալ ինտերնետ GameBoy-ից։ Ձեր ժամացույցից։ Ես չգիտեմ։ Եվ ինձ չի հարկավոր դա իմանալ, եթե ես խաղադրույք կատարեմ, որ ամեն բան կտեղակայվի սպասարկչում։ Պարզապես շատ ավելի վստահելի է ունենալ ողջ տրամաբանությունը սպասարկչում։
2. Օբյեկտային ծրագրավորում
Ես գիտակցում եմ, որ սա հակասական հայտարարություն է, բայց ես չեմ կարծում, որ ՕՕՊ-ն ինչ-որ կարևոր է։ Ես կարծում եմ, որ սա է համապատասխան մոդել որոշակի ծրագրերի համար, որոնք պահանջում են հատուկ տվյալների կառուցվածքներ, ինչպես օրինակ՝ լուսանկարչական համակարգեր, սիմուլացիաներ, CAD համակարգեր։ Բայց ես չեմ հասկանում, թե ինչու դա պետք է համապատասխան լինի բոլոր ծրագրերին։
Ես կարծում եմ, որ մեծ ընկերություններում մարդիկ սիրում են ՕՕՊ, մասնակիորեն, որովհետև դա տալիս է շատ այն, ինչ տեսք ունի, որպես աշխատանք։ Այրեխայի բնականությամբ կարող եք ներկայացնել, ասենք, ամբողջ թվերի ցանկը, հիմա կարող եք ներկայացնել դա որպես դաս, որը ունի բոլոր տեսակի շինանյութեր, աղմուկ և այսպիսի քաշքշուկներ։
ՕՕՊ-ի մյուս գրավիչ առանձնահատկություններից մեկը այն է, որ մեթոդները ձեզ տալիս են առաջին դասի գործառույթների որոշակի ազդեցություն։ Բայց սա նորություն չէ Lisp ծրագրավորողների համար։ Երբ դուք ունեք իրական առաջին դասի գործառույթներ, կարող եք դրանք օգտագործել այնպես, ինչպես դա պահանջվում է, այլ ոչ թե ամեն բան տեղադրել դասերի և մեթոդների կառուցվածքում։
Ես կարծում եմ, որ դա նշանակում է լեզվական դիզայնի համար, որ դուք չեք պետք տվյալների մոդելների մեջ չափազանց խորը ՕՕՊ-ն ներդնել։ Կարող է, պատասխանը այն է, որ առաջարկել ավելի ընդհանուր, հիմնարար բաներ, և թույլ տալ մարդկանց նախագծել ցանկացած օբյեկտային համակարգեր որպես գրադարաններ։
3. Կոմիտեի նախագծում
Եթե ձեր լեզուն նախագծում է կոմիտե, ապա դուք անհարմար վիճակում եք, և ոչ միայն հայտնի պատճառներով։ Ունենալը հայտնի է, որ կոմիտեները tend են ստեղծել փունջ, անհամապահ երիտասարդ լեզվաբառարան։ Բայց ես կարծում եմ, որ ավելի մեծ վտանգն այն է, որ նրանք չեն ստանձնում ռիսկերը։ Երբ ուղղակի անձիք ղեկավարում են, ապա նրանք ստանձնում են ռիսկերը, որոնք կոմիտեն երբեք չի համաձայնվի ստանձնել։
Լեզու ստեղծելու համար անհրաժեշտ է ռիսկի դիմելը: Շատ մարդիկ կարող են կասկածել, որ լեզրվի նախագծումը այն է, որտեղ պետք է լավ հետևել ավանդական իմաստությանը: Հավանաբար, դա այնպես չէ: Մարդկանց մյուս գործունեություններում պարգևը համաբաժնված է ռիսկին: Ինչու պետք է լեզվի նախագծումը այլ լինի:
Ընտանիք: habr.com
