Так сколько же берет написать движок IntelliSense

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Так сколько же берет написать движок IntelliSense

Сообщение FaKk2 » 05.03.2012 (Пн) 20:00

Я помню как-то Хакер жаловался, что интелисенс тупой, и вообще он может написать круче (хотя может и привираю). Так вот здесь Ерик Липперт рассказал о том что конкретно делает интелисенс между нажатиями клавиш:
http://stackoverflow.com/questions/9556 ... 30#9556530

Я могу описать это на любом уровне детализации вы заботитесь, чтобы назвать, но у меня нет времени для более краткого объяснения. Я объясню, как мы делаем это в Рослин.

Во-первых, мы строим модель непреложный поток токенов, используя структуру данных, которые могут эффективно представлять изменения, так как очевидно, изменений как раз то, что там будет много.

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

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

Тогда, очевидно, построить грамматический анализатор, который может анализировать C #. Помните, что необходимо проанализировать сломанной C #, а не правильное C #; IntelliSense должен работать, пока программа не в состоянии компиляции. Таким образом, начать придумывать изменения в грамматике, которые имеют хорошие ошибка восстановления характеристик.

Итак, теперь у вас есть парсер, который может эффективно делать грамматический анализ без повторного лексический или повторного разбора все, но раз редактировалось области, большую часть времени, что означает, что вы можете сделать работу между нажатиями клавиш. Я забыл упомянуть, конечно, вам нужно придумать какой-то механизм, чтобы не блокировать поток пользовательского интерфейса, делая все эти анализы должны анализа случиться дольше, чем время между двумя нажатиями клавиш. Новый «асинхронный / ждут" особенность C # 5 должна помочь в этом. (Я могу вам сказать из личного опыта: будьте осторожны с распространением задач и отмена жетоны Если вы небрежно, можно попасть в состояние, в котором есть десятки тысяч отменен задач в ожидании, и это не быстро.. )

Теперь, когда у вас есть грамматического анализа необходимо построить семантический анализатор. Поскольку вы только делаете IntelliSense, не нужно быть особенно сложным семантический анализатор. (Наш семантический анализатор должен делать анализ пригоден для генерации кода из правильных программ и правильный анализ ошибок с неправильной программы.) Но, конечно, опять же он должен делать добро семантический анализ на сломанной программы, которые действительно увеличивает сложность значительно.

Мой совет: начните с создания "высшего уровня" семантический анализатор, снова используя модель неизменным, которые могут сохраняться состояние объявленных в своем исходном коде типы из редактирования изменить. Верхний анализатор уровня занимается всем, что не является оператор или выражение: объявления типа, директивы, пространства имен, объявления методов, конструкторы, деструкторы, и так далее. Материал, который составляет «форму» программы, когда компилятор генерирует метаданные.

Метаданные! Я забыл о метаданных. Вы будете нуждаться в метаданных читатель. Вы должны быть в состоянии произвести IntelliSense для выражений, которые относятся к типам в библиотеках, очевидно. Я рекомендую использовать ТПП библиотеки качестве метаданных читатель, а не отражение. Поскольку вы только делаете IntelliSense, очевидно, не нужно метаданных писателя.

Во всяком случае, когда у вас есть на высшем уровне семантический анализатор, то вы можете написать заявление и выражения семантический анализатор, который анализирует типы выражений в данном заявлении. Обратите особое внимание на поиск имени и алгоритмы разрешения перегрузки. Метод вывода типа будет особенно сложно, особенно внутри запросов LINQ.

После того как вы получили все, что IntelliSense двигателя должно быть легко, просто выработать тип выражения в текущую позицию курсора и отображения выпадающего соответственно.

Как трудно было бы для меня, чтобы создать свой собственный одного и того же стандарта?

Ну, у нас есть команда, назовем его десять человек, и это, наверное, взять, назовем его пять лет все вместе, чтобы получить все это делается от начала до конца. Но у нас много больше делать, чем просто IntelliSense двигателя. Это может быть, только 40% работы. Ох, и половина этих людей работать на VB, теперь, когда я думаю об этом. Но те люди, в среднем, вероятно, пять или десять лет опыта в ведении такого рода работы, поэтому они быстрее, чем вы будете, если вы никогда не делали этого раньше.

Так скажем, это займет у вас от десяти до двадцати лет полный рабочий день, работая в одиночку, чтобы построить Рослин качества IntelliSense двигатель для C #, который может сделать приемлемо, близкие к правильным анализа больших программ во время между нажатиями клавиш.

Больше, если вам нужно сделать, что кандидат во-первых, это очевидно.

Или вы могли бы просто использовать Рослин, так это то, что он нужен. Вот возьмем вы, вероятно, несколько часов, но вы не получаете удовольствия от делать это самостоятельно. И это весело!
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 06.03.2012 (Вт) 7:06

Автоперевод невероятно убог.

FaKk2 писал(а):Я помню как-то Хакер жаловался, что интелисенс тупой, и вообще он может написать круче (хотя может и привираю).


Речь шла о том, что во всех IDE, кроме VB6, (даже в VC6!) интелисенс тупой, потому что он делает двойную работу, причём в VC6 она делается иногда с глюками, а в последующих версиях — чрезвычайно медленно.

VB6 IDE — уникальный случай. VB6 IDE, бкогда вы работаете над проектом, вообще не хранит в памяти исходники, над которыми вы работаете. С тех пор, как вы загрузили проект, IDE построила внутри себя древовидную структуру, описывающую код.

Если попытаться найти в памяти VB6 IDE хоть какой-то фрагмент кода, то ничего не выйдет (правда велика вероятность наткнуться на какой-нибудь незатёрный мусор, в котором окажется фрагент кода).

Эта древовидная структура, которая в полной мере описывает код, используется инструментом (средой) и для дальнейшей компиляции, и для IntelliSense (поскольку фактически эта структура является готовым описанием всех сущностей, объявленных или хотя бы упомянутных в коде).

Эта древовидная структура используется даже для того, чтобы просто нарисовать раскрашенный текст в окошечке в IDE.

Можно найти в памяти среды специальную таблицу, и исправить там любой токен (например ElseIf на MuHaHa, и это приведёт к тому, что в ту же секунду во всём коде произойдёт замена всех ElseIf на MuHaHa).

(Кстати, забывал сказать, что всё это в равной степени относится ко всем VBA-бейсикам.)

Так вот, когда мы в VB начинаем править какой-то текст, VB определяет т.н. (мною) Affect-Range. Этот диапазон текста сразу же в среде теряет подстветку и становится одноцветным. Как только каретка покидает Affect-Range, всё, что требуется сделать VB-среде, это произвести валидацию Affect-Rang'а и чуть-чуть перестроить дерево. Это происходит мгновенно, дерево перестраивается, и IntelliSense уже обладает обновлённой информацией.

Кроме того, с элементами дерева (описывающего все исходники проекта) олицетворяющими процедуры связаны JIT-скомпилированные куски кода. Они есть для всех процедур, которые хоть раз вызывались (или для всех вообще, если была выбрана опция Run with full compile) и они остаются нетронутыми между несколькими запусками проекта, если узлы дерева (олицетворяющие процедуры) не перестраивались.

Это означает, что VB не только поддерживает внутри себя постоянно актуальное дерево, максимально описывающее все имеющиеся исходники (настолько максимально, что сами исходники в памяти не хранятся вообще), но и держит внутри себя скомпилированные версии всех процедур, которые хоть раз были вызваны, и с тех пор кардинально не менялись.

Поэтому инструмента, равного VB6 IDE (и всем VBA в «офисах» и в... где там ещё они, кроме автокада?) по производительности нет и не предвидится.

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

А VB6 IDE максимально практикует ленивый подход: она не делает повторной работы, обрабатывает не код, а изменения в коде, ну и т.п.

________


А что касается всех остальных языков, кроме классического VB, то здесь огромная проблема ещё в самих языках.

VB легко определяет границы affect-rang'а:
affected_range.png

(Я поставил каретку, нажал Пробел и стёр его, но фрагмент с момента нажатия пробела стал просто текстом. Он будет правиться как текст без какой-либо проверки, а после того, как каретка любым путём (стрелками на клавиатуре или мышкой) покинет affect-range, этот региончик будет проанализирован и в дерево будут внесены изменения.


VB легко определет границы Affect-Rang'а, потому что устройство языка позволяет сделать это легко. Определить это легко: affect-range — это всегда все строки, на которые приходится statement, который приходится на строку, которую правят.

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

_________

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

Но тут есть доля разума: проект реже загружается, чем запускается при отладке. Лучше сделать проект долго-загружающимся, чем долго компилирующимся и долго запускающимся на отладку.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Так сколько же берет написать движок IntelliSense

Сообщение Antonariy » 06.03.2012 (Вт) 8:45

VB легко определет границы Affect-Rang'а, потому что устройство языка позволяет сделать это легко.
VB определяет? Может все-таки IDE? Не стоит мешать теплое с мягким в одну кучу.

Нет никакой связи между устройством языка и границами. VB6 IDE границы были жестко заданы: один стейтмент или строка стейтментов разделенных двоеточиями.

Есть связь между устройством языка и строками кода, которые являются основным элементом форматирования, что является частью intellisence. У вб перенос строки является (по умолчанию) разделителем стейтментов, у си не является. У VB.NET устройство почти такое же, но самого понятия Affect-Rang'а в IDE нет. Чтобы научить ide форматирвать блоки if, for и прочие элементы языка, пришлось отказаться от жестких границ и вытекающих из них бонусов.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 06.03.2012 (Вт) 8:52

Antonariy писал(а):VB определяет? Может все-таки IDE?

VB IDE>

Antonariy писал(а):Нет никакой связи между устройством языка и границами.

Что ты говоришь откровенную ерунду? Есть связь между устройством синтаксиса языка и границами региона, который нужно перелопатить, чтобы обновить дерево. В VB эту границу определить предельно просто, в си-подобных — только с большим запасом.

То, что граница строки является границей statement-а — это 33 % проблемы. Или даже не 33, а 0. В VB строка (string) всегда кончается на конце строчки (line). В VB комментарий переносим, и соответствует сишному // и не существует ничего соответствующего сишному /* ... */.

Если бы в си-подобных языках отсутствовали комментарии в стиле /*...*/ и были строковые константы, у которых символ открывающей кавычки и символ закрывающей кавычки были гарантированно на одной строчке (а в VB это именно так), то и обработка С/С++ кода была бы такой же лёгкой и быстровыполнимой задачей, как обработка classic-VB-кода.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Так сколько же берет написать движок IntelliSense

Сообщение Antonariy » 06.03.2012 (Вт) 13:45

В VB строка (string) всегда кончается на конце строчки (line).
Спасибо, кэп. Речь вообще-то шла о стейтменте, а не строке:
Код: Выделить всё
s = "qqq" & _
"aaa" & _
"zzz"
Сколько тут строк? А стейтментов?

Есть связь между устройством синтаксиса языка и границами региона, который нужно перелопатить, чтобы обновить дерево.
Здесь границы одинаковые или разные?
Код: Выделить всё
1
if(x){y()}

2
if(x){
    y()
}
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 06.03.2012 (Вт) 14:02

Antonariy писал(а):Сколько тут строк? А стейтментов?

3 строчки (lines)
3 string-токена.
1 statement.

И?

Antonariy писал(а):Здесь границы одинаковые или разные?

Я говорил о границах аффект-рейнджа. Ты о каких-то границах чего-то другого?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Так сколько же берет написать движок IntelliSense

Сообщение Antonariy » 06.03.2012 (Вт) 14:11

И?
Пока ничего. Просто помни об этой разнице и не кэпь не к месту.
Я говорил о границах аффект-рейнджа. Ты о каких-то границах чего-то другого?
О них же. Но я ими считаю не только структуру кода, но и внешний вид.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 06.03.2012 (Вт) 14:25

Похоже ты не понимаешь, о чём речь.

Синтаксические правила VB устроены таким образом, что если взять любое место в VB-коде, и представить, что его сейчас будут править (что-то удалять / менять / добавлять), то можно вычислить относительно небольшой фрагмент кода, такой, что какой бы ни была правка, она гарантированно абсолютно никак не повлияет на код, находящийся вне этого фрагмента.

Я называю такой фрагмент affect range. Я не знаю, как его называли разработчики среды, но они использовали эту концепцию: кода ты начинаешь править код, определённый его участок чернеет, а после ухода каретки с этого фрагмента — валидируется.

Такое явление не только есть, но и в силу специфики VB, границы affect-rang'а можно определить очень легко.

А теперь посмотрим на Си-подобных исходник.

Допустим мы поставили в произвольное место каретку и собираем вставить в эту позицию два символа /*, которые начнут с этого места комментарий.
Вопрос: ты можешь вычислить, докуда продлится этот комментарий?
Не вопрос, но претезния: даже если вычислишь (это не невозможно), такой регион может вобрать в себя 3000 строк кода. Их придётся перепарсить. Фейл.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Так сколько же берет написать движок IntelliSense

Сообщение Antonariy » 06.03.2012 (Вт) 14:40

Синтаксические правила VB устроены таким образом, что если взять любое место в VB-коде, и представить, что его сейчас будут править (что-то удалять / менять / добавлять), то можно вычислить относительно небольшой фрагмент кода, такой, что какой бы ни была правка, она гарантированно абсолютно никак не повлияет на код, находящийся вне этого фрагмента.
А вот тут ты ошибся. Потому что опять цинично проигнорировал форматирование кода. Отступы.

Правила изменились. Теперь нельзя полагаться на то, что относительно небольшой фрагмент кода абсолютно никак не повлияет на остальной код. Он может повлиять на отступы. Поэтому affect range пришлось расширить со "стейтмента" на "блок". И вычислять, каким именно образом какой введенный текст повлиял на отступы каких блоков.

Языки разные, а правила форматирования примерно одинаковые: отступы в блоках if, for, try and so on. Поэтому "affect range" не зависит от языка. IDE.NET поддерживает несколько языков, учитывать тонкости каждого языка дорого, поэтому имеем то что имеем.
Последний раз редактировалось Antonariy 06.03.2012 (Вт) 14:41, всего редактировалось 1 раз.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 06.03.2012 (Вт) 14:40

Antonariy писал(а):
В VB строка (string) всегда кончается на конце строчки (line).
Спасибо, кэп. Речь вообще-то шла о стейтменте, а не строке:
Код: Выделить всё
s = "qqq" & _
"aaa" & _
"zzz"
Сколько тут строк? А стейтментов?


Хакер писал(а):И?

Antonariy писал(а):Пока ничего. Просто помни об этой разнице и не кэпь не к месту.


Речь шла о том, что если взять какой-нибудь вот такой исходник:
Код: Выделить всё
<?php
$var 
= "foo bar baz";
$e = locate_system_object($mbs, $var);

if(
$e > SYSTEM_OBJECT_VALUE) 
{
    fatal_error(ERR_SYS_OBJECT_POOL_NO_SPACE);    
}
else
{
    insert_object_into_queue(218, $e, 1848841);
}

validate_queue_and_set_id(218, 'sysid');

for(
$i = 10; i < num_workers(get_queue_by_id('sysid'); $i++)
{
    $res = lock_queue($q['q' . $i]);
    optimize_queue($q['q' . $i]);
    log_step('Queue lock: ' . $res);
}

?>


И теперь мы ставим курсор на первую строчку и случайно удаляем кавычку:
Код: Выделить всё
<?php
$var 
= "foo bar baz;
$e = locate_system_object($mbs$var);

if(
$e > SYSTEM_OBJECT_VALUE) 
{
    fatal_error(ERR_SYS_OBJECT_POOL_NO_SPACE);    
}
else
{
    insert_object_into_queue(218, 
$e, 1848841);
}

validate_queue_and_set_id(218, 'sysid');

for(
$i = 10; i < num_workers(get_queue_by_id('sysid'); $i++)
{
    
$res = lock_queue($q['q' . $i]);
    optimize_queue(
$q['q' . $i]);
    log_step('Queue lock: ' . 
$res);
}


?>


Упс, весь оставшийся исходник стал считаться строкой. Значит если использовать концепцию affect-range и переобрабатывать только очень маленький фрагмент исходника (для перестроения дерева), то ничего не получается: в случае с такими языками, affect-range-ем оказывается обычно весь оставшися исхродник до своего конца.

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

То, что VB ставит закрывающую кавычку на конце строки, то, что VB удаляет лишние пробелы и исправляет регистр символов ключевых слов — это не понты, и даже не полезная фича. Это неотъемлемая логика поведения среды.

Лишние пробелы отовсюду (кроме мест, где они предусмотрены) убираются потому, что исходный код нигде не хранится, а в дереве не предусмотрено хранение пробелов.
Регистр встроенных ключевых слов исправляется, потому что исходный код нигде не хранится, а в дереве хранятся только идентификаторы ключевых слов, и нет места для того, чтобы хранить ещё и способ написания каждого отдельного упомянутого в коде ключевого слова.
Закрывающая кавычка на конце строки ставится не потому, что кто-то заботится о программисте, а потому, что допусти они (разработчики VB) многострочечные строковые константы в языке — концепцию affect-rang'а эффективно реализовать бы не получилось.

______

Antonariy писал(а):А вот тут ты ошибся. Потому что опять цинично проигнорировал форматирование кода. Отступы.

А причём тут отступы? Как они влияют на работоспособность кода? Как связаны отступы и affect-range?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Так сколько же берет написать движок IntelliSense

Сообщение Antonariy » 06.03.2012 (Вт) 15:05

Хакер писал(а):
Antonariy писал(а):А вот тут ты ошибся. Потому что опять цинично проигнорировал форматирование кода. Отступы.

А причём тут отступы? Как они влияют на работоспособность кода? Как связаны отступы и affect-range?
Я ни слова не сказал про работоспособность. Я пытаюсь вдолбить тебе, что affect range теперь связан не только с работоспособностью, но и внешним видом. И связки affect range-statement больше недостаточно, чтобы автоматически поддерживать требуемый внешний вид. Раньше форматирование целиком и полностью лежало на разработчике, теперь на ide.

Поэтому affect range связан с языком лишь в IDE VB6/VBA. Но это не правило, это не более, чем счастливое совпадение не жестких требований к внешнему виду и удобства структуры языка, которое выразилось в жестком разделении стейтментов и блоков переносом строки. Ну и коментами, раз уж ты столько букв на них угрохал.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 06.03.2012 (Вт) 15:18

Нда.
Ты либо издеваешься, либо не понял, что такое affect-range, либо я не знаю что.

Во-первых, внешний вид в смысле расставления оступов — настолько ничтожно значимое явление по сравнению с построением дерева, описывающего код, что нет смысла о нём говорить.

Во-вторых, affect-range это две вещи:
  • Идея о том, что вместо анализа кода и построения дерева лучше делать анализ изменений и изменять уже построенное дерево.
  • Идея о том, что в качестве «правки» нужно рассматривать не каждый добавленный/удалённый символ, а достаточно большое последовательное редактирование ограниченного фрагмента текста. Фрагмент должен быть минимальный и такой, чтобы любое изменение в нём было им же и ограничено.

Ещё раз:
Синтаксические правила VB специально были подогнаны под следующие условия:
В какую точку исходника не ткни, в любом случае можно выделить относительно небольшой фрагмент исходника, такой, что какая бы правка не произошла, она никак не скажется на коде до этого фрагмента и после этого фрагмента. Своего рода аналог горизонта событий.


VB подогнан под эту идею, а в VB IDE эта идея реализована. Она позволяет поддерживать дерево всегда в актуальном состоянии, не вызывая подвисания среды хоть на треть секунды для пере-анализа кода. Тратя рекордно малое кол-во тактов на поддержание актуальности.

Что касается Си-подобных языков, то ни сами языки не позволяют воспользоваться таким трюком, ни в свою очередь среды для работы с такими языками этим трюком не пользуются. В них в принципе невозможно тратить рекордно малое время на поддержание актуальности.

_____

А причём тут расставление отступов? Оно, возможно, использует дерево, построенное на основе кода, для того, чтобы правильно расставить отступы. Оно, так же возможно, совершенно не использует дерево, построенное на основе кода, для того, чтобы правильно расставить отступы. Вообще безразлично, использует ли расставление отступов дерево или совсем не использует.

Как бы там ни было, расставление отступов никак не связано с тем, что в одном языке можно «вычислить горизонт событий» (в переносе на правку), а в другом — затруднительно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Так сколько же берет написать движок IntelliSense

Сообщение Antonariy » 06.03.2012 (Вт) 16:21

Речь изначально шла о движке intellisense вообще, а не уникальной vb6-ориентированной реализации. Ты так восхищаешься ископаемым артефактом под названием VB6, что готов на все смотреть лишь через его призму.

либо я не знаю что.
Бинго.

Во-первых, внешний вид в смысле расставления оступов — настолько ничтожно значимое явление по сравнению с построением дерева, описывающего код, что нет смысла о нём говорить.
Всего лишь с твоей довольно ограниченной точки зрения. Кому-то это показалось настолько значимым, что это запилили в следующих версиях студии.

Я не обсуждал и не собираюсь обсуждать affect range в контексте функциональности кода, можешь поберечь кнопки. Вне рамок VB6 ide это не имеет смысла поскольку требуется унифицированная поддержка разнообразных языков.

Синтаксические правила VB
в рамках intellisense VB.NET отправлены на помойку как противоречащие правилам иных языков. Созданы новые, общие для всех правила. Например, вычислять affect range блоками, а не стейтментами. Или вообще от него отказаться. Для целей форматирования. Которое является неотъемлемой частью движка intellisense, о котором шла речь изначально.

VB подогнан под эту идею
Бездоказательно. Даже наоборот. Синтаксис бейсиков практически не менялся с момента появления, а в те времена, я гарантирую, никто еще не задумывался об intellisense и деревьях.

Вообще безразлично, использует ли расставление отступов дерево или совсем не использует.
Ага. Не понимаю, чего ты привязался к этому дереву. И какое оно имеет отношение к intellisense. О котором шла речь изначально.

Я вынужден писать в стиле "дом который построил Джек", поскольку из-за зацикленности на vb6 ты очень быстро теряешь мысль. Или просто не можешь ее рассмотреть.
Лучший способ понять что-то самому — объяснить это другому.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 06.03.2012 (Вт) 16:31

Antonariy писал(а):в рамках intellisence VB.NET отправлены на помойку как противоречащие правилам иных языков. Созданы новые, общие для всех правила. Например, вычислять affect range блоками, а не стейтментами. Или вообще от него отказаться. Для целей форматирования. Которое является неотъемлемой частью движка intellisence, о котором шла речь изначально.

Да нет там никакого Affect-Range вообще, потому что язык таков, что использовать Affect-Range уже не оптимально. Хотя и можно. Но они не сделали этого.

Antonariy писал(а):Ага. Не понимаю, чего ты привязался к этому дереву. И какое оно имеет отношение к intellisence. О котором шла речь изначально.

К тому, что IntelliSense в качестве источника информации использует дерево.

Antonariy писал(а):поскольку из-за зацикленности на vb6 ты очень быстро теряешь мысль.

В самом начале было сказано:
FaKk2 писал(а):Хакер жаловался, что интелисенс тупой, и вообще он может написать круче


Я дополняю когда-то давно сказанную мысль.

Классический VB и его среда устроены так, что обеспечивают рекордную производительность работы (редактора кода, интеллисенса, подсветчика, валидатора синтаксиса, компилятора).
Комплекс из среды и компилятора, в которой среда работает так же быстро, как VB6-шная, и компилятор работает так же быстро как VB6-ный, никогда не создадут. А если создадут — то только сделав его по той же схеме.

Ну и да, я восхищаюсь устройством VB6-среды (которую правильно бы называть VBA, как они сами её называют). Где вы ещё видили инструмент, который, грубо говоря, начинает компилировать код прямо в момент его написания?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: Так сколько же берет написать движок IntelliSense

Сообщение Antonariy » 06.03.2012 (Вт) 18:47

Но они не сделали этого.
Значит были требования несовместимые с такой реализацией.
Лучший способ понять что-то самому — объяснить это другому.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 06.03.2012 (Вт) 20:56

Хакер писал(а):Классический VB и его среда устроены так, что обеспечивают рекордную производительность работы (редактора кода, интеллисенса, подсветчика, валидатора синтаксиса, компилятора).

Может и так, но как же достаёт то, что при мысли "а это я только что писал в предыдущей строчке, надо только скопировать", натыкаешься на MsgBox "а знаешь, текущая строчка некорректна, нажми-ка Ok перед тем, как сделать то, что собирался"!

Хакер писал(а):Во-первых, внешний вид в смысле расставления оступов — настолько ничтожно значимое явление по сравнению с построением дерева, описывающего код, что нет смысла о нём говорить.

В C# при наборе закрывающей фигурной скобки или точки с запятой, весь блок автоматически переформатируется. Не важно, считаешь ли ты это малозначительным, но если попытаться сделать тоже самое с твоим деревом, то меняющимся блоком вполне может оказаться весь класс, т. е. почти весь файл в худшем случае.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 07.03.2012 (Ср) 0:30

Antonariy писал(а):Значит были требования несовместимые с такой реализацией.

Не было требований, несовместимых с такой реализацией. Было семейство языков, при работе с которыми такая реализация была бессмысленное.

Вообще, какую идею ты пытаешься доказать-то?

Qwertiy писал(а):Может и так, но как же достаёт то, что при мысли "а это я только что писал в предыдущей строчке, надо только скопировать", натыкаешься на MsgBox "а знаешь, текущая строчка некорректна, нажми-ка Ok перед тем, как сделать то, что собирался"!

Вот это орание очень легко отключается в опциях.

Qwertiy писал(а):В C# при наборе закрывающей фигурной скобки или точки с запятой, весь блок автоматически переформатируется.

Ну и VC98 делал то же самое. То же мне — прорыв тысячилетия. Притивная функциональность это. Я говорю о три порядка более высоких материях, имеющих место быть внутри среды/компилятора.

Qwertiy писал(а):Не важно, считаешь ли ты это малозначительным, но если попытаться сделать тоже самое с твоим деревом, то меняющимся блоком вполне может оказаться весь класс, т. е. почти весь файл в худшем случае.

А вот по этой фразе можно сказать: ещё один, ничего не понявший о дереве.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.03.2012 (Ср) 2:56

Хакер писал(а):Я говорю о три порядка более высоких материях, имеющих место быть внутри среды/компилятора.

А я говорю об их совмещении.

Хакер писал(а):А вот по этой фразе можно сказать: ещё один, ничего не понявший о дереве.

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

Хакер писал(а):Если бы в си-подобных языках отсутствовали комментарии в стиле /*...*/ и были строковые константы, у которых символ открывающей кавычки и символ закрывающей кавычки были гарантированно на одной строчке (а в VB это именно так), то и обработка С/С++ кода была бы такой же лёгкой и быстровыполнимой задачей, как обработка classic-VB-кода.

А что мешает просто сделать в дереве узлы комментария и текста так, чтобы они могли содержать код, а заменять на техт только при модифмкации? Конечно, возникнет небольшая сложность с модификацией имён, но её вполне можно решить, например, с помощью временных меток.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 07.03.2012 (Ср) 2:58

Qwertiy писал(а):А что мешает просто сделать в дереве узлы комментария и текста так, чтобы они могли содержать код, а заменять на техт только при модифмкации? Конечно, возникнет небольшая сложность с модификацией имён, но её вполне можно решить, например, с помощью временных меток.

Я ничего не понял.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re:

Сообщение alibek » 07.03.2012 (Ср) 11:01

Qwertiy писал(а):А что мешает просто сделать в дереве узлы комментария и текста так, чтобы они могли содержать код, а заменять на техт только при модифмкации?

Каждый трактует "дерево" по своему.

Вот есть XML. В нем некоторые символы (<>&) имеют специальное значение и не могут быть использованы вне этого контекста (в значениях атрибутов, именах и содержании узлов). Если вставить такой символ в ненадлежащее место, сразу весь документ перестанет быть валидным.
Но даже если синтаксически документ валиден, имеются определенные требования к логической структуре документа: узлы могут быть вложенными, но не должны пересекаться. Если обнаруживается пересечение узлов, то документ также становится невалидным.
И общее правило таково, что нельзя гарантировано и автоматически устранить такую невалидность, XML так устроен.

Есть другие способы структурирования данных, например поля с фиксированной длинной. Такие документы в принципе не могут быть синтаксически невалидными, хотя в них и могут быть некорректные данные.

Синтаксис VB устроен так, что его код всегда можно структурировать, причем наличие пересекающихся сегментов невозможно в принципе.
Lasciate ogni speranza, voi ch'entrate.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.03.2012 (Ср) 11:06

Хакер писал(а):Я ничего не понял.

Просто разрешить держать код (замороженный) в комментариях и строках.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.03.2012 (Ср) 11:08

alibek писал(а):Синтаксис VB устроен так, что его код всегда можно структурировать, причем наличие пересекающихся сегментов невозможно в принципе.

Что-то мне не приходит в голову ни один язык, где это было бы не так.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 07.03.2012 (Ср) 11:22

Qwerty.
Давай попытаемся так.
Вы с Antonariy не согласны с каким-то моим утверждением? Тогда начни с того, что укажи на утверждение, с которым ты не согласен.

Потому что выглядит так, как будто ты пытаешься что-то мне доказать или оспорить. Но я не могу понять что. Я сделал только две вещи в рамках этого топика: уточнил когда-то давно ранее сказанную мною мысль и рассказал о том, как устроена внутренняя кухня VB. И ещё подметил: что в VB (касательно и языка и среды) использована уникальная концепция работы с кодом.

Вряд ли есть смысл оспаривать первые два пункта. Уж не оспариваешь ли ты третий пункт?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Re: Так сколько же берет написать движок IntelliSense

Сообщение BV » 07.03.2012 (Ср) 11:59

Хакер писал(а):и рассказал о том, как устроена внутренняя кухня VB

На самом деле, не рассказал. Точнее, сделал вводную, и на этом остановился. Как из абстрактного дерева в вакууме вытекает
Хакер писал(а):Лишние пробелы отовсюду (кроме мест, где они предусмотрены) убираются потому, что исходный код нигде не хранится, а в дереве не предусмотрено хранение пробелов.
Регистр встроенных ключевых слов исправляется, потому что исходный код нигде не хранится, а в дереве хранятся только идентификаторы ключевых слов, и нет места для того, чтобы хранить ещё и способ написания каждого отдельного упомянутого в коде ключевого слова.

я тоже не понял
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 07.03.2012 (Ср) 14:15

BV писал(а):Точнее, сделал вводную, и на этом остановился.

Ну ведь тема о другом.

BV писал(а):я тоже не понял

А что именно непонятно?
Может быть я действительно как-то мутно объяснил кардинальное отличие VB IDE от всех остальных IDE и редакторов кода?


_________________


Да простят мне этот большой рисунок, нарисованный в спешке и с большим кол-вом опечаток.

Надеюсь, эта аналогия даст понять, в чём отличие VB IDE от всех остальных известных мне IDE и редакторов кода:
Изображение
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 07.03.2012 (Ср) 15:10

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

Один, хороший, надёжный, безглючный, добротный — внутри компилятора. Работает, когда вызывается компилятор (отдельное приложение), и производит кое-какую обработку исходника для дальнейших этапов (в ходе компиляции). Причём вся работа выполняется каждый раз с нуля, как будто компилятор видит исходник впервые в жизни.

Другой, не такой добротный, медленный, иногда глючащий — внутри среды. Работает на нужды среды: подсветка синтаксиса, проверка синтаксиса, IntelliSense. Только в тупых IDE обрабатывает весь исходник с нуля каждый раз. В IDE чуть получше — реагирует на изменения в коде.

_______

В VB мы имеем один компонент, выполняющий эту работу. Он работает и на подсветку синтаксиса, и на проверку кода, и на IntelliSense, и на компиляцию. В силу последнего — он надёжен и безглючен. В силу первых факторов — быстр. Да и вообще так говорить не корректно. Он работает на построение графа/дерева, а уже засчёт графа/дерева работает и подсветка и дальнейшая компиляция.

Тот факт, что, что VB IDE нигде внутри себя не хранит исходник, с которым происходит работа, в виде plain-text'а надёжно скрыт от посторонних глаз и совсем не заметен (если только специально не задасться такой целью и не пытаться найти, где же в памяти хранится исходник, и обнаружить, что... нигде).

Но есть тем не менее проявления.

Мы пишем вот это:
vbline_before_validation.png
vbline_before_validation.png (1.07 Кб) Просмотров: 4646

Пока мы это пишем VB вообще не предпринимает никаких действий (кроме как того, что даёт нам писать что угодно, не вмешиваясь).

Мы жмём Enter и покидаем Affect-Range:
vbline_after_validation_bad.png
vbline_after_validation_bad.png (1.1 Кб) Просмотров: 4646


В момент когда каретка покинула Affect-Range, среда всегда проводит валидацию Affect-Range'а. Именно так: когда каретка покинула Affect-Range, а не когда каретка покинула строку. При переходе между строк ничего не происходит.

Итак, среда делает валидацию (чтобы затем перестроить дерево), но валидация обламывается, потому что код невалиден. Поэтому весь бывший Affect-Range становится красным. В дерево добавляется «невалидный текстовый элемент».

Ладно, возвращаемся к этой строке и начинаем стирать кривые символы:
vbline_before_validation_fixed.png
vbline_before_validation_fixed.png (1.2 Кб) Просмотров: 4646

Как только мы начали редактировать строку, строка (в данном случае только строка) стала Affect-Range'м, перестала подсвечиваться, и VB опять нам даёт делать со строкой всё, что угодно. И он не будет её проверять до тех пор, пока мы не покинем этот Affect-Range.

Жмём Enter и покидаем Affect-Range:
vbline_after_validation_fixed.png
vbline_after_validation_fixed.png (1000 байт) Просмотров: 4646


На этот раз валидация строки Dim lol As Byte, [ ] As Integer, he As Long прошла успешно (потому что строка корректна).
И в дерево были внесены изменения (добавлена информация о наличии одного Dim-а, в рамках которого объявлены три переменные с именами «lol», « » и «he» и типами Byte, Integer и Long соответственно.

Сама строка Dim lol As Byte, [ ] As Integer, he As Long после валидации в памяти больше не существует.

Текст, которым видим после нажатия Enter, раскрашенный текст — он синтезируется на основе дерева информации о коде, а не тупо выводится как есть.

Прошу заметить — синтезируется с ошибкой! Среда проходит по списку объявленных переменных, находит там переменную с именем, состоящим из одного пробела, и забывает нарисовать вокруг такого имени квадратные скобки!

Если мы вернёмся на эту строку, поменяем любую букву на ту же самую, нажмём Enter — валидация уже не пройдёт. Не хватает квадратных скобок. Квадратные скобки вокруг переменной с именем, состоящим из одного пробела нужны только валидатору (перед перестроением дерева). Если валидатор пропустил такую переменную (а он пропустил) — то дальшей её правильность никто не проверяет. Она есть, с таким именем, и IntelliSense об это знает перманентно — с тем пор, как мы ввели эту строчку, и до тех пор, пока мы её не удалим.

Можно нажать Ctrl+J и обнаружить переменную с пустым (пробельным) именем:
intellisense_displays_var_with_spacename.png
intellisense_displays_var_with_spacename.png (6.26 Кб) Просмотров: 4646


Если мы выберем её из списка, то тут уже среда не забудет обрамить её в квадратные скобки:
autocompleted_1.png
autocompleted_1.png (1.11 Кб) Просмотров: 4646


Допишем чего-нибудь:
autocompleted_plus_manually_written.png
autocompleted_plus_manually_written.png (1.14 Кб) Просмотров: 4646


И нажмём Enter — произойдёт валидация этого affect-range'а:
autocompleted_plus_manually_written_validated.png
autocompleted_plus_manually_written_validated.png (1.23 Кб) Просмотров: 4646


Всё! С этих пор строка [ ] = Var(AddressOf foo) ' Написали, сейчас жмём Enter больше не хранится в памяти.
Хранится информация о том, что в этом месте в коде имеет место быть оператор присвоения (=), левым операндом которого является переменная с именем « », а правым операндом которого является выражение «Var(AddressOf foo)» (само выражение, разумеется, тоже не хранится как текст), а после этого идёт один пробел, а после этого идёт комментарий с текстом «' Написали, сейчас жмём Enter».
Вот это есть в памяти. И на основе этой информации рендерится строчка (раскрашенная). А самой строчки [ ] = Var(AddressOf foo) ' Написали, сейчас жмём Enter — в памяти нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Так сколько же берет написать движок IntelliSense

Сообщение ger_kar » 07.03.2012 (Ср) 15:39

Прочитал, точнее просмотрел предпоследний пост с рисунком-таблицей, так как я его еще не видел, хотя с самого начала с интересом следил за дискуссией. Из того что там написано вполне все ясно и понятно, точнее понятно мне это было с самого начала, но все таки осталась одна маленькая непонятка, которая в теме немного затрагивалась, но так и осталась нераскрытой
При построении отображаемого текста он восстанавливается из дерева, при этом лишних пробелов не остается, так как они не хранятся, но тем не менее есть например строки:
Код: Выделить всё
Dim MyVar          As String
Dim x              As Long

Так вот между наименованием переменной и ключевым словом As пробелы восстанавливаются в отображаемом тексте.
Кроме этого при построении текста восстанавливаются отступы, пустые строки и комментарии. Получается, что часть исходного текста все-таки храниться? И при этом этот текст как то органично сочетается с деревом.
Вообщем у меня полнота картины из-за этого немного не складывается. Да я думаю и у других тоже.
И второй вопрос, который вытекает из первого. Раз можно сочетать дерево и текст, то в принципе возможно было бы как то учитывать количество пробелов исходного текста и при построении отображаемого текста восстанавливать исходное кол-во пробелов?
Бороться и искать, найти и перепрятать

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Так сколько же берет написать движок IntelliSense

Сообщение Хакер » 07.03.2012 (Ср) 15:48

ger_kar писал(а):Так вот между наименованием переменной и ключевым словом As пробелы восстанавливаются в отображаемом тексте.
Кроме этого при построении текста восстанавливаются отступы, пустые строки и комментарии. Получается, что часть исходного текста все-таки храниться? И при этом этот текст как то органично сочетается с деревом.

Есть, конечно, исключения.
Хранится информация о количестве пробелов между меткой и первым непробельным символом после метки. При условии, конечно, что метка есть.
Не хранится информация о том, сколько пробелов в конце линии.
Хранится информация о кол-ве пробелов между именем переменной и As. Видимо, их попросили, и они сделали это, чтобы можно было красиво оформлять. Для аргументов функций это уже не работает.
Строковые константы и комментарии хранятся, разумеется, а не удаляются.

Хранится информация о пустых строках.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Так сколько же берет написать движок IntelliSense

Сообщение ger_kar » 07.03.2012 (Ср) 15:57

Хакер писал(а):Хранится информация о кол-ве пробелов между именем переменной и As. Видимо, их попросили, и они сделали это, чтобы можно было красиво оформлять. Для аргументов функций это уже не работает.
Было бы гораздо удобнее если бы это работало везде. Мне именно этот момент в VB IDE - не нравится больше всего. Если бы пробелы восстанавливались код, бы мог выглядеть несколько лучше.
Бороться и искать, найти и перепрятать

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 07.03.2012 (Ср) 20:55

Хакер писал(а):Тогда начни с того, что укажи на утверждение, с которым ты не согласен.

Я утверждаю, что:
1. Хотя система с деревом очень эффективна в плане компиляции, её возможности для визуализации кода ограничены, если придерживаться такой концепции областей воздействия.
2. Аналогичное дерево может быть создано для любого языка без потери эффективности обновления ограниченной облости, если разрешить узлы кода помещать как дочерние в узлы комментариев и строк, а к сущностям добавить map[timestamp]=name.

И ещё, можешь применить свою концепцию к этому? В какой момент должно быть обработано изменение значения слова?
Affect Range.png
Аналогичную конструкцию с глобальной и локальной переменной можно сделать на любом языке, на VB6 тоже. Сделал пример с классом, чтобы показать, что кроме изменения смысла слова, может измениться ещё и способ его отображения, поэтому сказать, что это будет определено в момент компиляции (что скорее всего так и есть) не лучший вариант, т. к. перекомпилировать код для перекраски имён классов - полный бред. Замечу кстати, что VB6 не подсвечивает имена классов.

След.

Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 58

    TopList