А   Б  В  Г  Д  Е  Є  Ж  З  І  Ї  Й  К  Л  М  Н  О  П  Р  С  Т  У  Ф  Х  Ц  Ч  Ш  Щ  Ю  Я 


Порівнюваний мову - програмування

Порівнянні мови програмування широко використовуються для створення великих програмних комплексів до їх компонентів. З цієї причини порівняння цих мов програмування обов'язково повинно зачіпати проблеми, що виникають, коли розмір програмного комплексу досягає багатьох сотень тисяч рядків, коли програмний комплекс використовується протягом тривалого часу, коли в розробку, реалізацію та супровід програмного комплексу вовлелен колектив програмістів.

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

Оцінка порівнюваних мов програмування проводиться з точки зору можливості і зручності використання кожного з них в одній з чотирьох областей застосування: програмного забезпечення для економічних розрахунків, програмного забезпечення для науково-технічних розрахунків, операційних систем, системних утиліт. Для кожної з розглянутих областей застосування нами виявлені найбільш суттєві кошти, наявність яких необхідна або бажано в мові програмування. Після цього мови Сі і Паскаль оцінюються з точки зору наявності чи відсутності в них цих коштів, можливості або неможливості їх реалізації.

З трьох порівнюваних мов програмування тільки мова Сі дозволяє використовувати поряд з малими і прописні літери. І хоча автору дуже подобається ця особливість мови Сі, він боїться, що використання і великих і малих літер в деякій мові програмування є дещо суперечливим. Тому автор обмежується констатацією факту наявності такої можливості в мові Сі і утримується від будь-яких висновків.

Жоден з порівнюваних мов програмування не має коштів для організації паралелізму. Гнучкість мови Сі забезпечує можливість доступу до апаратних засобам, зокрема, на ньому можуть бути реалізовані драйвери зовнішніх пристроїв. Одне з тверджень, сформульованих у цій статті, полягає в тому, що ця гнучкість мови Сі досягається за рахунок принесення в жертву безпеки.

З усіх трьох порівнюваних мов програмування мову Ада є єдиним, в якому передбачені високорівневі засоби для організації паралельної обробки.

У всіх трьох порівнюваних мовах програмування підтримується деякий набір базових типів даних, що використовуються як для опису скалярних типів даних, так і для побудови агрегованих типів даних. Далі проводиться послідовне обговорення базових типів даних.

У всіх трьох порівнюваних мовах програмування підтримується можливість використання символьних даних.

У всіх трьох порівнюваних мовах програмування підтримується можливість використання масивів об'єктів довільних типів, підтримуваних в кожному з цих мов програмування, включаючи масиви масивів і масиви записів. У мові Ада є можливість використання власне багатовимірних масивів.

Ні в одному з порівнюваних мов програмування не підтримується можливість використання даних логічного типу (який протиставляється булевскому типу), таких, наприклад, як бітові рядки і операції І, АБО, НЕ і зсуву вправо або вліво над ними. У мові Сі є можливість виконання всіх вищеназваних операцій, але вони виконуються над даними цілого типу. У мові Ада є можливість використання масивів булевского типу і застосування до елементів цих масивів операцій І та АБО.

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

Були визначені недоліки кожного з порівнюваних мов програмування.

Відновлення уявлень розробників кожного з порівнюваних мов програмування про те, як повинні писатися програми, і визначення стрижневих компонентів кожного з порівнюваних мов програмування, тобто визначення ядра кожного з порівнюваних мов програмування.

Ні в одному з трьох порівнюваних мов програмування проблеми, пов'язані з розміщенням даних, не вирішено адекватним чином, хоча в мові Ада і була зроблена спроба вирішення деяких з цих проблем. Наскільки відомо автору, ці проблеми вирішені тільки в мові Праксис[160], В якому програміст може явно вказувати на те, як буде здійснюватися розміщення програми (коду) і статичних даних.

З цієї причини у всіх порівнюваних мовах програмування є оператор переходу goto. Однак в кожному з порівнюваних мов програмування оператор переходу goto реалізований по-своєму, що визначається, зокрема, видом позначки, і їх областями дії.

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

Одним з найбільш цінних якостей кожного з порівнюваних мов програмування є можливість введення в них нових типів даних. І в мові Сі і в мові Паскаль є деяке число стандартних або, інакше кажучи, визначених типів даних, на основі яких можна конструювати нові типи даних. Зокрема, в кожному з порівнюваних мов програмування є масиви, що складаються з однорідних елементів. Крім масивів в мові Сі є структури, а в мові Паскаль - записи, які складаються з неоднорідних компонентів або полів. У мові Паскаль є, крім того, безлічі і файли, що складаються з однорідних елементів. Рекурсивне визначення нових типів даних забороняється, за винятком випадків, коли використовуються покажчики.

Саме тут проявляється існуюча різниця в философиях порівнюваних мов програмування.

Розглянемо питання, пов'язані з розмірами трьох порівнюваних мов програмування, з точки зору їх використання для вирішення завдань системного програмування (обговорення специфіки завдань системного програмування наведено в розд.

Наведені вище питання призначені для формування характеристик порівнюваних мов програмування з метою оцінки їх якості. Однак необхідно мати на увазі, що деякий мову програмування, який отримав дуже високу оцінку своєї якості в порівнянні з іншими мовами програмування, може виявитися не найкращим для певної області застосування. Хоча оцінка якості мови Паскаль набагато перевершує оцінку якості мови Кобол, вибір останнього набагато більш кращий, якщо завдання, яке потрібно вирішувати, відноситься до області економічних розрахунків. Адже на відміну від мови Паскаль, мова Кобо л був розроблений спеціально для цієї області застосування.

Пропоноване нижче обговорення зачіпає тільки властивості ядер порівнюваних мов програмування і вплив цих властивостей на окремі процедури (підпрограми) і невеликі програми. Обговорювані тут властивості впливають на легкість записи алгоритмів і структур даних, на здатність програміста конструювати добре структуровані програми і, отже, на читабельність програм. Ці властивості не обов'язково мають істотний вплив на організацію великих програмних комплексів, хоча серед них є і такі.

Запропонований метод базується на виділенні в кожному з порівнюваних мов програмування деякого підмножини наданих їм повноважень, званого ядром відповідного мови програмування. У припущенні, що ядро мови програмування повністю відображає філософію мови програмування, з якого воно виділено, можна замінити порівняння власне мов програмування порівнянням ядер відповідних мов програмування. На жаль, ця стаття відтворена в книзі не в повному обсязі.

Як вже говорилося вище, з усіх трьох порівнюваних мов програмування тільки мову Ада містить деякі спроби вирішення проблем, пов'язаних з використанням поділюваних даних. У мові Ада є Прагма SHARED, яка вказує транслятора з мови Ада на те, що всі перераховані в Прагма SHARED змінні при використанні їх в тексті програми потребують синхронізації з доступу (див. Розд. При використанні мов Паскаль і Сі програміст не має можливості дати аналогічні вказівки транслятору з відповідної мови програмування. Звичайно, в мові Паскаль немає коштів для організації паралельної обробки і відсутність такої можливості не є проблемою.

Відмінності в трактуванні типів даних в кожному з порівнюваних мов програмування є наслідком відмінності цілей, переслідуваних при створенні кожного з них. Мова Паскаль являє собою спробу заховати від програміста реальну ЕОМ шляхом надання в його розпорядження високорівневою віртуальної Паскаль-машини, система команд якої збігається з набором операторів мови Паскаль і набір об'єктів якої визначається наявними в мові Паскаль типами даних. На противагу цьому в мові Сі не вжито ніяких зусиль, щоб заховати від програміста реальну ЕОМ.

Відмінності в трактуванні типів даних в кожному з порівнюваних мов програмування зумовили їх суттєва відмінність один від одного. Внаслідок більш високого рівня типізації даних і більшої строгості перевірок, пов'язаних з використанням різних типів даних, мова Паскаль забезпечує можливість написання більш надійних в порівнянні з мовою Сі програм. У той же час ці обмеження призводять до того, що ряд програм виявляється досить важко або навіть зовсім неможливо реалізувати на мові Паскаль.

На додаток до засобів локального контролю у всіх порівнюваних мовах програмування є кошти нелокального контролю у вигляді звернення до підпрограм. Хоча конструкції цього роду в основному стосуються організації взаємодії між різними програмними одиницями, проте вони надають певний вплив і на організацію окремих програмних одиниць.

У статтю включена оцінка можливості використання кожного з двох порівнюваних мов програмування в чотирьох різних областях застосування. Ми не вважаємо жоден з них добре пристосованим для реалізації програмного забезпечення для економічних розрахунків, і наш вибір на користь мови Паскаль для цієї області застосування продиктований лише міркуваннями більшої безпеки цієї мови програмування. ми вважаємо, що обидві мови програмування досить добре підходять для реалізації програмного забезпечення для науково-технічних розрахунків, а наш вибір на користь мови Паскаль для цієї області застосування продиктований тими ж міркуваннями, що і в попередньому випадку.

Автор вважає корисним коротко розглянути розмір і потужність кожного з трьох порівнюваних мов програмування. Однак це твердження, як і будь-яка теорема існування, не робить ніякого впливу на практичне програмування. Наприклад, в практичному програмуванні дуже часто потрібно забезпечити можливість доступу по фізичним адресами пам'яті або до регістрів центрального процесора. ЗТС вимога лежить в функціональній площині, яка, взагалі кажучи, ортогональна площині тих вимог, які визначають потужність мови програмування. Необхідно відзначити, що мови Ада і Сі забезпечують можливість доступу по фізичним адресами пам'яті.

Автор вважає корисним сказати кілька слів про історію створення кожного з трьох порівнюваних мов програмування і тих передумовах, які привели до створення кожного з них. Крім того, обговорення сучасного стану цих мов програмування стає більш осмисленим в результаті розгляду того шляху, який був пройдений їх творцями.

Однак ступінь типізації та підходи до трактування типів даних в кожному з трьох порівнюваних мов програмування досить суттєво відрізняються.

Наскільки замовник планованого порівняння мов програмування знайомий з особливостями, можливостями і концепціями порівнюваних мов програмування.

Що буде використано як джерело для отримання відповідей на питання про кожного з порівнюваних мов програмування. До якої міри і наскільки глибоко будуть досліджені порівнювані мови програмування і їх оточення.

Таким чином, розпочате авторами порівняння мов програмування починається з виділення ядра кожного з порівнюваних мов програмування. Надалі порівнянні піддаються тільки виділені на першому кроці ядра порівнюваних мов програмування, оскільки саме вони відображають ті особливості мов програмування, порівняння яких входило в наміри авторів.

Тому порівняння мов програмування необхідно почати з розгляду цих питань для кожного з чотирьох порівнюваних мов програмування.
 З огляду на вищесказане, можна зрозуміти, що формування характеристик і оцінка філософії типів в порівнюваних мовах програмування є однією з найважливіших частин будь-якого порівняння мов програмування. Подальший виклад присвячено обговоренню деяких аспектів типізації даних і деяких критеріїв оцінки філософії типів в мовах програмування.

В процесі проведення порівняння мов програмування обов'язково виникають питання, пов'язані з низкою тонкощів, наявних в порівнюваних мовах програмування.

Якщо порівняння мов програмування планується провести в світлі сучасних уявлень про технологічність (мається на увазі, як порівнювані мови програмування забезпечують підтримку сучасних технологій програмування), то природним наслідком з трьох наведених вище передумов є необхідність проведення порівняння стрижневих компонентів цих мов програмування і парадигм, втілених при їх проектуванні. Саме це і пропонують зробити автори, хоча й трохи непрямим чином.

Вульфа Порівняння мов програмування з точки зору технології програмування представлений метод порівняння мов програмування, заснований на виділенні підмножини можливостей з порівнюваних мов програмування, що називається авторами цієї статті ядром мови програмування. Автори стверджують, що ядро мови програмування відображає філософію цієї мови програмування, а інша частина цього мови програмування (що не включається до складу ядра мови програмування) в основному слід цієї філософії. Автори зосереджують увагу на формуванні набору понять, індукованих філософією мови програмування, а потім розглядають вплив цього набору понять на програмування як на рівні операторів, так і на рівні процедур і модулів.

Відновлення уявлень розробників кожного з порівнюваних мов програмування про те, як повинні писатися програми, і визначення стрижневих компонентів кожного з порівнюваних мов програмування, тобто визначення ядра кожного з порівнюваних мов програмування.

Відновлення уявлень розробників кожного з порівнюваних мов програмування про те, як повинні писатися програми, і визначення стрижневих компонентів кожного з порівнюваних мов програмування, тобто визначення ядра кожного з порівнюваних мов програмування.

На думку автора, немає необхідності вбудовувати в мову програмування, призначений для вирішення завдань системного програмування, засоби введення-виведення високого рівня, хоча і бажано включення в опис такої мови програмування специфікацій набору бібліотечних підпрограм, що реалізують відповідні кошти. З трьох порівнюваних мов програмування тільки мову Паскаль має засоби введення-виведення високого рівня, в мовах ж Ада і Сі ці кошти реалізуються бібліотечними подпрограммами, що входять до складу стандартних бібліотек введення-виведення.

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

У цьому обговоренні термін розподіл пам'яті використовується в дуже вузькому сенсі - при розміщенні полів в записах. У кожному з трьох порівнюваних мов програмування є заздалегідь задана схема розміщення полів в записах, що забезпечує відносно високу ефективність з точки зору як часу доступу до них, так і займаної пам'яті. Крім того, в кожному з трьох порівнюваних мов програмування в розпорядження програміста надаються кошти, що дозволяють порушувати або змінювати заздалегідь задану схему розміщення полів в записах. Необхідність введення таких засобів диктується двома причинами.

З цієї причини у всіх порівнюваних мовах програмування є оператор переходу goto. Однак в кожному з порівнюваних мов програмування оператор переходу goto реалізований по-своєму, що визначається, зокрема, видом позначки, і їх областями дії.

Таким чином, можна зробити висновок про те, що обидві мови програмування досить зручні при реалізації програмного забезпечення для науково-технічних розрахунків, хоча жоден з них не є ідеальним або навіть спеціально орієнтованим на це. Наприклад, жоден з порівнюваних мов програмування не має інфіксной форми запису для обчислення експоненційних функцій і засобів обробки виняткових ситуацій, пов'язаних з виконанням арифметичних операцій і діагностуються апаратними засобами.

Сказане в цій статті не означає, що довільне, повне в деякому сенсі (або майже повне) підмножина деякого мови програмування може бути використано в якості ядра цієї мови програмування для проведення досліджень, подібних справжньому. Навпаки, визначення представницьких ядер порівнюваних мов програмування вимагає глибокого розуміння безлічі питань, пов'язаних з мовами програмування взагалі і зі порівнюваними мовами програмування зокрема. Наприклад, дуже легко виділити підмножина мови Фортран, повне з точки зору можливості проведення довільних обчислень, але не відображає суті і мощі мови Фортран.

У мові Паскаль є можливість використання ще одного структурованого типу даних - множин. Крім того, у всіх трьох порівнюваних мовах програмування є можливість застосування в тій чи іншій формі механізму покажчиків.

Що буде використано як джерело для отримання відповідей на питання про кожного з порівнюваних мов програмування. До якої міри і наскільки глибоко будуть досліджені порівнювані мови програмування і їх оточення.

Ця стаття присвячена опису і протиставлення найбільш істотних особливостей мов Сі і Паскаль. Особливу увагу було приділено виявленню відмінностей в философиях порівнюваних мов програмування: якщо для мови Паскаль головними є надійність, легкість для читання і легкість написання програм на ньому, то для мови Сі - його гнучкість.

Таким чином, розпочате авторами порівняння мов програмування починається з виділення ядра кожного з порівнюваних мов програмування. Надалі порівнянні піддаються тільки виділені на першому кроці ядра порівнюваних мов програмування, оскільки саме вони відображають ті особливості мов програмування, порівняння яких входило в наміри авторів.