English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

სტუმარი
1 / ?
უკან გაკვეთილებზე

პროგრამირება აბსოლუტური ორობითში

პირველი პროგრამისტები პროგრამირებდნენ აბსოლუტური ორობითში: ყველა ინსტრუქცია და ყველა მისამართი ნედლ ორობით ციფრებში. ერთი ინსტრუქცია შეიძლება გამოიყურებოდეს 01100101 00001010 — ინსტრუქციის კოდი და მეხსიერების მისამართი ორობითში.

სპაგეტი-კოდის პრობლემა

როდესაც შეცდომა ახალი ინსტრუქციის ჩასმას მოითხოვდა, პროგრამისტები დილემის წინაშე დგებოდნენ. თავის ადგილზე ჩასმა ნიშნავდა, რომ ყველა მომდევნო ინსტრუქციის მისამართი ერთით გადაინაცვლებოდა — რაც პროგრამისტს მოითხოვდა მთელი პროგრამის ყველა მისამართის ცნობილებას განაახლებინა. ხორბალი.

გამოსავალი: ჩასართი წერტილის ბოლოთ ინსტრუქციის ჩანაცვლება ცარიელ მეხსიერებაზე გადახტომით. ამ ცარიელ ადგილზე: დაიწერა გადაკვეთილი ინსტრუქცია, დამატებული ახალი ინსტრუქციები, შემდეგ გადახტომა უკან. როდესაც შეცდომები გამოჩნდა კორექტირებებში, გამოიყენეს იგივე ხრიკი თავის დამდებელი სხვა ცარიელი მეხსიერების გამოყენებით.

შედეგი: პროგრამის შესრულების ბილიკი ხტებოდა აბრა შემთხვევით ადგილებში. ჰემინგმა ეს "სპაგეტის ქილა" უწოდა. კონტროლის ნაკადი, ნაწილებად დახატული, ზუსტად ისე გამოიყურებოდა, როგორც გახლართული სპაგეტი.

გაქცევის გზები

ორი მოკლე გაუმჯობესება: ოქტალური ჩანაწერი (ორობით ციფრების ჯგუფი 3-ის წყობით) და თექვსმეტობითი (4-ის წყობით, A–F-ის გამოყენებით 9-ზე მეტი მნიშვნელობებისთვის). ამან შეამცირა დაწერის შეცდომები, მაგრამ არ გადაჭრა ფუნდამენტური მისამართის პრობლემა.

სიმბოლური აწყობა (მაგალითად, IBM-ის SAP — სიმბოლური აწყობის პროგრამა — და SOAP — სიმბოლური ოპტიმიზებული აწყობის პროგრამა IBM 650-ზე) პროგრამისტებს საშუალებას აძლევდნენ დაეწერათ ინსტრუქციის სახელები (ADD, MOVE) და სიმბოლური მისამართის ჯდომელი მაქვს, ბინარული და სიმბოლური. აწყობა თარგმნიდა ორობითში შემავალი დროს, ავტომატურად მანიჭებული მისამართის კედელი.

SOAP შესრულდა დამატებითი ოპტიმიზაცია: იგი დალაგა ინსტრუქციები ბრუნავი ბარაბანზე ისე, რომ შემდეგი ინსტრუქცია დაკითხვის თავამდე დამთავრდა წინა — მინიმალური დაყოვნების კოდირება. SOAP თვითონ კომპილირდა: პროგრამა A დამუშავდა მონაცემებად B წარმოსაქმნელად, B გაშვებული A-ზე გაზომვა რამდენით დაატაკა თვითი-კომპილირება.

Parse Tree & Language Hierarchy

ბიბლიოთეკები და გადატანადი კოდი

ჰემინგმა აღნიშნა, რომ ხელმისაწვდომი პროგრამული უზრუნველყოფის (მათემატიკური ბიბლიოთეკების) იდეა ძალიან ადრე წარმოიშვა — ბაბეჯმა ის შემოიფიქრა. პრობლემა: აბსოლუტური მისამართის ბიბლიოთეკა მოითხოვდა, რომ ყველა რუტინა იკავებდეს იგივე მეხსიერებას ადგილებს ყოველ დროს, როდესაც იგი გამოიყენებოდა. როდესაც სულ ბიბლიოთეკა ზე მეტი გაიზარდა, პროგრამები ერთმანეთს კვამლის აკვამდენ იგივე მისამართებისთვის.

გამოსავალი: გადატანადი კოდი. აწყობა გამომუშავებს ინსტრუქციებს, რომლებიც თვითობა მეხსიერებას შედარებით — ბაზის მისამართიდან გადახვევები — ვიდრე აბსოლუტური მისამართი. საბმელი ხსნის ბოლო მისამართებს დატვირთვის დროს.

ფონ ნეიმანის გამოქვეყნებული რეპორტები (ფართოდ გავრცელებული) აღწერს საჭირო პროგრამირების ხრიკებს. პირველი გამოქვეყნებული პროგრამირების წიგნი (ვილკესი, უილერი და გილი, EDSAC, 1951) კოდიფიცირდა ეს ტექნიკა.

ახსენით, რატომ აბსოლუტური მისამართის ბიბლიოთეკები შექმნეს სკალაბილობის პრობლემა, და როგორ გადატანადი კოდი ამ პრობლემა გადაჭრა. რა ნიშვნიანი თვისება აბსოლუტური მისამართის გამოიწვია კოლიზია, და რას ნიშნავს 'გადატანადი' ტექნიკურად?

ენის დიზაინის განშტოება

FORTRAN (1957, IBM) და ALGOL (1958, საერთაშორისო კომიტეტი) აწარმოებენ ორი დიზაინის ფილოსოფიად, რომელმაც რადიკალურად განსხვავებული შედეგი წარმოშვა.

FORTRAN

ჯონ ბეკუსი ხელმძღვანელი FORTRAN (FORmula TRANslation) პროექტის IBM-ში. დიზაინის მიზანი: გააკეთოს ენა მეცნიერებისა და მეწამულების მხრიდან ადვილი გამოსაყენებელი. FORTRAN მიიღო მათემატიკური ჩანაწერი, რომელიც ბუნებრივი იყო მის მომხმარებელთა: A = B + C * D ვიდრე ADD B, C; STORE T; MULTIPLY T, D; STORE A.

FORTRAN უძველესი 60+ წელი. იგი რჩება აქტიურ გამოყენებაში სამეცნიერო გამოთვლებში, სითხე დინამიკაში, კლიმატის მოდელირებაში და გამოთვლილი ფიზიკაში. ჰემინგმა აღნიშნა ეს გამძლეობა შედეგი წარმატებული დიზაინის.

ALGOL

ALGOL (ALGOrithmic Language) დაპროექტდა სამეცნიერო თანამშრომელთა კომიტეტის მხრიდან მიზნით მათემატიკური სიმკაცრე: ლოგიკურად ფხვნილი, განმარტებული ენა. Backus-Naur Form (BNF) ჩანაწერი გრამატიკის აღწერისთვის იყო გამოგონებული ALGOL-ის განსაზღვრის დროს.

ALGOL ჩავარდა პრაქტიკაში. მიუხედავად მისი ლოგიკური ელეგანტობის და მისი უზარმაზარი გავლენის შემდგომი ენის დიზაინზე (Pascal, C, და თითქმის ყველა თანამედროვე ენა წარმოიშვან ALGOL-ის გრამატიკული კონცეფციებიდან), ALGOL თავად არასოდეს იყო ფართოდ განაწილებული. ჰემინგის მნიშვნელობა: ლოგიკურად დაპროექტდა, ადამიანი გამოუსაბამო.

ენების იერარქია

ჰემინგმა აღწერა ბუნებრივი იერარქია მანქანა კოდიდან მაღლები აწყობის გავით, უმაღლესი დონის ენებამდე, და საბოლოოდ 'პრობლემებით დაკავშირებული ენა' ახლო იმასთან, როგორ იფიქრებენ პრაქტიკოსები მათი პრობლემის დომენზე. თითოეული დონე ამატებს ადამიანის წასაკითხად დღის თავზე მანქანის ეფექტურობის ღირებულებით.

ჰემინგის ოთხი ენის დიზაინის კრიტერიუმი

ჰემინგმა ამოწურა FORTRAN წინააღმდეგ ALGOL-ის გაკვეთილი ოთხ კრიტერიუმში წარმატებული პროგრამირების ენებისთვის:

1. ადვილი სწავლა — დამწყები შეიძლება სწრაფად გახდეს პროდუქტიული

2. ადვილი გამოყენება — ჩვეულებრივი ამოცანები მოითხოვს მინიმალურ ცერემონიას

3. ადვილი გამართვა — შეცდომები აღწევენ მნიშვნელოვან, ადგილდადგმული შეტყობინებებს

4. ადვილი გამოყენება ქვე-რუტინებს — ხელმისაწვდომი და აბსტრაქცია არ მოითხოვენ გმირ ძალას

მან დამატო სტრუქტურული მისწრაფება: ადამიანის ენა ატარებს დაახლოებით 60% სიჭარბე; წერილი ენა დაახლოებით 40%. დაბალი-სიჭარბე ენები (როგორც APL) აწარმოებენ ელეგანტურ ერთი-წლიან მძღოლებს, რომლებიც ექსპერტებმა პოულობენ ლამაზი და დამწყებებმა აგრძნობთ გაუჭვარტული — და რომელიც აკვიატებენ აღმოჩენილი შეცდომები, როდესაც ერთი სიმბოლო ცვლის მნიშვნელობას.

იმპლიკაცია: ენა დაპროექტებული ლოგიკური ელეგანტობისთვის ოპტიმიზაციას აძლევს არასწორ მკითხველს. პროგრამისტი ადამიანი; ადამიანები ჭირდება სიჭარბე შეცდომის დასაჭერად და მიზანის გასაკეთებლად.

გამოიყენეთ ჰემინგის ოთხი კრიტერიუმი პროგრამირების ენაზე, რომელიც კარგად იცნობთ. ქულა თითოეული კრიტერიუმი 1–5 (5=მეუბნება). შემდეგ ამოიცანით რომელი კრიტერიუმი, თუ გაძლიერდა, ყველაზე გაზრდის ენა — და ახსენით რა სპეციფიკური ცვლილება დაჩვენა.

ფსიქოლოგიური წინააღმდეგ ლოგიკური ენის დიზაინი

ჰემინგი დაბრუნდა FORTRAN/ALGOL მცირე ხელს უწყობდა გაკვეთილი, როგორც ლიდერობა ინსტიტუციური და ადამიანის დინამიკაში, არა უბრალოდ ენა დიზაინი.

FORTRAN იყო დიზაინი ფსიქოლოგიურად — ადამიანის, რომელმაც გამოიყენებს მას, კერძოდ მეცნიერებმა რომელიც ფიქრობდნენ მათემატიკური ჩანაწერი. ALGOL იყო დიზაინი ლოგიკურად — ფორმალური სიმკაცრე და თეორიული ელეგანტობა.

პარადოქსი ჰემინგმა გამოამჟღავნა: ლოგიკურად სწორი ენა, რომელიც ადამიანი ისევ მოწინააღმდეგის წარუმატებლობა; პრაგმატიკურად დაპროექტებული ენა, რომელიც ადამიანი მიღება წარმატება, მიუხედავად იმისა რომ ლოგიკურად უფრო არეული.

მან ციტირება APL მეშვიდე შემთხვევა: ლოგიკურად ელეგანტური, ერთი-ხაკი გამოხატული, მის საკუთარი სპეციალური სიმბოლო კომპლექტი. ექსპერტებმა უყვარდათ ის. ნორმალური პროგრამისტებმა აგრძნობთ წაკითხვაზე. ერთი სიმბოლო ცვლილება შეიძლება ჩალიან რუჯი პროგრამის მნიშვნელობას. APL აქვს მცირე devoted კოლექტივი და თითქმის ნული mainstream გამოყენება.

ადამიანის სიჭარბე არგუმენტი: საუბარი ენა ~60% redundant (განმეორებითი კონტექსტი, clarifying სიტყვები, predictable სტრუქტურა). წერილი ენა ~40% redundant. ამ redundancy ემსახურება შეცდომის აღმოჩენა — ადამიანი unreliable, ენა evolution ატარება საკმარისი განმეორებითი ინფორმაცია დაჭერა და კორექცია შეცდომები. დაბალი-redundancy ენა ამოღებს ეს გაუშვებელი ქსელი.

კომპილატორის იერარქია

ჰემინგმა აღწერა კომპილატორი/ინტერპრეტატორი layering: პროგრამა შეიძლება წაიკითხოს უმაღლესი-დონის ენა და ითარგმნა დაბალი-დონის ერთი. Stack ეს ფენების — თითოეული თარგმნის ერთი დონე ქვემოთ. ზე ზედა: domain-specific ენა, რომელ ექსპერტებმა ფილაიდან (ბიოლოგია, finance, ფიზიკა) დაწერა ბუნებრივი. ხელფ: მანქანა კოდი. თითოეული transition არის კომპილატორი ან interpreter.

პროგნოზირება ენის გადარჩევა

1993-ით, ჰემინგი დაათვალიერა მრავალი ენა წარმატება და წარუმატებელი. FORTRAN (1957) გადარჩა. ALGOL (1958) წარუმატებელი. COBOL (1959) გადარჩა ათწლეულების ბიზნეს გამოთვლებში. LISP (1958) გადარჩა AI კვლევებში. PL/I (1964) ცდილობდა unify ყველაფერი და წარუმატებელი.

გამოიყენოთ ჰემინგის ფსიქოლოგიური წინააღმდეგ ლოგიკური დიზაინი განასხვავება და მის ოთხი კრიტერიუმი, ახსენით რატომ ერთი ენა თქვენ იცნობთ აყვავდა და ერთი წარუმატებელი (ან უარდებული). თქვენი ახსნა უნდა გამოსახოს კონკრეტული ადამიანი ფაქტორი, რომელმაც მოწოდა adoption ან უარი — არა უბრალოდ ტექნიკური თვისებები.

რეკურენტული პატერნი

ჰემინგის პროგრამული უზრუნველყოფა ისტორია თავი ატარებს რეკურენტული სტრუქტურა:

1. ტკივილი შეზღუდვა არსებობს (აბსოლუტური მისამართი, ორობითი ჩანაწერი, უვარმიშ უცვლელი კოდი)

2. ვინმე ამოწურა აბსტრაქცია ფენა, რომელიც ჩალიან შეზღუდვა

3. აბსტრაქცია დაშვება ახალი scale, რომელიც აკმენ ახალი ტკივილი შეზღუდვა

4. გამეორება

ორობითი → octal/hex → სიმბოლური აწყობა → FORTRAN → structured პროგრამირება → object-oriented ენები → domain-specific ენები. თითოეული ფენა რეზოლვებს predecessor-ის ყველაზე მწვავე ტკივილი შემოთავაზება ახალი კლასის პრობლემა.

სპაგეტი code პრობლემა (აბსოლუტური მისამართი) მივიდა სიმბოლური აწყობა. დიდი აწყობა პროგრამები მივიდა FORTRAN. დიდი FORTRAN პროგრამები მივიდა structured პროგრამირება და შემდეგ object orientation. ჰემინგის ლექცია ჩასრულდა ამ შემდგომ transitions, მაგრამ პატერნი გრძელდება.

მისი გაკვეთილი ინჟინრებისთვის: თქვენ ყოველთვის წყვილი ტკივილი აღმოჩენილი მხედელი previous აბსტრაქცია. გამოცნობა ფენა თქვენ ამჟამად ზე requires ცოდნა რატომ ფენა ქვემოთ ის არსებობს.

იდენტიფიკაცია პროგრამული უზრუნველყოფა აბსტრაქცია ფენა თქვენ მუშაობა regularly. რა ტკივილი შეზღუდვა ფენა ქვემოთ აკეთა რა ჩალიან? და რა ახალი კლასი პრობლემა აკეთა თქვენი current ფენა introduce — რა ტკივილი ამ შემდგომი ფენა ჰქონდა გაჭრა?