Ada_Ru форум

Обсуждение языка Ада

RE: [ada_ru] Мои две копейки (продолжение)

Оставить новое сообщение

Сообщения

Eugene Zueff
RE: [ada_ru] Мои две копейки (продолжение)
2006-05-23 17:06:43

>Завязываться на VS - заранее ограничить себя Windows платформой, >аналогично выбрать KDeveloper - ограничешься Linux, (ну может

>еще Unix-ами). А Eclipse этож кошмар какой-то :-)

>Чтоб что-то сделать такую уйму доки прочитать надо, столько

>классов выучить... Я пробовал как-то посмотреть, стало просто

>страшно :-(

 

Ну, не так страшен черт... Все это вполне берется, и книги уже есть, описывающие, как конкретно встроиться в Экрипс (и на русский уже

переведены), и людей я знаю в Москве, которые за пару недель

с нуля в этом Эклипсе более-менее освоились...

 

Зато в результате мы получаем профессиональную мощную, всеми признанную и всем известную среду, которая в значительной степени сама будет тащить Ада-проект, сделанный на ее основе.

 

>Уж кажется проще взять что-то типа www.scintilla.org и

>воткнуть туда Аду...

 

Да, или любой другой подобный (наиболее подходящий) свободный компонент с открытыми исходными текстами. Найти можно, если не пожалеть недели и аккуратно полазить по итнернету.

 

Проблема в другом: как этот компонент интегрировать с Ада-компилятором - таким образом, чтобы поддержать все продвинутые фичи современных IDE? (Извините, что я все об одном и том же... :-)

 

Кстати, пришлось мне тут распечатать руководство по GPS и посмотреть. Да, действительно, есть возможности расширения, и достаточно аккуратно сделаны. И кастомизировать можно среду, и новые тулзы подключить, и заставить GPS выход от этих тулзов как-то отображать. Вся конфигурационная информация сделана как XML-файлы, что совершенно правильно, и работа, в основном, заключается в дописывании нужной информации в эти файлы.

Это действительно именно то, что нужно, но... это только один, самый начальный шаг. По такой технологии можно встраивать самые архитектурно простые инструменты, управляемые командной строкой. По существу, все, что позволяет делать GPS,- это задать параметры этой самой командной строки, входные/выходные объекты, и как GPS должен их интерпретировать.

 

Вставить, например, возможность фоновой компиляции (чтобы ошибки выдавались непосредственно в процессе ввода текста) или сделать семантически-ориентированную раскраску программы (чтобы, скажем, пользовательские типы

выделялись особым цветом и при правом клике на этом типе выдавалась бы информация о его структуре) - при такой организации системы вряд ли возможно. Я уже не говорю о поддержке рефакторинга, как в Эклипсе.

Для всего этого нужно, упрощенно говоря, активное участие компилятора (точнее, его компонентов) в работе среды. В GPS же компилятор

рассматривается как черный ящик: ему дали текст, на выходе он выдал объектный код и/или диагностики. (Хотя, воможно, какое-то движение навстречу потребностям среды у компилятора все же есть; дайте время покопаться.)

 

(Для страховки: это не огульная критика; это конструктивные замечания, выраженные в дружественном тоне :-)

 

А вот критика:

Сделал я все-таки тестовый проект из одного файла Hello World

(прорвавшись в Визарде сквозь тучу окошек с ничего не говорящими

не-гнатовскому челу словами), проверил синтаксис (получив пару

неадекватных сообщений об ошибках, которых в моей программе _не_было_), сходил в помощь (получив при этом пару пустых экранов) и наконец запустил "настоящую" компиляцию. И вот что я получил:

 

gnatmake -PC:/Test/test.gpr Test.adb -d

gnatbind -I- -x c:\progra~1\gnat\bin\test.ali

fatal error, run-time library not installed correctly

cannot locate file system.ads

 

raised TYPES.UNRECOVERABLE_ERROR : targparm.adb:196

gnatmake: *** bind failed.

 

process exited with status 4

 

Сразу предупреждаю: инсталлировал я GPS по-честному, никакой отсебятины не делал, со всеми предложениями соглашался и никаких "плохих"

диагностик в процессе инсталляции не получал.

 

Еще раз замечу: это не вопрос, а _критика_. Не должен программист подобных сообщений получать ни при каких обстоятельствах.

Сейчас переинсталлирую GPS и попробую еще раз.

 

- Зуев

 

P.S. Сделал все еще раз на другом компьютере - откомпилировалось нормально. Так что, возможно, какая-то проблема с инсталляцией. Хотя критика остается: подобные диагностики должны выдаваться при инсталляции, а не когда уже начал систему реально использовать...

On Tue, May 23, 2006 at 07:06:43PM +0200, Zouev Evgueni wrote:

Проблема в другом: как этот компонент интегрировать с Ада-компилятором - таким образом, чтобы поддержать все продвинутые фичи современных IDE? (Извините, что я все об одном и том же... :-)

 

 

Какие средства должен предоставлять компилятор для этого?

Мне видятся следующие моменты:

 

- частичный переразбор тектов. Т.е. если пользователь что-то

поменял в тексте, то компилятор должен обновить внутреннее

представление. Желательно не перечитываю модули от которых

зависит измененный, тк. это может занять время.

(С какой дискретностью надо это делать? Хватит ли

перечитывания модуля или мужны более мелкие единицы,

декларативные регионы, например?)

 

- для подсветки: список ошибок найденных на данный момент

 

- для автодополнения: поиск декларативного региона по месту в

тексте или по имени (Ada.Text_IO.), доступ к таблице имен

этого региона

 

- для быстрого перехода к определению объекта и подсказок:

поиск определения по имени объекта

 

- для рефакторинга: замена одного имени на другое в определении

и при каждом использовании

 

Что еще может понадобиться?

 

--

Maxim Reznik

Maxim Reznik wrote:

 

- для рефакторинга: замена одного имени на другое в определении

и при каждом использовании

 

С проверкой потенциальных конфликтов имен?

--- In ada_ru@yahoogroups.com, Maxim Reznik <yeo@...> wrote:

þÔÏ ÅÝÅ ÍÏÖÅÔ ÐÏÎÁÄÏÂÉÔØÓÑ?

 

 

ðÏÚ×ÏÌÀ ÓÅÂÅ ÞÕÔØ-ÞÕÔØ ÐÏÍÅÞÔÁÔØ...

 

åÓÌÉ ÕÞÅÓÔØ, ÞÔÏ × ÅÄÉÎÉÃÕ ×ÒÅÍÅÎÉ ËÏÄ ÉÚÍÅÎÑÅÔÓÑ × ÏÄÎÏÍ ÍÅÓÔÅ

ÐÒÏÇÒÁÍÙ ÍÏÖÎÏ ÌÉ ÎÁ ÈÏÄÕ ÉÚÍÅÎÑÔØ AST? åÓÌÉ ÄÁ, ÔÏ ÔÏÇÄÁ × ÐÁÍÑÔÉ ÂÕÄÅÔ ÎÁÈÏÄÉÔÓÑ ÐÏÌÎÏÓÔØÀ ÒÁÓÐÁÒÓÅÎÎÙÊ ÔÅËÓÔ, ËÏÍÐÉÌÑÃÉÑ ÂÕÄÅÔ

ÚÁÎÉÍÁÔØ ÎÅÓËÏÌØËÏ ÍÇÎÏ×ÅÎÉÊ, ÏÛÉÂËÉ ÂÕÄÕÔ ÐÏÄÓ×ÅÞÉ×ÁÔØÓÑ ÎÁ ÌÅÔÕ... åÓÌÉ, ËÏÎÅÞÎÏ, ÜÔÏ ÒÅÁÌØÎÏ ×ÙÐÏÌÎÉÔØ.

 

ôÏÇÄÁ, × ÐÒÉÎÃÉÐÅ ×ÏÚÍÏÖÅÎ ÒÅ×ÅÒÓ - Ó ÐÏÓÔÒÏÅÎÎÏÇÏ ÄÅÒÅ×Á ÒÁÚÂÏÒÁ ÐÏÓÔÒÏÉÔØ ÉÓËÏÄÎÉË ÎÁ áÄÅ (ÐÏÄ ËÏÄÉÎÇ ÓÔÁÎÄÁÒÔ ÷ÁÛÅÊ ÏÒÇÁÎÉÚÁÃÉÉ!). èÏÔÑ ËÁË ÂÙÔØ Ó ËÏÄÏÍ, ËÏÔÏÒÙÊ ÅÝÅ ÎÅÐÒÁ×ÉÌØÎÏ ÚÁÐÉÓÁÎ, ÎÁÐÒÉÍÅÒ, Ñ ÎÁÐÉÓÁÌ ÌÉÛØ ÐÏÌÏ×ÉÎÕ ÎÁÚ×ÁÎÉÑ ÐÒÃÅÄÕÒÙ? ëÁËÉÍ ÏÂÒÁÚÏÍ ÈÒÁÎÉÔØ ¤ÔÏ × AST? òÁÚ×Å ÞÔÏ ÕÓÏ×ÅÒÛÅÎÓÔ×Ï×ÁÔØ ÓÁÍ AST... èÏÔÑ ÍÏÇÕÔ ÂÙ É ÄÒÕÇÉÅ ÒÅÛÅÎÉÑ.

 

îÁÓÞÅÔ ÐÌÏÓËÉÈ ÔÅËÓÔÏ×. óÔÒÁÎÎÙÍ ÎÁÈÏÖÕ ÔÏ, ÞÔÏ íÉËÒÏÓÏÆÔ × VS ÅÝÅ ÎÅ ÉÎÔÅÇÒÉÒÏ×ÁÌ Word. á ÐÒÅÄÓÔÁ×ÔØÔÅ ÓÅÂÅ ËÏÄ, ËÏÔÏÒÙÊ ×ÙÞÅÒÞÉ×ÁÅÔÓÑ Times New Roman, ×ÙÒÁ×ÎÉ×ÁÎÉÅ ÄÅÌÁÅÔÓÑ ÁÂÚÁÃÁÍÉ, ×ÁÖÎÙÅ ÍÅÓÔÁ ÍÏÖÎÁ ×ÙÄÅÌÉÔØ ÍÁÒËÅÒÏÍ, ÍÏÖÎÏ ×ÓÔÁ×ÌÑÔØ ÎÅÚÁÍÅÔÎÙÅ ÐÒÉÍÅÞÁÎÉÑ, ÄÅÌÁÔØ

ÉÎÌÁÊÎ ÓÓÙÌËÉ ÎÁ ÄÉÁÇÒÁÍÙ, ÐÉÓØÍÁ ÏÔ ËÌÅÎÔÏ× É Ô.Ð....

 

á ÐÒÅÄÓÔÁ×ØÔÅ ÓÅÂÅ ControlVersion, ËÏÔÏÒÙÊ ÍÏÇ ÂÙ ÒÁÂÏÔÁÔØ ÎÅ ÎÁ

ÕÒÏ×ÎÅ ÆÁÊÌÏ×, Á, ÎÁÐÒÉÍÅÒ, ÎÁ ÕÒÏ×ÎÅ ÐÒÏÃÅÄÕÒ!

 

÷Ù ÚÎÁÅÔÅ, Ñ ÎÅ ÐÒÏÞØ ÂÙÌ ÂÙ ÐÏÒÁÂÏÔÁÔØ × ÐÏÄÏÂÎÏÊ ÓÉÓÔÅÍÅ É ÄÕÍÁÀ ÏÎÁ ÂÙ ÓÅÒØÊÏÚÎÏ ÐÏ×ÙÓÉÌÁ ÜÆÅËÔÉ×ÎÏÓÔØ ÒÁÚÒÁÂÏÔËÉ :) îÏ ÒÅÁÌØÎÏ ÌÉ ÜÔÏ?

myhai_dzyuba wrote:

 

Вы знаете, я не прочь был бы поработать в подобной системе и думаю она

бы серьйозно повысила эфективность разработки :) Но реально ли это?

 

Непросто и нетривиально, но почему бы не попробовать?

 

 

-- Vadim Godunko

 

Technoserv A/S

Rostov-on-Don, Russia

myhai_dzyuba wrote:

--- In ada_ru@yahoogroups.com, Maxim Reznik <yeo@...> wrote:

> Что еще может понадобиться?

>

 

Позволю себе чуть-чуть помечтать...

 

Если учесть, что в единицу времени код изменяется в одном месте

програмы можно ли на ходу изменять AST? Если да, то тогда в памяти

будет находится полностью распарсенный текст, компиляция будет

занимать несколько мгновений, ошибки будут подсвечиваться на лету...

Если, конечно, это реально выполнить.

 

оно!

Тогда, в принципе возможен реверс - с построенного дерева разбора

построить искодник на Аде (под кодинг стандарт Вашей организации!).

Хотя как быть с кодом, который еще неправильно записан, например, я

написал лишь половину названия прцедуры? Каким образом хранить ╓то в

AST? Разве что усовершенствовать сам AST... Хотя могут бы и другие

решения.

очень просто - весь нераспарсенный код хранится в виде особого вида коментария.

который после внесения в него изменений сразу же проверяется на предмет

возможного парсинга.

 

Насчет плоских текстов. Странным нахожу то, что Микрософт в VS еще не

интегрировал Word. А представтьте себе код, который вычерчивается

Times New Roman, выравнивание делается абзацами, важные места можна

выделить маркером, можно вставлять незаметные примечания, делать

инлайн ссылки на диаграмы, письма от клентов и т.п....

 

и это тоже

А представьте себе ControlVersion, который мог бы работать не на

уровне файлов, а, например, на уровне процедур!

 

а как же без этого!

Вы знаете, я не прочь был бы поработать в подобной системе и думаю она

бы серьйозно повысила эфективность разработки :) Но реально ли это?

 

Блин, это именно то, что я собираюсь сделать! (прочтите прежние постинги)

И ничего нереального в этом не вижу.

 

Я эту идею уже вынашиваю более десять лет. И тогда, в средине девяностых (тогда

только Delphi появился) мне говорили - "Фигня, не потянешь, никому не нужно, это займет десять лет!"

Я и отказался что-то делать. Думал другие, более крутые сделают, а я только воспользуюсь результатом.

И что? Прошло десять лет. Я б уже хоть что-то за это время наваял. Времени жалко :(

 

А сейсчас я делать это собрался серьезно. И хотя будут тут высказывания типа "Не индустриально

и не востребовано, не потянешь и т.д. и т.п." Скажу одно: "Вода камень точит".

 

Влад

On Wed, May 24, 2006 at 01:02:06AM +0400, Sergey I. Rybin wrote:

Maxim Reznik wrote:

 

- для рефакторинга: замена одного имени на другое в определении

и при каждом использовании

 

С проверкой потенциальных конфликтов имен?

 

 

Сразу с проверкой, наверное, будет сложно. А если первым шагом поменял, вторым - компилер проверил измененные исходники, как при обычной

ручной правке, а третьим, если не заладилось, поможет Undo всей

операции?

 

--

Maxim Reznik

Maxim Reznik wrote:

 

- для рефакторинга: замена одного имени на другое в определении

и при каждом использовании

 

С проверкой потенциальных конфликтов имен?

 

Сразу с проверкой, наверное, будет сложно. А если первым шагом поменял,

вторым - компилер проверил измененные исходники, как при обычной

ручной правке, а третьим, если не заладилось, поможет Undo всей

операции?

 

Там достаточно много грабель попрятано. Один мой студент делал это как

часть диплома - повозиться пришлось изрядно, причем производительность в

результате вышла так себе, а уверенности, что все возможные конфликты

отлавливаем, так и не добились

Новое сообщение:
Страницы: 1

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти