OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 12:39

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 679 ]  На страницу Пред.  1 ... 16, 17, 18, 19, 20, 21, 22 ... 34  След.
Автор Сообщение
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Четверг, 08 Март, 2012 21:30 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Валерий Лаптев писал(а):
А что вы понимаете под табличным видом объявлений?


Ну, что-нибудь вроде этого:
Вложение:
Табличная форма объявления.png
Табличная форма объявления.png [ 13.15 КБ | Просмотров: 9848 ]


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

Пользовательские типы данных должны объявляться не в общей таблице с переменными, а на отдельных специализированных вкладках, имеющих соответствующую структуру: проекты, модули, классы, процедуры, функции, формы ввода и отображения данных и т.п.

Я убежден, что преимущества СТРУКТУРНОГО редактора перед текстовыми (IDE) раскроются только при отказе от плоского текстового исходного кода в пользу структурированного документа, состоящего из вкладок с таблицами, структурными диаграммами (но без расползающихся по экрану блок-схем, UML и т.п.) и блочным (с блоками, расположенными только по вертикали, но с переменными отступами слева) исходным кодом, описывающим алгоритм.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Четверг, 08 Март, 2012 22:36 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Это - следующий шаг развития.
Мы в сентябре поставим систему в классы взамен кумира и соберем кое-какую статистику (встроенное логирование ВСЕХ действий пользователя). На основе статистики будем дальше развивать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Пятница, 09 Март, 2012 08:16 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Кстати, об операторах.
Цитата:
Вызов процедуры
имя(аргументы);
имя();
имя(аргументы) – вызов функции в выражениях

Возврат из процедуры
return;
return выражение;
Семантика
– в процедуре может быть несколько операторов return
– второй вид оператора допускается только в функции
– тип выражения должен совпадать или приводиться к типу возвращаемого значения функции

Условный – традиционный
Код:
если выражение то
   операторы;
конец;
--------------------------------------------------------------
если выражение то
   операторы;
иначе
   операторы;
конец;
--------------------------------------------------------------
если выражение то
   операторы;
аесли выражение то
   операторы;

иначе
   операторы;
конец;
Семантика
Выражение является булевским
В многоветочном операторе булевские выражения являются взаимоисключающими
Поэтому выполняется только одна из веток аесли
Если все выражения ложны, то выполняется ветка иначе

Дейкстра
Синтаксис требует уточнения
Код:
if
| условие: операторы;
| условие: операторы;

| условие: операторы;
end;
Этот же оператор является переключателем – семантика Дейкстры.
Условие – булевское выражение
Условия в операторе не являются взаимоисключающими
Поэтому выполняются те группы операторов, у которых условия истинны

Оператор позволяет задавать одиночный if:
Код:
if | условие: операторы;
end;

Обычный двухветочный if эквивалентен:
Код:
if | условие: операторы;
   |~условие: операторы;
end;
Вариант: представляется более подходящим; ветка иначе не является обязательной
Код:
if
| условие: операторы;
| условие: операторы;

| условие: операторы;
else   
   операторы;   
end;
Семантика: если не выполняется ни одно из условий, то выполняется ветка else

Цикл
Цикл с предусловием
Код:
while выражение do
   операторы;
end;

Цикл с постусловием
Код:
repeat
   операторы;
until выражение end;

Вопрос: какой-то вариант цикла со счетчиком? Или типа foreach ?

Дейкстра --- требует принятия конкретного решения
Код:
do
| условие: операторы;
| условие: операторы;

| условие: операторы;
end;
Семантика: цикл выполняется, пока есть хотя бы одно истинное условие
вариант: представляется более подходящим; ветка иначе не является обязательной
Код:
do
| условие: операторы;
| условие: операторы;

| условие: операторы;
else
  операторы;
end;
Семантика: если нет ни одного истинного условия, то выполняется ветка else и цикл завершается

Цикл while:
Код:
do
| условие: операторы;
end;

цикл do while (repeat):
Код:
do   
| true: операторы;    ---- так нельзя по семантике Дейкстры…
| условие:
end;
вариант: true можно пропускать вместе со скобками
Код:
do   
|операторы;       ---- так нельзя по семантике Дейкстры…
| условие:
end;

Цикл Паук – упрощённый
Код:
do
|операторы;         – выполняются без условий ???
| условие: операторы;
| условие: операторы;

| условие: операторы;
|операторы;         – выполняются без условий ???
end;

Определение процедуры – независимая
Код:
   процедура (параметры) имя;      || функция (параметры): тип имя;
      Операторы;
   Конец имя;

Семантика
1. тип может отсутствовать, тогда это процедура.
2. Все объекты, объявленные внутри, являются локальными
3. локальные объекты объявляются в любом месте по мере необходимости

----------------------- этого пока нет ---------------------------
Вопрос: 1. Локальная запись в процедуре – разрешено ?
2. Локальные процедуры – разрешено ?
----------------------------------------------------------------------
Параметры
– тип параметра может быть любым:
1. – базовые
2. – запись
3. – массив
4. – процедура
5. – указатель на запись
– Параметры-значения и параметры переменные;
– Параметры значения могут быть только базовые; при вызове процедуры на месте параметра-значения разрешается задавать выражение, совместимое по типу с параметром
– Параметры-переменные – любого типа
– параметр-массив передаётся без указания размера
– параметры-переменные входной, выходной, переменный

Возвращаемые значения
– нельзя возвратить массив
Внимание!
Массив нельзя возвратить. Если разрешить возвратить массив, то разрешаются, как минимум присваивания с массивами.


Модули
Код:
модуль имя
      Элементы модуля      
   начало
            операторы
   конец имя.

Оператор
Код:
подключить модуль, модуль, …

Английское слово
import
Ключевое слово доступно
Ключевое слово uses

Модуль определяет:
- пространство имён
- единица трансляции-загрузки-выполнения
Программа = набор модулей

Пространство имён:
- любые поименованные объекты – секция объявлений
- имена видны с момента объявления
- имена локальны в модуле по умолчанию
- имя можно явно объявить публичным (видимым в других модулях) – public
- доступ к публичным именам другого модуля определяется оператором import
Единица трансляции
- модуль строится в процессе редактирования - трансляции не требуется
- правильно построенный модуль может быть сразу выполнен
- оператор import определяет необходимые загружаемые модули
- выполнение начинается с операторов секции инициализации модуля
Вопрос: объявления констант и переменных в секции инициализации ?
Секция инициализации – это неименованная процедура, выполняемая первой.
Объявленные в ней переменные являются локальными.
В этой секции может стоять вызов любой процедуры-функции-метода, определённой в секции объявлений.

Один документ = один модуль
В документе перед, после и внутри модуля могут быть заданы узлы текста:
# Текст #
Вопрос, требующий решения:
Формат сохранения самого модуля и сопутствующих данных (таблица имен ?)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Пятница, 09 Март, 2012 10:43 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 2046
М.б. да, таблица со ссылочностью, примерно как описано здесь?.. Это, конечно, не спецификация формата... :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Пятница, 09 Март, 2012 10:52 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Валерий Лаптев писал(а):
дробное, real; стандартный вид; размер соответствует типу IEEE-754-1985
Непренебрежимый вклад в борьбу с мракобесием состоял бы в том, чтобы хотя бы не упоминать гуано там, где упоминать его совершенно нет нужды.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Пятница, 09 Март, 2012 12:28 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
В цикле Дейкстры я бы "do" заменил на "while". См. образец.

Я считаю цикл с постусловием "repeat...until(условие)" ненужным. Кроме того, его невозможно будет показать в свернутом виде - одним заголовком, потому что весь смысл (а конкретно, условие) содержится в последнем операторе, а не в заголовке. Вариант "while(условие)...do" можно было бы показать в свернутом виде, но все равно цикл с постусловием не нужен.

Вертикальные черточки "|" я бы заменил на треугольные стрелки раскрытия/свертки (progressive disclosure controls).
Вложение:
Arrows.png
Arrows.png [ 252 байт | Просмотров: 9811 ]


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

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

Локальные процедуры (и описатели методов private и т.п.) не нужны, поскольку язык модульный, а внутри модуля видно не слишком много процедур, и всем им вполне можно дать уникальные имена.

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

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

Валерий Лаптев писал(а):
Вопрос, требующий решения:
Формат сохранения самого модуля и сопутствующих данных (таблица имен ?)


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Пятница, 09 Март, 2012 14:54 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Info21 писал(а):
Валерий Лаптев писал(а):
дробное, real; стандартный вид; размер соответствует типу IEEE-754-1985
Непренебрежимый вклад в борьбу с мракобесием состоял бы в том, чтобы хотя бы не упоминать гуано там, где упоминать его совершенно нет нужды.

Почему гуано, поясните ? У нас есть какой-то другой - лучший - стандарт?
Просто по этому стандарту все окружающие персоналки работают.
IEEE-754-2008 уже где-то реализован?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Пятница, 09 Март, 2012 15:07 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Владислав Жаринов писал(а):
М.б. да, таблица со ссылочностью, примерно как описано здесь?.. Это, конечно, не спецификация формата... :)

Ну, как-то этот вопрос у нас решен. Но в связи с многомодульностью и проектами - требует внимательного рассмотрения.
А пока модуль сохраняется в XML-формате.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Пятница, 09 Март, 2012 15:36 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Сергей Прохоренко писал(а):
В цикле Дейкстры я бы "do" заменил на "while".

Нет. ИМХО разные вещи - должны выглядеть по-разному
Цитата:
Я считаю цикл с постусловием "repeat...until(условие)" ненужным. Кроме того, его невозможно будет показать в свернутом виде - одним заголовком, потому что весь смысл (а конкретно, условие) содержится в последнем операторе, а не в заголовке. Вариант "while(условие)...do" можно было бы показать в свернутом виде, но все равно цикл с постусловием не нужен.

Формально - не нужен. Но во всех языках есть. Поэтому студентов с ним знакомить надо.
А вот насчет цикла со счетчиком мы размышляем серьезно. Хотя и тут у нас некий вариант работает пока.

Цитата:
Вертикальные черточки "|" я бы заменил на треугольные стрелки раскрытия/свертки

Вертикальные черточки - это не просто черточки. Это - операция ИЛИ (or). Что подчеркивает семантику цикла
Цитата:
Наиболее общие условия видимости должны быть такими: для переменных (включая записи и объекты) границами видимости являются границы процедуры/функции (кроме случаев передачи параметров). Для пользовательских типов (включая классы как типы объектов), функций и процедур границами видимости являются границы модуля (кроме случаев экспорта/импорта).

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

Речь идет о том, что пока мы не реализовали вот такой возможности:
Код:
запись ... конец имя;

То есть совмещение объявление типа и объявление переменной, что обычно разрешено практически во всех языках, у нас пока не разрешено.
И мы сильно сомневаемся, что нужно подобную форму разрешать.
Потому как в объектно-ориентированном языке обычно все же сначала определяют тип отдельно. А потом уже определяют объекты данного типа.
Поскольку наша запись - это тип, то запись в процедуре - это локальный класс. С учетом проблем с локальными классами в С++ - оно нам надо ?
Цитата:
Локальные процедуры (и описатели методов private и т.п.) не нужны, поскольку язык модульный, а внутри модуля видно не слишком много процедур, и всем им вполне можно дать уникальные имена.

Мы тоже сомневаемся в полезности подобного механизма на данном этапе развития языков.
Цитата:
"Параметры-значения могут быть только базовые" - это крайне нежелательное условие, противоречащее функциональному стилю программирования. Надо разрешить возвращать массив и разрешить присваивания с массивами. "По умолчанию" приоритет должен отдаваться надежности программы, а не ее эффективности, а уж дальше пусть программист думает о том, как сделать программу эффективнее - надо поразмыслить над структурой данных, да и параметры-переменные тоже разрешены. Для повышения эффективности компилятор тоже мог бы озаботиться тем, чтобы копирование при передаче по значению осуществлялось только, если производится попытка изменить фактические параметры. Хотя передачи массива как значения нет ни в Си, ни в Обероне, но в конце концов и Вирт пришел к выводу, что программировать надо по возможности в функциональном стиле. Эту возможность нужно программисту дать.

Эффективность здесь совершенно ни причем. В том же КП с массивами нельзя сделать ничего... :)
А если вы посмотрите в C#/C++/Java? то увидите, что массивы там - это полноценные объекты.
В нашем случае мы массивом считаем достаточно низкоуровневую конструкцию. Но которая послужит основой для реализации мощного контейнера вроде Store. А также нам массив в таком виде нужен для реализации строк.
Вообще-то в настоящее время массив разрешено возвращать. Но вопросы выражений с массивами - совсем не продуманы.
Я все же склоняюсь к мнению Вирта: язык минимален, а все мощное - во фреймворке.
Цитата:
Идея секции инициализации (т.е., главной процедуры) изначально исходит из правильной посылки: все переменные должны быть локальными для какой-то процедуры или функции, а не быть глобальными для всех процедур, содержащихся в модуле. Но наличие единственной секции инициализации делает программную архитектуру слишком жесткой. Я считаю, что выполнение программы может начинаться с любой процедуры или функции, если эта процедура или функция (как, может быть, и другие!) сделана доступной извне модуля (экспортирована), а переменные вызывающей процедуры (функции), кроме фактических параметров, не должны быть видны в вызываемой (т.к. функциональный стиль программирования, инкапсуляция и т.п.).

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

Валерий Лаптев писал(а):
Вопрос, требующий решения:
Формат сохранения самого модуля и сопутствующих данных (таблица имен ?)

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Пятница, 09 Март, 2012 19:30 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Валерий Лаптев писал(а):
Info21 писал(а):
Валерий Лаптев писал(а):
дробное, real; стандартный вид; размер соответствует типу IEEE-754-1985
Непренебрежимый вклад в борьбу с мракобесием состоял бы в том, чтобы хотя бы не упоминать гуано там, где упоминать его совершенно нет нужды.
Почему гуано, поясните ?
Вы прям заставляете меня упоминать это убоище под название Ц++


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Пятница, 09 Март, 2012 19:34 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Валерий Лаптев писал(а):
Для начинающих жесткая структура и нужна. Посмотрите на школьную сборку Ткачева - секция инициализации модуля используется как раз в смысле функции main. Или в смыле программы паскаля.
Смысл все-таки искажен.
Это сделано для уменьшения переходного порога для учителей, переходящих с паскаля.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Пятница, 09 Март, 2012 19:42 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Info21 писал(а):
Вы прям заставляете меня упоминать это убоище под название Ц++

Ц++ здесь совершенно сбоку припеку.
КП тоже на нижнем уровне пользуется тем же стандартом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Пятница, 09 Март, 2012 19:45 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Info21 писал(а):
Валерий Лаптев писал(а):
Для начинающих жесткая структура и нужна. Посмотрите на школьную сборку Ткачева - секция инициализации модуля используется как раз в смысле функции main. Или в смыле программы паскаля.
Смысл все-таки искажен.
Это сделано для уменьшения переходного порога для учителей, переходящих с паскаля.

ИМХО - это правильно и хорошо сделано.
Ибо коммандер - свойство среды, а не языка.
При обучении начинающих для одномодульной программы секция инициализации - самое то, что доктор прописал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Пятница, 09 Март, 2012 22:19 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Валерий Лаптев писал(а):
ИМХО - это правильно и хорошо сделано.
Ибо коммандер - свойство среды, а не языка.


Мне кажется, что некоторые акценты здесь не совсем верные.

Университеты совершенно правильно декларируют "надъязыковое" обучение программированию, то есть, обучение программированию на разных языках. При этом изучение собственно языков программирования является второстепенным по сравнению с обучением универсальным технологиям и различным парадигмам программирования. Сегодня человек сталкивается с одними языками, завтра - с другими, а универсальные навыки позволяют ему осваивать любые языки программирования. И в промышленном программировании среда (в т.ч., среда времени исполнения) играет все более важную роль, а язык постепенно отходит на второй план.

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

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

Когда я пишу об универсальных технологиях программирования, мне в голову приходит вопрос об асинхронном программировании (а-ля Erlang). Я понимаю, что Вы прочно завязаны на .Net, в котором эта вещь пока в стадии беты. Планируете ли Вы это в языке, и будет ли это калькой с .Net, наработками Active Oberon и Zonnon или же чем-то другим?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Суббота, 10 Март, 2012 09:42 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Сергей Прохоренко писал(а):
И то, и другое нет необходимости изучать по спецификациям и мануалам, поскольку всё доступно с помощью контекстных средств поиска и подсказки.


Вот, Сергей, Вы всё время упираете на эту лёгкость изучения. Хорошо, но очевидно, что режимы работы в вашем структурном редакторе новичка и уже опытного пользователя неизбежно будут отличаться. Т.е. то, что помогает новичку, начнёт "бесить" опытного пользователя, которому захочется делать определённые вещи не пошагово, а сразу (например, какой-то выученной быстрой командой). Вы занимались вопросом изучения отличий в стиле работы пользователя по мере освоения инструмента и способами "подстройки" инструмента под уровень пользователя?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Суббота, 10 Март, 2012 10:57 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Сергей Прохоренко писал(а):
Мне кажется, что некоторые акценты здесь не совсем верные.

Университеты совершенно правильно декларируют "надъязыковое" обучение программированию, то есть, обучение программированию на разных языках. При этом изучение собственно языков программирования является второстепенным по сравнению с обучением универсальным технологиям и различным парадигмам программирования. Сегодня человек сталкивается с одними языками, завтра - с другими, а универсальные навыки позволяют ему осваивать любые языки программирования. И в промышленном программировании среда (в т.ч., среда времени исполнения) играет все более важную роль, а язык постепенно отходит на второй план.

Нет. Начинающий сначала изучает язык. В самом прямом смысле слова: осваивает синтаксис и семантику. Как иностранный язык. Сначала надо заучить слова, познакомиться с грамматикой, почувствовать строй языка.
Это мы видим на примере более 15-летнего опыта преподавания.
Среда - это следующий шаг. И не все его делают, предпочитая действовать простым и известным способом.
Вот только перед праздниками для 2 (второго!) курса было откровением, что в студии можно класс добавить, а не только cpp-файл.
Цитата:
В структурном редакторе тем более главное не язык, а именно среда. Подход "язык минимален, а все мощное - во фреймворке" уже устарел, поскольку на первый план выдвигает язык программирования и пытается сделать его проще, передавая всё сложное в библиотеки. Но когда мы имеем дело с современными средствами разработки (тем более - со структурным редактором!), граница между языком и стандартной библиотекой практически исчезает. Объектами языка и объектами стандартной библиотеки программист манипулирует совершенно одинаково. И то, и другое нет необходимости изучать по спецификациям и мануалам, поскольку всё доступно с помощью контекстных средств поиска и подсказки.

Нет. Граница - не исчезает. Более того, для профессиональных программистов нужно ее подчеркивать. Ибо им самим ряд вещей из фреймворка предстоит научиться реализовывать.
Цитата:
Обучать студентов младших курсов всяким несуразностям (в т.ч., циклам с постусловиями), которые имеются "во всех языках", вряд ли стоит. Когда те начнут осваивать эти языки на старших курсах - сами узнают. Имеет смысл обучить тому лучшему, чего достигла софтверная отрасль (в т.ч. и коммандеры), показать способы решения задач с помощью лучшего инструмента, а также привить правильный стиль программирования. Обучать на плохом, но распространенном инструменте - это значит привить отвращение и закрепить вынужденные неправильные приемы. Плохой инструмент - это важная причина отсева студентов специальности computer science на младших курсах. Их, образно говоря, обучают плаванию, бросая в ледяную воду.

Это не несуразности. Проводя аналогию с вашими словами - давайте обучать студентов сразу работать математических программах, ибо вручную брать интеграл - это же 18 век!
Цитата:
Когда я пишу об универсальных технологиях программирования, мне в голову приходит вопрос об асинхронном программировании (а-ля Erlang). Я понимаю, что Вы прочно завязаны на .Net, в котором эта вещь пока в стадии беты. Планируете ли Вы это в языке, и будет ли это калькой с .Net, наработками Active Oberon и Zonnon или же чем-то другим?

На нет мы завязаны постольку-поскольку. Пацан должен написать диплом, поэтому пишет на том, что сейчас у него в пальцах. Но мы уже обсуждали и рассматривали Qt на предмет переноса в него. Особых препятствий пока не видно.
Кроме того, я еще рассматриваю вопрос переноса на КП - для сравнительного анализа.
Но это после защиты диплома все будет.
Пацан еще полтора года в магистратуре, а потом еще 3-4 года в аспирантуре. Так что успеем все варианты рассмотреть и реализовать.
И архитектуру сделать максимально гибкую.
Вот уже интерпретатор такой стал: новые возможности только добавляются - не затрагивая то, что уже сделано. На доведение до такогй архитектуры потребовался год.
Аналогичные телодвижения происходят и в архитектуре среды. Но там работы больше, так как еще исследование типовых действий происходит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Суббота, 10 Март, 2012 11:01 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Илья Ермаков писал(а):
Сергей Прохоренко писал(а):
И то, и другое нет необходимости изучать по спецификациям и мануалам, поскольку всё доступно с помощью контекстных средств поиска и подсказки.


Вот, Сергей, Вы всё время упираете на эту лёгкость изучения. Хорошо, но очевидно, что режимы работы в вашем структурном редакторе новичка и уже опытного пользователя неизбежно будут отличаться. Т.е. то, что помогает новичку, начнёт "бесить" опытного пользователя, которому захочется делать определённые вещи не пошагово, а сразу (например, какой-то выученной быстрой командой). Вы занимались вопросом изучения отличий в стиле работы пользователя по мере освоения инструмента и способами "подстройки" инструмента под уровень пользователя?


Я упираю на ОДИНАКОВУЮ легкость изучения языка, обширной стандартной библиотеки и интегрированных дополнительных библиотек. Любой инструмент для профессиональной разработки неизбежно распухает, поскольку должен сопрягаться с бесчисленным множеством различных технологий. Программистам на C# и Java приходится изучать не столько сам язык, сколько библиотеки - ползая по мануалам, пытаясь воспринять путаные описания на английском или псевдорусском языке, тестируя новые для них конструкции методом "тыка". И это именно то, что раздражает опытного пользователя.

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

Объясню на примере. В MS Access запросы можно строить как пошаговым конструктором (wizard), так и перетаскивая на панель нужные поля из таблиц. Я всегда пользовался вторым методом, даже когда был новичком. Это и быстрее, и нагляднее, и всегда понимаешь, что получишь в итоге. Когда есть такой удобный инструмент, то отпадает всякая надобность в пошаговом конструкторе, и не возникает даже мысль о "какой-то выученной быстрой команде" - в ней просто нет необходимости.

Напротив, недавно я был вынужден освоить MS Project - исплевался. Все термины переведены безграмотно, и вводят в заблуждение; без трех толстых книжек на псевдорусском языке ничего не понять; "шибко умная" программа работает по нигде не описанным подробно алгоритмам и вмешивается в работу пользователя; чтобы добраться до команд и настроек, приходится продираться сквозь несуразные меню, подменю и всплывающие панели. Вот в таком г... опытному пользователю и нужны "выученные быстрые команды".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Суббота, 10 Март, 2012 11:30 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Валерий Лаптев писал(а):
Сергей Прохоренко писал(а):
Когда я пишу об универсальных технологиях программирования, мне в голову приходит вопрос об асинхронном программировании (а-ля Erlang). Я понимаю, что Вы прочно завязаны на .Net, в котором эта вещь пока в стадии беты. Планируете ли Вы это в языке, и будет ли это калькой с .Net, наработками Active Oberon и Zonnon или же чем-то другим?

На нет мы завязаны постольку-поскольку. Пацан должен написать диплом, поэтому пишет на том, что сейчас у него в пальцах. Но мы уже обсуждали и рассматривали Qt на предмет переноса в него. Особых препятствий пока не видно.
Кроме того, я еще рассматриваю вопрос переноса на КП - для сравнительного анализа.
Но это после защиты диплома все будет.
Пацан еще полтора года в магистратуре, а потом еще 3-4 года в аспирантуре. Так что успеем все варианты рассмотреть и реализовать.
И архитектуру сделать максимально гибкую.
Вот уже интерпретатор такой стал: новые возможности только добавляются - не затрагивая то, что уже сделано. На доведение до такогй архитектуры потребовался год.
Аналогичные телодвижения происходят и в архитектуре среды. Но там работы больше, так как еще исследование типовых действий происходит.


Я сужу по тому, что, например, все языки на платформе .NET используют одинаковый механизм исключений. Скорее всего, они будут иметь и одинаковые средства асинхронного программирования. Хотелось узнать, будете ли Вы использовать эти средства в своем языке. По отзывам они реализованы в .NET Framework 4.5 Beta не лучшим образом, и возможно, имело бы смысл посмотреть на языки Active Oberon, Zonnon, Erlang или попытаться придумать что-то свое.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Суббота, 10 Март, 2012 13:41 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Сергей Прохоренко писал(а):
Я сужу по тому, что, например, все языки на платформе .NET используют одинаковый механизм исключений. Скорее всего, они будут иметь и одинаковые средства асинхронного программирования. Хотелось узнать, будете ли Вы использовать эти средства в своем языке. По отзывам они реализованы в .NET Framework 4.5 Beta не лучшим образом, и возможно, имело бы смысл посмотреть на языки Active Oberon, Zonnon, Erlang или попытаться придумать что-то свое.

Об асинхронном программировании начнем думать после реализации ООП. В части ООП - много неясностей и каких-то непродуманных решений.
Эта часть требует отдельного исследования и отдельного человека.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Семантический редактор
СообщениеДобавлено: Суббота, 10 Март, 2012 20:31 
Аватара пользователя

Зарегистрирован: Воскресенье, 08 Июль, 2007 00:38
Сообщения: 778
Откуда: Москва
Валерий Лаптев писал(а):
Об асинхронном программировании начнем думать после реализации ООП.

Возможно, не стоит намертво привязывать асинхронное программирование к ООП, как это сделано в языках, в которых "всё (или почти всё) есть объект". Например, в Erlang, который считается образцовым в области асинхронного программирования, нет такой привязки. Мне кажется, что ООП и асинхронное программирование по большому счету ортогональны.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 679 ]  На страницу Пред.  1 ... 16, 17, 18, 19, 20, 21, 22 ... 34  След.

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB