Оригінал статті ви можете знайти тут http://cs.brown.edu/~spr/research/env.html

Історія

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

Наше справжнє дослідження в середовищах програмування розпочалося з появою робочих станцій (Apollos, Suns, Percs, …). Ми (поряд з кількома іншими групами) відчували, що треба вміти користуватися додатковою обчислювальною потужністю та графічним дисплеєм, щоб спростити та покращити досвід програмування. Наша перша спроба тут відображається в системі PECAN. PECAN використовує технологію компілятора для створення набору інструментів для мови. Набір інструментів включає в себе текстові (частково синтаксичні та керовані) та графічні редактори (діаграми Nassi-Schneiderman, графіки Ротона), семантичні перегляди таблиці символів, керування потоком і виразами, а також представлення виконання стек та коду. Вона також містила додаткову компіляцію, як набрав користувач. Це була система веселощів і навчила нас багато, але це було практично не практично (воно вичерпало пам’ять приблизно на 1000 рядків коду), і не користувалося повною мірою можливостями графічних можливостей робочих станцій.

На основі цієї роботи ми намагалися краще використовувати графічні можливості робочих станцій, використовуючи візуальні мови. Ми зрозуміли, що візуальні мови зазвичай охоплюють лише обмежену частину програмування (наприклад, лише керуючий потік або тільки потоки даних), і для реального програмування нам доведеться дозволити програмісту працювати з кількома такими мовами. Для цього ми розробили те, що ми назвали концептуальним середовищем програмування GARDEN, що дозволяє програмісту створювати нові візуальні або текстові мови (з належним візуальним синтаксисом та відповідною семантикою), гніздити та іншим способом змішувати ці мови в повній системі. Система забезпечувала відповідні графічні та текстові редактори, базову мову Lisp, повний об’єкт загального користування (щоб декілька програмістів одночасно працювали на одній і тій же програмі, а також підтримувати розподілені програми), браузери Smalltalk, кілька потоків і навіть компілятор. Система була використана для розробки широкого спектру візуальних мов.

Під час розробки SARDEN кілька людей кинули виклик загальним дослідженням в середовищах програмування, стверджуючи, що, хоча інструменти, які ми і інші розробляли, були миловими і можуть бути корисними, практично нічого не було практично, і жоден з проектів не міг реально використовувати себе для розвитку; Щоденна розробка програм на UNIX (або будь-якій іншій ОС на той час) була зроблена за допомогою окремих і текстових редакторів, відладчиків тощо, які протягом десяти років істотно не змінилися. Таким чином, ми розпочали розробку практичного середовища для реального програмування. Ми зрозуміли, що вам не потрібно мати загальний магазин або центральне представництво, щоб мати інтегроване середовище, а також не потрібно розробляти нові інструменти для графічного інтерфейсу. Замість цього ми розробили простий механізм інтеграції на основі повідомлень, який дозволяє користувачам обговорювати один одного та серію обгорток, що надають графічні інтерфейси з існуючими інструментами (dbx, gdb, make, rcs, …). Результатом стало середовище FIELD. Розроблене нами розширення середовища з різними графічними представленнями, включаючи структурні представлення (блок-схема, ієрархія класів) та динамічні перегляди (дисплеї структури даних, візуалізація купи, візуалізації введення-виведення). FIELD був досить успішним. Ми використовували це протягом кількох років на наших курсах інтро програмування, він був комерційно використаний DEC (як FUSE), і був скопійований HP (Softbench), Sun (Tooltalk), SGI та іншими.

Наше наступне середовище DESERT спробувало розширити FIELD кількома способами. По-перше, він хотів забезпечити програміста якісним відображенням коду. Це було зроблено шляхом розширення Adobe Framemaker як редактора програм. Розширення містило формат кодування стилю Baeker-Marcus, яке було зроблено як набраний користувачем, який включав семантичний пошук символів по всій системі (і не тільки поточний файл). По-друге, ми хотіли дозволити програмісту переглядати систему по-різному, маючи змогу виділити код, пов’язаний із певною зміною чи функцією. Це було зроблено шляхом розбиття програми на фрагменти та роботи редактора з віртуальними файлами, що складаються з різних фрагментів, зібраних з фактичних вихідних файлів. Програміст міг вказати набір фрагментів, використовуючи відповідні запити. Фрагменти знаходяться під управлінням конфігурації, а зміни, внесені до віртуальних файлів, були інтегровані в оригінальні вихідні файли, коли віртуальні файли були збережені. Нарешті, ми хотіли забезпечити більш якісні візуалізації коду та виконання, і таким чином створила систему 3D-візуалізації, інтегровану в навколишнє середовище.

Наші недавні зусилля зосереджені на наданні підтримки еволюції та послідовності програмного забезпечення, а не намагання забезпечити комплексне середовище програмування. Цей пакет, CLIME, передбачає наявність інструментів для створення та підтримки всіх різних артефактів, які супроводжують програмну систему: специфікації, дизайн, джерело, тестові випадки, документацію тощо. Тоді семантика кожного з цих артефактів визначається в термінах набір метаконтроликів по відношенню до інших артефактів. Дизайн розглядається як обмеження на джерело (і навпаки), так що клас в UML-діаграмі повинен мати відповідний клас у вихідному; правила використання мови обмежують форму джерела; документація повинна відповідати кодексу; тестові випадки повинні покривати код і бути повторенним, коли змінюється код. Все це перевіряється поступово, оскільки використання редагує артефакти, і будь-які виникаючі невідповідності відображаються за допомогою графічного інтерфейсу.

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

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

Written by