О закономерностях
От: Кирилл Лебедев Россия http://askofen.blogspot.com/
Дата: 30.01.07 11:33
Оценка: 26 (5) :)
Вышла новая статья о закономерностях в программировании. Приведу несколько выдержек из нее:

"При этом каждое следующее серьезное изобретение в области программирования — это почти всегда изобретение следующего интерфейса (это и есть «этаж») между системными «слоями»:



"Вспомним «эволюцию языков программирования»:




Изобретение языков высокого уровня позволило осуществлять перенос программы с машины на машину. И это позволило программисту (пишущему на высоком уровне) «не знать» или «знать минимально» устройство машины. Как бы сказали теперь, эти языки «инкапсулировали» (закрыли) «устройство машины» от программиста. Стали «интерфейсом» между программистом и компьютером.


  • Затем произошел четвертый надсистемный переход: «структурное программирование» вытеснило «линейное». Программа стала пониматься как группа (читай: «надсистема») модулей, которые можно писать отдельно, а проектирование в значительной степени стало пониматься как проектирование интерфейсов для общения модулей.
  • Затем произошел пятый надсистемный переход: … впрочем, дальнейшую логику вдумчивый Читатель продолжит сам."
  • С уважением,
    Кирилл Лебедев
    Software Design blog — http://askofen.blogspot.ru/
    Re: О закономерностях
    От: x-code  
    Дата: 30.01.07 12:17
    Оценка:
    Здравствуйте, Кирилл Лебедев, Вы писали:


    КЛ>
  • Затем произошел пятый надсистемный переход: … впрочем, дальнейшую логику вдумчивый Читатель продолжит сам."

    У меня были похожие мысли. Сейчас можно выделить несколько слоев абстракции для программирования
    1. Машинный код 
    2. Ассемблер
    3. Языки среднего уровня (модульное программирование  (си), процедурное программирование  (pascal))
    4. Языки высокого уровня (ООП, функциональное программирование etc.)
    5. Паттерны проектирования, UML – диаграммы классов, взаимодействия, состояний
    6. Паттерны предметной области (?) (более сложные UML диаграммы ? диаграммы пакетов?)
    7. UML – диаграммы вариантов использования, различные Mind Maps, описания из предметной области


    Сейчас наименее формализован уровень 6. (хотя чувствуется что там должен быть какой-то уровень)

    очень хотелось бы чтобы все эти слои были доступны в IDE. Т.е. я ставлю квадратик "программа", и от него могу постепенной детализацией спуститься вниз вплоть до машинного кода.
  • Re[2]: О закономерностях
    От: Андрей Хропов Россия  
    Дата: 30.01.07 13:04
    Оценка:
    Здравствуйте, x-code, Вы писали:

    XC>У меня были похожие мысли. Сейчас можно выделить несколько слоев абстракции для программирования

    XC>
    XC>1. Машинный код 
    XC>2. Ассемблер
    XC>3. Языки среднего уровня (модульное программирование  (си), процедурное программирование  (pascal))
    XC>4. Языки высокого уровня (ООП, функциональное программирование etc.)
    XC>5. Паттерны проектирования, UML – диаграммы классов, взаимодействия, состояний
    XC>6. Паттерны предметной области (?) (более сложные UML диаграммы ? диаграммы пакетов?)
    XC>7. UML – диаграммы вариантов использования, различные Mind Maps, описания из предметной области 
    XC>


    XC>Сейчас наименее формализован уровень 6. (хотя чувствуется что там должен быть какой-то уровень)


    XC>очень хотелось бы чтобы все эти слои были доступны в IDE. Т.е. я ставлю квадратик "программа",

    Графическое и текстовое представления — это всего лишь два представления (интерфейса к, если угодно) одной семантической сущности — программы. Блок-схемы можно иметь и для машинных кодов.

    XC> и от него могу постепенной детализацией спуститься вниз вплоть до машинного кода.

    Согласен, тут вопрос формализации. Если на каком-то уровне у тебя есть полная формализация программы — т.е. что должно быть на выходе, что на входе и компьютер может вывести (возможно, с подсказкой) как это надо делать, то тебе в принципе не нужно спускаться на более низкие уровни, поскольку там уже за тебя решено все автоматически. Сейчас большинство программ пишутся на уровне 4, все что выше слабо формализовано, от этого определенные проблемы в том числе с обратной связью, т.к. модель нижнего уровня может начать расходиться с моделью верхнего, но у нас есть мало инструментов для автоматического приведения их в соответствие, а также на задание constraints сверху вниз.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[3]: О закономерностях
    От: x-code  
    Дата: 31.01.07 08:50
    Оценка: +2
    Здравствуйте, Андрей Хропов, Вы писали:

    XC>>очень хотелось бы чтобы все эти слои были доступны в IDE. Т.е. я ставлю квадратик "программа",

    АХ>Графическое и текстовое представления — это всего лишь два представления (интерфейса к, если угодно) одной семантической сущности — программы. Блок-схемы можно иметь и для машинных кодов.
    XC>> и от него могу постепенной детализацией спуститься вниз вплоть до машинного кода.
    АХ>Согласен, тут вопрос формализации. Если на каком-то уровне у тебя есть полная формализация программы — т.е. что должно быть на выходе, что на входе и компьютер может вывести (возможно, с подсказкой) как это надо делать, то тебе в принципе не нужно спускаться на более низкие уровни, поскольку там уже за тебя решено все автоматически. Сейчас большинство программ пишутся на уровне 4, все что выше слабо формализовано, от этого определенные проблемы в том числе с обратной связью, т.к. модель нижнего уровня может начать расходиться с моделью верхнего, но у нас есть мало инструментов для автоматического приведения их в соответствие, а также на задание constraints сверху вниз.

    Я скорее имел в виду представление не на уровне данных, а представление для самой IDE. UML тоже можно создавать в текством редакторе. Так сложилось, что для классического программирования текст — наиболее удобный формат. Наиболее компактный (на экране больше всего влезает именнт текстовой информации, в сравнении например с любыми диаграммами), и наиболее удобный для редактирования.

    Вообще, для дальнейшего продвижения по уровням IDE становится не менее важной частью программирования чем ЯП.
    Сейчас в основе лежит текстовый редактор, а поверх него навешиваются различные парсеры, Class Brower'ы и визуализаторы. А хотелось бы наоборот. Пусть программа как и раньше хранится в файлах в текстовом виде (это чем двоичные форматы), но при загрузке в IDE она СРАЗУ загружается в какое-то AST, и вся дальнейшая работа происходит уже через это AST. А текстовый редактор можно вызывать если программисту "по старинке" заходелось написать кусок кода (причем именно ограниченный кусок кода — метод или блок в методе), и сразу же когда программист закончит вводить код, этот код нужно преобразовать в AST. А если там ошибки — сразу же указать на них в окне редактора.
    Тогда полностью исчезнет проблема синхронизации уровней, а заодно и куча других проблем.
    Re: О закономерностях
    От: AndreiF  
    Дата: 31.01.07 10:29
    Оценка:
    Здравствуйте, Кирилл Лебедев, Вы писали:

    КЛ>"При этом каждое следующее серьезное изобретение в области программирования — это почти всегда изобретение следующего интерфейса (это и есть «этаж») между системными «слоями»:


    Я бы сказал, что важнее всего — это развитие железа и инструментов оптимизации, которые делают возможным применение новых уровней абстракции на практике. К примеру, в те времена, когда повсеместно писали макаронный код, было прекрасно известно что такое функция, но их редко использовали, "потому что вызов функции — это слишком дорого"
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re[4]: О закономерностях
    От: Lazy Cjow Rhrr Россия lj://_lcr_
    Дата: 31.01.07 10:39
    Оценка: +2 -1
    x-code,

    XC>Сейчас в основе лежит текстовый редактор, а поверх него навешиваются различные парсеры, Class Brower'ы и визуализаторы. А хотелось бы наоборот. Пусть программа как и раньше хранится в файлах в текстовом виде (это чем двоичные форматы), но при загрузке в IDE она СРАЗУ загружается в какое-то AST, и вся дальнейшая работа происходит уже через это AST.


    То что ты предлагаешь некоторые люди давно прошли. Читаем Пола Грэхема:

    If you understand how compilers work, what's really going on is not so much that Lisp has a strange syntax as that Lisp has no syntax. You write programs in the parse trees that get generated within the compiler when other languages are parsed. But these parse trees are fully accessible to your programs. You can write programs that manipulate them...

    quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
    Re[5]: О закономерностях
    От: konsoletyper Россия https://github.com/konsoletyper
    Дата: 31.01.07 17:51
    Оценка: +1
    Здравствуйте, Lazy Cjow Rhrr, Вы писали:

    XC>>Сейчас в основе лежит текстовый редактор, а поверх него навешиваются различные парсеры, Class Brower'ы и визуализаторы. А хотелось бы наоборот. Пусть программа как и раньше хранится в файлах в текстовом виде (это чем двоичные форматы), но при загрузке в IDE она СРАЗУ загружается в какое-то AST, и вся дальнейшая работа происходит уже через это AST.


    LCR>То что ты предлагаешь некоторые люди давно прошли. Читаем Пола Грэхема:

    LCR>

    LCR>If you understand how compilers work, what's really going on is not so much that Lisp has a strange syntax as that Lisp has no syntax. You write programs in the parse trees that get generated within the compiler when other languages are parsed. But these parse trees are fully accessible to your programs. You can write programs that manipulate them...


    Читаем внимательно и понимаем, что Грэхем писал о совсем другом.
    ... << RSDN@Home 1.2.0 alpha rev. 672>>
    Re[4]: О закономерностях
    От: Didro Россия home~pages
    Дата: 31.01.07 23:15
    Оценка:
    Здравствуйте, x-code, Вы писали:

    XC>Вообще, для дальнейшего продвижения по уровням IDE становится не менее важной частью программирования чем ЯП.

    XC>Сейчас в основе лежит текстовый редактор, а поверх него навешиваются различные парсеры, Class Brower'ы и визуализаторы. А хотелось бы наоборот. Пусть программа как и раньше хранится в файлах в текстовом виде (это чем двоичные форматы), но при загрузке в IDE она СРАЗУ загружается в какое-то AST, и вся дальнейшая работа происходит уже через это AST. А текстовый редактор можно вызывать если программисту "по старинке" заходелось написать кусок кода (причем именно ограниченный кусок кода — метод или блок в методе), и сразу же когда программист закончит вводить код, этот код нужно преобразовать в AST. А если там ошибки — сразу же указать на них в окне редактора.
    XC>Тогда полностью исчезнет проблема синхронизации уровней, а заодно и куча других проблем.

    Может я опять путаю, но по-моему это(см. выше) является частью концепций DSL.

    на RSDN'e уже про это писали — здесь
    Автор(ы): Сергей Дмитриев
    Дата: 02.03.2006
    Пришло время следующей технологической революции в разработке софта – и становится все очевиднее, какой она должна быть. Новая парадигма программирования – вот она, перед нами. Она еще не вполне сформировалась – разные части известны под разными именами вроде Intentional Programming, MDA, порождающее программирование и т.д. Я предлагаю объединение этих новаторских подходов под общим именем «языково-ориентированного программирования»; данная статья объясняет основные принципы новой парадигмы.
    .

    Все привыкли, что программа хранится в виде текста – потока символов. Почему бы и нет? В конце концов, существует огромное количество инструментов для редактирования, отображения и манипуляции текстом.
    ...
    При компиляции исходного кода компилятор представляет текст в виде древовидного графа, называемого «абстрактным синтаксическим деревом». Ту же самую операцию программист выполняет в уме, читая исходники.
    ...
    ...
    Если мы хотим сделать создание языков легким, нужно отделить представление и хранение программы от самой программы. Мы должны хранить программы прямо в виде структурированного графа, что дает возможность вносить любые дополнения в язык. Временами текстовое хранилище вообще не нужно.
    ...
    Проблема в том, что текстовый редактор глуп и не умеет работать с графом, лежащим в основе программы. Но при помощи соответствующих инструментов редактор сможет напрямую взаимодействовать с графом программы, что даст свободу выбора визуального представления.

    Re: О закономерностях
    От: Didro Россия home~pages
    Дата: 31.01.07 23:40
    Оценка:
    Здравствуйте, Кирилл Лебедев, Вы писали:

    КЛ>Вышла новая статья о закономерностях в программировании.


    Большое спасибо за статью. Читается легко, буквально на одном дыхании и подчас входит в резонанс с разрозненными мыслями в голове.
    Re[4]: О закономерностях
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.02.07 02:09
    Оценка: 14 (1) +2
    Здравствуйте, x-code, Вы писали:

    XC>Вообще, для дальнейшего продвижения по уровням IDE становится не менее важной частью программирования чем ЯП.

    XC>Сейчас в основе лежит текстовый редактор, а поверх него навешиваются различные парсеры, Class Brower'ы и визуализаторы. А хотелось бы наоборот. Пусть программа как и раньше хранится в файлах в текстовом виде (это чем двоичные форматы), но при загрузке в IDE она СРАЗУ загружается в какое-то AST, и вся дальнейшая работа происходит уже через это AST.

    На самом деле так и делается в хороших IDE для хороших языков (читай не С++).

    Так как сам работаю над этим могу сказать, что IDE оперирует именно с AST. Только вот от ткста отказываться не стоит. Это ошибка. В свое время был продукт (он наверно и сейчас существует) Gupta SqlWindows. Потом его вроде как переименовывали в Centura SqlWindows или SqlBuilder... давно было, уже не помню. Так вот у него как раз вместо радактора код был АСТ-редактор. Не могу сказать, что это было совсем неудобно, но реально плоский текст с поддержкой IDE все же удобнее... по-моему.

    Забавно, что современные IDE уже не обходятся просто AST. Они практически полностью компилируют программу и вынимают из нее всю информацию от положения лексем, до типов (как объявленных в программе, так и импортируемых из внешних длл-ей). Так что они куда интеллектуальнее чем многие думают.

    XC> А текстовый редактор можно вызывать если программисту "по старинке" заходелось написать кусок кода (причем именно ограниченный кусок кода — метод или блок в методе), и сразу же когда программист закончит вводить код, этот код нужно преобразовать в AST.


    Как не странно "по старинке" писать удобнее. И банально удобнее работать с файлом или даже целым проектом, нежели с одельным методом, к примеру.
    И ты уж совсем удивишся, но разработчикам IDE в сто раз было бы проще давать редактировать только один метод. Но они поступают сложнее. Они дают тебе править код где угодно и уже сами отслеживают что ты там на редактировал чтобы соотвествующим образом изменить внутренние структуры данных (в том числе и AST).

    XC> А если там ошибки — сразу же указать на них в окне редактора.


    Дык так и делают лучшие IDE. РеШарпер практически в риалтайме отображает ошибки. Мы в Интеграции для Немрла делаем это когда после небольшой паузы после того как программист закончил ввод. А когда кто-то пытается посмореть хинт или воспользоваться автодополнением, то обновление внутринних структур фарсируется. Так что фактически прогараммист всегда имеет возможность получить помощь от IDE.

    XC>Тогда полностью исчезнет проблема синхронизации уровней, а заодно и куча других проблем.


    К сожалению, тогда появится другая проблема. Дело в том, что очень сложно ввести сразу полностью корректный код. А такая IDE обязана будет отвергать некорректный ввод. В итоге программист попросту не сможет ввести код программы, или будет вынужден ужасно мучиться.

    Современная IDE разрешает вводить любую фигню и в теневом режиме контролирует то что вводит программист. Если в коде появлются ошибки IDE их подсвечивает. Если код становится верным подсветка ошибок убирается.

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

    Так что вы просто плохо понимаете как устроена современная IDE и почему все сделано именно так, а не иначе.
    ... << RSDN@Home 1.2.0 alpha rev. 637>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[5]: О закономерностях
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 01.02.07 02:09
    Оценка: +1
    Здравствуйте, Lazy Cjow Rhrr, Вы писали:

    LCR>То что ты предлагаешь некоторые люди давно прошли. Читаем Пола Грэхема:

    LCR>

    LCR>If you understand how compilers work, what's really going on is not so much that Lisp has a strange syntax as that Lisp has no syntax. You write programs in the parse trees that get generated within the compiler when other languages are parsed. But these parse trees are fully accessible to your programs. You can write programs that manipulate them...


    Скажи ты что вообще современных IDE не видел? Или просто сообщение прочел по диаганали?

    Какое отношение твоя цитата имеет к поддержке IDE?
    ... << RSDN@Home 1.2.0 alpha rev. 637>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[5]: О закономерностях
    От: Cyberax Марс  
    Дата: 01.02.07 02:46
    Оценка:
    VladD2 wrote:
    > К сожалению, тогда появится другая проблема. Дело в том, что очень
    > сложно ввести сразу полностью корректный код. А такая IDE обязана будет
    > отвергать некорректный ввод. В итоге программист попросту не сможет
    > ввести код программы, или будет вынужден ужасно мучиться.
    Так когда-то разные Бэйсики работали, на Спектруме точно так было
    Posted via RSDN NNTP Server 2.0
    Sapienti sat!
    Re[6]: О закономерностях
    От: Lazy Cjow Rhrr Россия lj://_lcr_
    Дата: 01.02.07 03:16
    Оценка: +1
    VladD2,

    VD>Или просто сообщение прочел по диаганали?


    Да, действительно, речь шла об главным образом об IDE, а не о AST. А я то сначала подумал, что человеку хочется просто писать в синтаксических деревьях...

    Прочитал ещё раз:
    X>> А хотелось бы наоборот. Пусть программа как и раньше хранится в файлах в текстовом виде (это чем двоичные форматы), но при загрузке в IDE она СРАЗУ загружается в какое-то AST, и вся дальнейшая работа происходит уже через это AST.

    То есть я так понимаю, что человек хочет иметь что-то типа редактора реестра, только вместо реестра там будет AST?
    quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
    Re[7]: О закономерностях
    От: Turtle.BAZON.Group  
    Дата: 01.02.07 06:50
    Оценка:
    Здравствуйте, Lazy Cjow Rhrr, Вы писали:

    LCR>То есть я так понимаю, что человек хочет иметь что-то типа редактора реестра, только вместо реестра там будет AST?


    Я так понял, что типа того, что сам же и показывал.
    ... << RSDN@Home 1.2.0 alpha rev. 669>>
    Re[8]: О закономерностях
    От: Lazy Cjow Rhrr Россия lj://_lcr_
    Дата: 01.02.07 07:03
    Оценка:
    Turtle.BAZON.Group,

    LCR>>То есть я так понимаю, что человек хочет иметь что-то типа редактора реестра, только вместо реестра там будет AST?


    TBG>Я так понял, что типа того, что сам же и показывал.


    Э-эээ, а по-подробнее, куда эта ссылка ведёт?
    quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
    Re[9]: О закономерностях
    От: Turtle.BAZON.Group  
    Дата: 01.02.07 07:49
    Оценка:
    Здравствуйте, Lazy Cjow Rhrr, Вы писали:

    TBG>>Я так понял, что типа того, что сам же и показывал.

    LCR>Э-эээ, а по-подробнее, куда эта ссылка ведёт?

    Сюда.
    ... << RSDN@Home 1.2.0 alpha rev. 669>>
    Re[10]: О закономерностях
    От: Lazy Cjow Rhrr Россия lj://_lcr_
    Дата: 01.02.07 10:31
    Оценка:
    Turtle.BAZON.Group, Вы писали:

    TBG>Сюда.


    Ну да. Значит мы солидарны в вопросе, что предлагаемые x-code штуки уже давно изобретены.
    quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
    Re[5]: О закономерностях
    От: x-code  
    Дата: 01.02.07 11:19
    Оценка: -1
    Здравствуйте, VladD2, Вы писали:

    VD>Здравствуйте, x-code, Вы писали:


    VD>На самом деле так и делается в хороших IDE для хороших языков (читай не С++).

    к сожалению, для меня пока языки типа C# непреемлемы, т.к. разрабатываю системы реального времени. Со временем, конечно, когда количество процессорных ядер будут измеряться десятками, а поддержка кода MSIL наверняка будет аппаратной (?), C++ уйдет в прошлое, но вот сейчас очень не хватает всего того что есть под .NET (хотя даже там нет всего что хочется)
    А пока я невооруженным глазом (!) по скорости открывания меню и диалогов определяю, написан ли софт на Java, каком-либо managed-языке .NET, или под реальный процессор, пишу на C++. Хотя уже достало

    VD>Так как сам работаю над этим могу сказать, что IDE оперирует именно с AST. Только вот от ткста отказываться не стоит. Это ошибка. В свое время был продукт (он наверно и сейчас существует) Gupta SqlWindows. Потом его вроде как переименовывали в Centura SqlWindows или SqlBuilder... давно было, уже не помню. Так вот у него как раз вместо радактора код был АСТ-редактор. Не могу сказать, что это было совсем неудобно, но реально плоский текст с поддержкой IDE все же удобнее... по-моему.


    AST-редактор для всего кода конечно же неудобен. Но, например, структуры и классы было-бы удобнее заполнять в виде таблиц, а не текста. Например, для полей данных минимальная таблица "доступ — тип — имя — значение по умолчанию — комментарий", для методов "доступ — тип — имя — раскрывающееся дерево с таблицей аргументов — комментарий".
    функции и методы, безусловно, удобнее в виде текста, но чтобы в одном окне ("отсеке" окна? здесь есть место для новых концепций UI) было тело одного метода, а в какой-то заголовочной части была таблица аргументов, аналогичная таблице структуры или класса.
    Речь идет просто об отказе от длинных "полотен" кода в котором свалены и классы и методы и все остальное.

    Еще одна проблема — в программах нет связи с логикой предметной области. Я сейчас разрабатываю плагин для студии, чтобы добавить такую связь в простейшем варианте (по сути "иерархическая база букмарков с метаданными"). В C# эту область частично могут покрывать атрибуты. А то плоский список классов из нескольких сотен классов, в каждом из которых десятки методов и переменных, уже раздражает.

    XC>> А текстовый редактор можно вызывать если программисту "по старинке" заходелось написать кусок кода (причем именно ограниченный кусок кода — метод или блок в методе), и сразу же когда программист закончит вводить код, этот код нужно преобразовать в AST.

    VD>Как не странно "по старинке" писать удобнее. И банально удобнее работать с файлом или даже целым проектом, нежели с одельным методом, к примеру.
    Это как? Если я работаю с методом, ни разу не нужно было выходить за его пределы. Если мне нужно перейти к другому методу — пользуюсь деревом классов (к сожалению, его тоже приходится прокручивать)
    А для проекта есть древовидное представление — дерево классов или то что будет вместо него на более высоких уровнях программирования. От него как раз никто и не предлагает отказываться.

    VD>И ты уж совсем удивишся, но разработчикам IDE в сто раз было бы проще давать редактировать только один метод. Но они поступают сложнее. Они дают тебе править код где угодно и уже сами отслеживают что ты там на редактировал чтобы соотвествующим образом изменить внутренние структуры данных (в том числе и AST).

    зачем так сделано? не вижу смысла. ради простой навигации по коду? поиск по файлам быстрее работает.

    XC>>Тогда полностью исчезнет проблема синхронизации уровней, а заодно и куча других проблем.

    VD>К сожалению, тогда появится другая проблема. Дело в том, что очень сложно ввести сразу полностью корректный код. А такая IDE обязана
    будет отвергать некорректный ввод. В итоге программист попросту не сможет ввести код программы, или будет вынужден ужасно мучиться.

    В реалтайме проверять код ненужно, ИХМО это будет просто раздражать (как минимум — тормозами). Идеальный вариант — кнопочка типа "ввести" по которой файл/фрагмент кода будет преобразовываться в AST и при необходимости указываться ошибки.
    Re[6]: О закономерностях
    От: Didro Россия home~pages
    Дата: 01.02.07 11:46
    Оценка: 31 (1)
    Здравствуйте, x-code, Вы писали:

    VD>>На самом деле так и делается в хороших IDE для хороших языков (читай не С++).

    XC>к сожалению, для меня пока языки типа C# непреемлемы, т.к. разрабатываю системы реального времени. Со временем, конечно, когда количество процессорных ядер будут измеряться десятками, а поддержка кода MSIL наверняка будет аппаратной (?), C++ уйдет в прошлое, но вот сейчас очень не хватает всего того что есть под .NET (хотя даже там нет всего что хочется)

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

    Мне казалось, что для встраиваемых систем(встраиваемых систем on-line обработки данных, встраиваемых АСУП и т.д.), для систем телекома и т.д. наоборот уже давно применяют Model-driven development(DSL+кодогенерация)

    С промышленными вариантами MDD-систем-разработки встраиваемых систем я не знаком. В научных кругах наработок достаточно много(как в теории, так и в практике). Например, проект Ptolemy II, ориентированный на "modeling, simulation, and design of concurrent, real-time, embedded systems".

    Концепция таких(как ptolemy) систем разработки — выбираем "правильную" для нас модель вычислений(сети Петри, конечные автоматы, как самые известные или CSP-Хоара,...) или создаём гибридную модель вычислений, затем моделируем в рамках выбранной модели нашу систему и генерируем код(в случае ptolemy возможна генерация Java, C++ кода и ранее была возможна генерация кода определённого семейства микропроцессоров Motorolы).

    Вопрос: считаете ли вы такие системы разработки тем самым недостающим уровнем в проектировании систем, систем реального времени ? и вообще мой ответ в русле вопроса или я упустил суть проблемы(подменив её на свою) ?
    Re[6]: О закономерностях
    От: WolfHound  
    Дата: 01.02.07 18:43
    Оценка:
    Здравствуйте, x-code, Вы писали:

    VD>>На самом деле так и делается в хороших IDE для хороших языков (читай не С++).

    XC>к сожалению, для меня пока языки типа C# непреемлемы, т.к. разрабатываю системы реального времени. Со временем, конечно, когда количество процессорных ядер будут измеряться десятками,
    Ты очень сильно приувиличиваешь тормоза управляемых сред. Очень сильно.
    XC>а поддержка кода MSIL наверняка будет аппаратной (?),
    Это не нужно. И даже вредно. Пусть лучше нормальный риск процессор сделают без x86'ой нашлепки.
    XC>C++ уйдет в прошлое, но вот сейчас очень не хватает всего того что есть под .NET (хотя даже там нет всего что хочется)

    XC>А пока я невооруженным глазом (!) по скорости открывания меню и диалогов определяю, написан ли софт на Java, каком-либо managed-языке .NET, или под реальный процессор, пишу на C++. Хотя уже достало

    Жаба да. .NET извини не поверю.

    XC>AST-редактор для всего кода конечно же неудобен. Но, например, структуры и классы было-бы удобнее заполнять в виде таблиц, а не текста. Например, для полей данных минимальная таблица "доступ — тип — имя — значение по умолчанию — комментарий", для методов "доступ — тип — имя — раскрывающееся дерево с таблицей аргументов — комментарий".

    Представил. Ужаснулся. ИМХО в морг.
    XC>функции и методы, безусловно, удобнее в виде текста, но чтобы в одном окне ("отсеке" окна? здесь есть место для новых концепций UI) было тело одного метода, а в какой-то заголовочной части была таблица аргументов, аналогичная таблице структуры или класса.
    Зачем? чем плох простой текст?
    XC>Речь идет просто об отказе от длинных "полотен" кода в котором свалены и классы и методы и все остальное.
    Те у тебя весь код в одном файле? Я тебя правильно понял?

    XC>Еще одна проблема — в программах нет связи с логикой предметной области. Я сейчас разрабатываю плагин для студии, чтобы добавить такую связь в простейшем варианте (по сути "иерархическая база букмарков с метаданными"). В C# эту область частично могут покрывать атрибуты. А то плоский список классов из нескольких сотен классов, в каждом из которых десятки методов и переменных, уже раздражает.

    А пространства имен тебя чем не устраивают?

    XC>Это как? Если я работаю с методом, ни разу не нужно было выходить за его пределы. Если мне нужно перейти к другому методу — пользуюсь деревом классов (к сожалению, его тоже приходится прокручивать)

    в текстовом редакторе это сделать быстрее. А в IDE которая предоставляет навигацию вобще моментально. И не нужны тут никакие деревья.

    VD>>И ты уж совсем удивишся, но разработчикам IDE в сто раз было бы проще давать редактировать только один метод. Но они поступают сложнее. Они дают тебе править код где угодно и уже сами отслеживают что ты там на редактировал чтобы соотвествующим образом изменить внутренние структуры данных (в том числе и AST).

    XC>зачем так сделано? не вижу смысла. ради простой навигации по коду? поиск по файлам быстрее работает.
    Может попробуешь поработать и ReSharper'ом? Иначе если ты не видил ничего умнее IDE для С++ разговаривать с тобой о IDE не имеет смысла.

    XC>В реалтайме проверять код ненужно, ИХМО это будет просто раздражать (как минимум — тормозами). Идеальный вариант — кнопочка типа "ввести" по которой файл/фрагмент кода будет преобразовываться в AST и при необходимости указываться ошибки.

    Нет никаких тормозов. Те вобще нет.
    Всеравно у тебя процессов постоянно бездействует вот пусть и подсвечивает ошибки в отдельном потоке с очень низким приоритетом.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Пусть это будет просто:
    просто, как только можно,
    но не проще.
    (C) А. Эйнштейн
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.