При разработке учебного языка нужно следовать некоторым основополагающим принципам (концепциям). Концепции разработки языка программирования делятся на три группы: семантические, синтаксические и прагматические (реализационные).
Основные семантические концепции, принятые при разработке учебного языка, следующие:
— понятия учебного языка должны соответствовать понятиям промышленных императивных языков программирования;
— множество понятий должно быть минимально;
— конструкции учебного языка не должны зависеть ни от аппаратной платформы, ни от операционной системы;
— язык должен поддерживать модульность, процедурное программирование и объектно-ориентированное программирование;
— конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
— намерения программиста всегда должны указываться явно (запрет умолчаний).
В качестве примеров запрета умолчаний можно привести следующие:
— отсутствие неявных преобразований типа (кроме преобразования в арифметических выражениях целый->вещественный);
— явный параметр this, задаваемый при определении метода класса;
— явное определение класса как базового для наследования;
— явное указание наследуемых элементов класса;
— явное указание типа константы при определении.
При разработке учебного языка были приняты следующие синтаксические концепции:
— базовая лексика языка должна быть русскоязычной;
— ключевые слова должны иметь английский эквивалент;
— каждый оператор языка начинается ключевым словом;
— все операторы завершаются символом «;» – точка с запятой;
— блочные конструкции языка завершаются ключевым словом «конец».
Основу реализации интерпретатора учебного языка составляют следующие принципы:
— эффективность выполнения не слишком важна;
— загрузка и связывание модулей должны выполняться динамически;
— управление памятью осуществляет система;
Не менее важными являются концепции реализации интегрированной среды, в рамках которой осуществляется обучение программированию:
— среда должна поддерживать работу и с одномодульными, и с многомодульными программами;
— среда должна обеспечивать простой и независимый от платформы механизм накопления программных компонент;
— среда должна позволять набор кода программы и в русской, и в английской лексике;
— переключение лексики не должно приводить к повторной трансляции программы;
— изменение ключевых слов в коде должно быть невозможно;
— ошибки должны определяться в момент набора программы;
— редактор кода, с одной стороны, должен обеспечивать традиционные операции редак-тирования текста, и с другой стороны, должен оперировать конструкциями языка;
— ввод-вывод данных должен осуществляться в рамках среды без выхода в операционную систему.
И наконец, среда должна предоставлять стандартную библиотеку в виде набора модулей на учебном языке.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
> конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
SESE признано устаревшей практикой (http://programmers.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from)
> явное указание наследуемых элементов класса;
имеется в виду доступ к членам базового класса?
> явное указание типа константы при определении.
всмысле "константы"? Вы имели в виду литералы?
> базовая лексика языка должна быть русскоязычной;
зачем? мы же не используем русские буквы в физике, химии и математике.
> каждый оператор языка начинается ключевым словом;
"оператор" это statement? т.е. будет что-то вроде let для присваиваний, и call для вызовов функций?
> все операторы завершаются символом «;» – точка с запятой;
почему не EOL? что бы в одну строчку несколько операторов писать?
> управление памятью осуществляет система
всмысле "система"? GC или ручное?
> Основу реализации интерпретатора учебного языка составляют следующие принципы: > переключение лексики не должно приводить к повторной трансляции программы;
это же интерпретатор, о какой трансляции речь?
Здравствуйте, LaptevVV, Вы писали:
LVV>В качестве примеров запрета умолчаний можно привести следующие: LVV>- явный параметр this, задаваемый при определении метода класса;
Следует ли это понимать, как: обращение к полям будет через this?
LVV>При разработке учебного языка были приняты следующие синтаксические концепции: LVV>- каждый оператор языка начинается ключевым словом; LVV>- все операторы завершаются символом «;» – точка с запятой;
Вероятно, "составной" оператор? Довольно странно, например оператор разыменования начинать ключевым словом.
LVV>Основу реализации интерпретатора учебного языка составляют следующие принципы: LVV>- загрузка и связывание модулей должны выполняться динамически;
Значит ли это невозможность самостоятельной (в ручном режиме) загрузки и выгрузки модулей?
LVV>- управление памятью осуществляет система;
Почему принято именно такое решение?
Значит ли это, что в классах не будет деструкторов?
LVV>Не менее важными являются концепции реализации интегрированной среды, в рамках которой осуществляется обучение программированию: LVV>- ошибки должны определяться в момент набора программы;
Вероятно, синтаксические?
LVV>- ввод-вывод данных должен осуществляться в рамках среды без выхода в операционную систему.
Значит ли это, что будет невозможно обратиться к функциям операционной системы?
Для всех таких примитивов ОС, как файлы, сокеты, пайпы, mmf, среда будет предоставлять собственные "обёртки", которые по умолчанию будут доступны в любом модуле? LVV>И наконец, среда должна предоставлять стандартную библиотеку в виде набора модулей на учебном языке.
Что в неё будет входить?
Учитывая предыдущее, логично предположить, что стандартные модули будет реализовывать АТД.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Abyx, Вы писали:
>> конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход); A>SESE признано устаревшей практикой (http://programmers.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from)
Ну и что? Они давно первокурсников учили? >> явное указание наследуемых элементов класса; A>имеется в виду доступ к членам базового класса?
Нет. Доступ — тоже явно, и обычными средствами: открыт-закрыт. Здесь именно явно задать, что вот это наследуется. >> явное указание типа константы при определении. A>всмысле "константы"? Вы имели в виду литералы?
Ну, это я из-за Виртовских языков добавил. Там константа объявляется без типа. Например, const N = 10.
В С-подобных языках тип указывается >> базовая лексика языка должна быть русскоязычной; A>зачем? мы же не используем русские буквы в физике, химии и математике.
За полтора месяца обучения первокурсников преподы уже отметили очень положительный момент: новички (которые программирование в первый раз увидели) сразу осваивают правильную терминологию предметной области.
Кроме того, имена переменных ученики дают осмысленные — на русском.
Да и преподы, обучающие школьников с нуля, практически все отмечают, что на родном языке с нуля обучать проще.
А на английский у нас в среде одной кнопочкой переключается. Это мы в следующем семестре начнем, когда понятия-концепции усвоят. >> каждый оператор языка начинается ключевым словом; A>"оператор" это statement? т.е. будет что-то вроде let для присваиваний, и call для вызовов функций?
Да. Все равно студень этого слова не набирает и ошибок не делает.
А семантику — усваивают. >> все операторы завершаются символом «;» – точка с запятой; A>почему не EOL? что бы в одну строчку несколько операторов писать?
Опять же — не набирают они точку с запятой ручками. А видеть — видят. Для перехода на С-подобные языки — полезно. >> управление памятью осуществляет система A>всмысле "система"? GC или ручное?
GC. Как в Java, C#, Component Pascal, Pithon и т.д. >> Основу реализации интерпретатора учебного языка составляют следующие принципы: >> переключение лексики не должно приводить к повторной трансляции программы; A>это же интерпретатор, о какой трансляции речь?
Именно. У нас вообще нет этапов лексического и синтаксического анализа.
Редактор сразу строит прогу во внутреннем представлении. И этот дерево — вход интерпретатора.
Я просто зафиксировал концепцию этой фразой.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Философ, Вы писали:
Ф>Здравствуйте, LaptevVV, Вы писали:
LVV>>В качестве примеров запрета умолчаний можно привести следующие: LVV>>- явный параметр this, задаваемый при определении метода класса; Ф>Следует ли это понимать, как: обращение к полям будет через this?
LVV>>При разработке учебного языка были приняты следующие синтаксические концепции: LVV>>- каждый оператор языка начинается ключевым словом; LVV>>- все операторы завершаются символом «;» – точка с запятой; Ф>Вероятно, "составной" оператор? Довольно странно, например оператор разыменования начинать ключевым словом.
Ну, у нас как-то стихийно сложилось понятие "блочный" так как в теле оператора можно писать и объявления переменных.
То есть тело — это блок в традиционном смысле.
Обычно составной оператор отличается от блока именно тем, что в составном операторе нельзя писать объявления переменных.
Так в Алгола повелось, потом в Паскальное направление перекочевало.
В С-подобных языках подобного отличия нет. LVV>>Основу реализации интерпретатора учебного языка составляют следующие принципы: LVV>>- загрузка и связывание модулей должны выполняться динамически; Ф>Значит ли это невозможность самостоятельной (в ручном режиме) загрузки и выгрузки модулей?
Пока нет, но на уровне библиотеки можно решить. LVV>>- управление памятью осуществляет система; Ф>Почему принято именно такое решение?
Потому как сейчас это повсеместно так сделано... Ф>Значит ли это, что в классах не будет деструкторов?
И конструкторов тоже... LVV>>Не менее важными являются концепции реализации интегрированной среды, в рамках которой осуществляется обучение программированию: LVV>>- ошибки должны определяться в момент набора программы; Ф>Вероятно, синтаксические?
Не только. Если студень ошибся при наборе имени, то выдается семантическая ошибка: имя не определено.
А синтаксических у нас в принципе нет, так как все ключевые слова и даже весь оператор целиком вставляются снипетом или из подсказчика. LVV>>- ввод-вывод данных должен осуществляться в рамках среды без выхода в операционную систему. Ф>Значит ли это, что будет невозможно обратиться к функциям операционной системы?
Нет, не значит. Решается на уровне стандартной библиотеки. Ф>Для всех таких примитивов ОС, как файлы, сокеты, пайпы, mmf, среда будет предоставлять собственные "обёртки", которые по умолчанию будут доступны в любом модуле?
Можем сделать для любых. Механизм расширения позволяет довольно просто сделать вызовы любых функций операционной системы.
Но пока ориентированы на первичное обучение программированию. LVV>>И наконец, среда должна предоставлять стандартную библиотеку в виде набора модулей на учебном языке. Ф>Что в неё будет входить? Ф>Учитывая предыдущее, логично предположить, что стандартные модули будет реализовывать АТД.
Типичный джентльменский набор для первоначального обучения:
— System
— String – работа со строками;
— Math – набор математических функций;
— DateTime – набор функций для работы с датой и временем;
— Money – работа с денежными суммами;
— Stack – реализация стека;
— Queue – реализация очереди;
— Set – реализация множества;
— Dictionary – реализация словаря;
— List – реализация списка;
— Store – обобщенный контейнер;
— Files – модуль для работы с файлами;
— Windows – оконная библиотека;
— Graphics – графическая библиотека;
— Черепашка – модуль черепашьей графики (для обучения);
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>При разработке учебного языка нужно следовать некоторым основополагающим принципам (концепциям). Концепции разработки языка программирования делятся на три группы: семантические, синтаксические и прагматические (реализационные).
У вас прямо Оберон получился. Ну, кроме русских идентификаторов (ух, не люблю я это дело), типов в константах и обязательной точки с запятой.
Здравствуйте, AlexRK, Вы писали:
ARK>Здравствуйте, LaptevVV, Вы писали:
LVV>>При разработке учебного языка нужно следовать некоторым основополагающим принципам (концепциям). Концепции разработки языка программирования делятся на три группы: семантические, синтаксические и прагматические (реализационные).
ARK>У вас прямо Оберон получился. Ну, кроме русских идентификаторов (ух, не люблю я это дело), типов в константах и обязательной точки с запятой.
Не совсем. Но конструкция модуля — практически из Компонентного паскаля
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Кроме того, имена переменных ученики дают осмысленные — на русском. LVV>Да и преподы, обучающие школьников с нуля, практически все отмечают, что на родном языке с нуля обучать проще. LVV>А на английский у нас в среде одной кнопочкой переключается. Это мы в следующем семестре начнем, когда понятия-концепции усвоят.
Интересно, осмысленные имена переменных тоже переключаются?
Программы же получаются только для личного пользования. Они на StackOverflow и то не смогут помощи попросить.
угу, программистом с немалым количеством репы на SO и еще несколькими сотнями программистов которые за это проголосовали.
ARK>Лично я — за один вход и один выход.
а вот лично Вас я не знаю.
Здравствуйте, LaptevVV, Вы писали:
LVV>Здравствуйте, Философ, Вы писали:
LVV>>>- управление памятью осуществляет система; Ф>>Почему принято именно такое решение? LVV>Потому как сейчас это повсеместно так сделано... Ф>>Значит ли это, что в классах не будет деструкторов? LVV>И конструкторов тоже...
Как предполагается реализовывать такие штуки, как FileStream, свой вариант финализаторов и IDisposable?
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Abyx, Вы писали:
A>Здравствуйте, AlexRK, Вы писали:
>>>> конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход); A>>>SESE признано устаревшей практикой (http://programmers.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-from)
ARK>>Кем признано, левым программистом со StackOverflow?
A>угу, программистом с немалым количеством репы на SO и еще несколькими сотнями программистов которые за это проголосовали.
ОК. Это ближе к истине. А то слишком громко звучит "SESE признано устаревшей практикой". Можно подумать, что так и есть.
ARK>>Лично я — за один вход и один выход. A>а вот лично Вас я не знаю.
Меня знать и не требуется, я не выдвигаю претендующих на истину тезисов.
Здравствуйте, Don Reba, Вы писали:
DR>Здравствуйте, LaptevVV, Вы писали:
LVV>>Кроме того, имена переменных ученики дают осмысленные — на русском. LVV>>Да и преподы, обучающие школьников с нуля, практически все отмечают, что на родном языке с нуля обучать проще. LVV>>А на английский у нас в среде одной кнопочкой переключается. Это мы в следующем семестре начнем, когда понятия-концепции усвоят.
DR>Интересно, осмысленные имена переменных тоже переключаются? DR>Программы же получаются только для личного пользования. Они на StackOverflow и то не смогут помощи попросить.
Вы забываете все время, что народ учит "таблицу умножения"...
StackOverflow у нас просто нет...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>При разработке учебного языка нужно следовать некоторым основополагающим принципам (концепциям). Концепции разработки языка программирования делятся на три группы: семантические, синтаксические и прагматические (реализационные).
Есть еще лексические..
LVV>Основные семантические концепции, принятые при разработке учебного языка, следующие: LVV>- понятия учебного языка должны соответствовать понятиям промышленных императивных языков программирования; LVV>- множество понятий должно быть минимально;
Всего 5 понятий.. Куда меньше? LVV>- конструкции учебного языка не должны зависеть ни от аппаратной платформы, ни от операционной системы;
Не зависит. LVV>- язык должен поддерживать модульность, процедурное программирование и объектно-ориентированное программирование;
Плюс к этому поддерживает функциональную и логическую парадигму.. LVV>- конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход);
Само собой.. LVV>- намерения программиста всегда должны указываться явно (запрет умолчаний).
Есть такое свойство.
LVV>При разработке учебного языка были приняты следующие синтаксические концепции:
Та какие концепции? Одна синтаксическая формула на весь язык. За исключением выражений. LVV>- базовая лексика языка должна быть русскоязычной;
Без разницы..В основе 5 понятий.. Остальное создавай на любом языке. LVV>- ключевые слова должны иметь английский эквивалент;
Ключевых слов нет. (ну, кроме вот тех 5-ти) Сначала идет имя концепта, класса или типа.. (Кстати, имя не обязательно слово. Имя может содерджать несколько слов и знаки тоже и даже один знак) LVV>- каждый оператор языка начинается ключевым словом;
ну, концепт же.. LVV>- все операторы завершаются символом «;» – точка с запятой;
Не обязательно. Только в концептах с необязательной реализацией.. LVV>- блочные конструкции языка завершаются ключевым словом «конец».
На общем синтаксие..
LVV>Основу реализации интерпретатора учебного языка составляют следующие принципы:
Одновременно и редактор и компилятор и интерпретатор.. LVV>- эффективность выполнения не слишком важна;
Как реализуешь, такой и будет эффективный. LVV>- загрузка и связывание модулей должны выполняться динамически;
Та не вопрос. LVV>- управление памятью осуществляет система;
Само собой..
LVV>Не менее важными являются концепции реализации интегрированной среды, в рамках которой осуществляется обучение программированию: LVV>- среда должна поддерживать работу и с одномодульными, и с многомодульными программами; LVV>- среда должна обеспечивать простой и независимый от платформы механизм накопления программных компонент; LVV>- среда должна позволять набор кода программы и в русской, и в английской лексике; LVV>- переключение лексики не должно приводить к повторной трансляции программы; LVV>- изменение ключевых слов в коде должно быть невозможно;
Увы.. Можно определить собственный концепт..и его реализацию.. LVV>- ошибки должны определяться в момент набора программы; LVV>- редактор кода, с одной стороны, должен обеспечивать традиционные операции редак-тирования текста, и с другой стороны, должен оперировать конструкциями языка; LVV>- ввод-вывод данных должен осуществляться в рамках среды без выхода в операционную систему.
Вообще нет операций ввода вывода. Загрузка, распределение памяти и хранение вопрос системы. Формат единый.
LVV>И наконец, среда должна предоставлять стандартную библиотеку в виде набора модулей на учебном языке.
Библиотеки делать надо.. Как и все остальное.. Язык только на бумаге и демонстрационка..
Здравствуйте, Философ, Вы писали:
Ф>Здравствуйте, LaptevVV, Вы писали:
Ф>>>Значит ли это, что в классах не будет деструкторов? LVV>>И конструкторов тоже...
Ф>Как предполагается реализовывать такие штуки, как FileStream, свой вариант финализаторов и IDisposable?
Сорри, неправильно (неточно) выразился.
Как предполагается реализовывать такие штуки, как FileStream?
Своими костылями наподобие финализаторов и IDisposable?
Т.е. понятно, что есть объекты, заведующие временем жизни неуправляемых ресурсов, которые, в идеале, должны дохнуть вместе с ресурсами, которыми они заведуют. Т.е. в дотнете для этого изобретён IDisposable. Как будет у вас?
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, LaptevVV, Вы писали:
LVV>Вы забываете все время, что народ учит "таблицу умножения"... LVV>StackOverflow у нас просто нет...
В универе у нас был преподаватель математики, рассказывал, что когда преподавал в школе (практика проходила там), учил не зубрить таблицу умножения, а представлять образно умножение чисел. Почему я это запомнил? Да потому, что именно так, образно умножаю числа в уме, но остальные в аудитории были в недоумении "как так?", он объяснил это дело на отрезках. Но, что поделаешь, когда таблица уже зазубрена? Не исправить уже. После он рассказал, что его методы обучения школа восприняла "в штыки", и его практически выжили оттуда. Он пытался воспитать гениев, а школе тупо требовалось выполнить программу.
PS. Вообще не могу, как мне повезло с преподавателями!
Здравствуйте, LaptevVV, Вы писали:
LVV>При разработке учебного языка нужно следовать некоторым основополагающим принципам (концепциям). Концепции разработки языка программирования делятся на три группы: семантические, синтаксические и прагматические (реализационные).
LVV>Основные семантические концепции, принятые при разработке учебного языка, следующие: LVV>- понятия учебного языка должны соответствовать понятиям промышленных императивных языков программирования; LVV>- множество понятий должно быть минимально; LVV>- конструкции учебного языка не должны зависеть ни от аппаратной платформы, ни от операционной системы; LVV>- язык должен поддерживать модульность, процедурное программирование и объектно-ориентированное программирование; LVV>- конструкции языка должны удовлетворять принципам структурного программирования (единственный вход и единственный выход); LVV>- намерения программиста всегда должны указываться явно (запрет умолчаний).
Забыл добавить:
— семантика конструкций языка не должна зависеть от синтаксиса языка;
И естественно, это подвигает на реализацию сменяемого синтаксиса в рамках одного редактора кода.
Сейчас у нас 4 синтаксиса:
— Semantic Language? основная лексика русская, но переключается на английскую из меню...
— С-подобная (английская и опять же русская)
— паскале-подобная (то же самое)
— мини а ля Питон... — без лишних закрывающих endoв (тоже русская и английская)
Тем самым у учней развязывается связь между синтаксисом и понятиями языка — это важно. Ибо многолетние наблюдения показывают, что студенты, которые ВООБЩЕ НЕ ЗНАКОМЫ с программированием, склонны заучивать синтаксические конструкции, а не понятия языка.
В настоящее время новый синтаксис можно добавить в среду за 1 день.
И новое понятие тоже можно добавить на счет раз-два.
Кстати, русскоязычность имеет неожиданный бонус — усвоение студентами с самого начала правильной профессиональной терминологии.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>При разработке учебного языка нужно следовать некоторым основополагающим принципам (концепциям). Концепции разработки языка программирования делятся на три группы: семантические, синтаксические и прагматические (реализационные).
Мне кажется идейка с языком заведомо тупиковая и причиной тому недостаточная мотивация у студентов и необходимость давать кроме языка еще чтото.
Если глянуть на самые толковые буквари по программированию, навроде sicp, то заметно, что там идет подача материала не от языка, а от задач.
То есть, нужно подготовить набор задач, которые 1 интересны 2 актуальны 3 раскрывают возможности языка
сам же язык нужно брать из мейнстрима, только попроще. Собственно с языком никогда не бывает сложностей, если есть хорошие задачи.
Еще интересная идейка у мит, это подача материала на заранее заготовленых библиотеках. Т.е. студент не пишет полностью всю задачу, а дописывает имеющиеся.