OberonCore https://forum.oberoncore.ru/ |
|
Оберон-07 https://forum.oberoncore.ru/viewtopic.php?f=115&t=615 |
Страница 6 из 12 |
Автор: | AVC [ Суббота, 25 Октябрь, 2008 19:38 ] |
Заголовок сообщения: | Re: Оберон-07 |
Другой пример не слишком удачного (IMHO) новшества в Оберон - параметр CONST. Идея помечать аргумент процедуры как read-only (с помощью минуса, как и read-only переменные) обсуждалась ещё при принятии "дубовых требований". Она была отвергнута, т.к. была отнесена исключительно к области оптимизации. (В качестве опции read-only аргументы поддерживаются некоторыми компиляторами, в т.ч. XDS. В КП аналогом является пометка ссылки как IN.) И вот теперь Вирт вдруг принимает обратное решение, без нового обоснования (всё это обсуждалось и раньше). Причём выбранное слово CONST, IMHO, неудачно, т.к. константы и read-only переменные разные сущности. Лично у меня сложилось впечатление, что Вирт просто не любит Оберон-2 и избавляется от сходных с ним черт в новом Обероне. В т.ч. от удачных. |
Автор: | Valery Solovey [ Суббота, 25 Октябрь, 2008 19:44 ] |
Заголовок сообщения: | Re: Оберон-07 |
AVC писал(а): 3. Привязка оператора RETURN к завершению процедуры-функции. Во-первых, результат, передаваемый функцией, всё равно должен где-то храниться. Поэтому, использование явной переменной не приносит дополнительных расходов. Компилятор должен суметь связать переменнную с местом, где у функции будет храниться результат после её отработки. В случае с множественными return-ами, подозреваю, комилятор не всегда сможет справиться с поставленной задачей.Возможно, то, что в конце процедуры-функции будет обязательный RETURN, имеет смысл. Но то, что оператор RETURN нельзя будет использовать в другом месте, в некоторых случаях так же неудобно, как и отсутствие цикла LOOP. Это возвращает нас во времена Паскаля и потребует введения необязательных переменных для хранения результата или аналогичных искуственных приёмов. Так же, как и в случае с исключением оператора LOOP, здесь просматривается борьба с т.н. "нелокальными переходами" (такими как EXIT, RETURN и исключения), которые якобы противоречат структурному программированию. Но это миф. Каким образом RETURN в середине функции противоречит структурному программированию? Ведь, выйдя из функции, мы уже никак не сможем нарушить тех или иных инвариантов внутри неё. Во-вторых, иногда требуется введение дополнительных переменных, которые не хранят конечный результат, но без которх не обойтись. Я ввёл в практику единичный return больше чем полтора года назад, однако часто встречаться в неизбежностями подобного рода не приходится. Возможно, это для меня не проблема из-за большого ОЗУ или специфики задачи. |
Автор: | AVC [ Суббота, 25 Октябрь, 2008 20:48 ] |
Заголовок сообщения: | Re: Оберон-07 |
Valery Solovey писал(а): Во-первых, результат, передаваемый функцией, всё равно должен где-то храниться. Поэтому, использование явной переменной не приносит дополнительных расходов. Как правило, функция возвращает результат в определённом регистре, так что дополнительной переменной не требуется.Тем более в Обероне, где функции возвращают только значения скалярных типов. |
Автор: | Info21 [ Суббота, 25 Октябрь, 2008 20:56 ] |
Заголовок сообщения: | Оберон-07 for ARM |
Armaide An Integrated Development Environment for LPC2000 ARM-based Microcontrollers http://www.cfbsoftware.com/armaide/armaide.aspx |
Автор: | AVC [ Суббота, 25 Октябрь, 2008 20:57 ] |
Заголовок сообщения: | Re: Оберон-07 |
Info21 писал(а): Разве в классическом Обероне разрешены открытые массивы кроме как в параметрах процедур? Там не было, но уже в Обероне-2 была полноценная поддержка массивов.Почему не взять хорошее из Оберона-2? (Можно не брать type-bound procedures, но не взять нормальную поддержку массивов... очень странно.) |
Автор: | Info21 [ Суббота, 25 Октябрь, 2008 21:09 ] |
Заголовок сообщения: | Re: Оберон-07 |
AVC писал(а): ... уже в Обероне-2 была полноценная поддержка массивов. Почему не взять хорошее из Оберона-2? Она там не совсем полноценная. Массив -- чуть более низкоуровневая сущность, чем запись (объект). И в О-07 это проявлено. А с динамическими массивами возникает проблема экспорта элементов только для чтения. В О и О-07 ее нет. А в Обероне-2 и КП она есть. Я тоже считал, что динамические массивы нужны, но по размышлении схема в О-07 вызывает меньше возражений, чем в О, и имеет упомянутые плюсы, которых нет в О-2 и КП. Плюс к тому еще один плюс -- увеличившуюся простоту |
Автор: | Wlad [ Суббота, 25 Октябрь, 2008 21:10 ] |
Заголовок сообщения: | Re: Оберон-07 for ARM |
Info21 писал(а): Armaide An Integrated Development Environment for LPC2000 ARM-based Microcontrollers http://www.cfbsoftware.com/armaide/armaide.aspx Новости шикарные! Всё - классно! Но, кнопки "download free" не нашёл... |
Автор: | bohdant [ Суббота, 25 Октябрь, 2008 21:21 ] |
Заголовок сообщения: | Re: Оберон-07 |
Цитата: Новости шикарные! Всё - классно! Но, кнопки "download free" не нашёл... Ну новостью это нельзя назвать напомню: http://www.ocp.inf.ethz.ch/forum/index. ... tml#msg560 Но всегда можно отправить сообщение Chris Burrows, а вдруг он подскажет где эта кнопочка |
Автор: | AVC [ Суббота, 25 Октябрь, 2008 21:27 ] |
Заголовок сообщения: | Re: Оберон-07 |
При исключении цикла LOOP и привязке RETURN к завершению процедуры Вирт использовал однотипную аргументацию: syntactically unconnected и syntactically disconnected. Да, компилятор стал проще. (В целях упрощения компилятора еще и оператор CASE был испорчен, окончательно превратившись в массив меток.) А программировать стало менее удобно. И речь идёт отнюдь не о синтаксическом сахаре. Не понимаю попыток info21 защищать цикл Дейкстры. Даже в излюбленном (заведомо выигрышном) примере голландца - алгоритме Евклида - он проигрывает по ясности виртовскому варианту на Модуле-2. Оберон-07: Код: WHILE m > n DO m := m - n Модула-2:ELSIF n > m DO n := n - m END Код: WHILE m # n DO Во втором случае условие выхода из цикла очевиднее.
IF m > n THEN m := m - n ELSE n := n - m END END |
Автор: | Wlad [ Суббота, 25 Октябрь, 2008 21:32 ] |
Заголовок сообщения: | Re: Оберон-07 |
bohdant писал(а): Ну новостью это нельзя назвать Дык я - фигурально! Вне временной привязки. Было бы не плохо его юзануть на "боевых" системах... А то с АВР32 возиться - ещё стока дерьма повсплывёт (и по собственным непоняткам и по их ошибкам и по дурости начальства, откровенно полагающего, что программисты информацией посредством астральной связи обмениваются, а не из книг и по Сети...)... |
Автор: | Илья Ермаков [ Суббота, 25 Октябрь, 2008 21:41 ] |
Заголовок сообщения: | Re: Оберон-07 |
По поводу динам. массивов: не могу говорить про мат. задачи, но в своей практике ни разу их не использовал (пытался, но оказывалось неудобно). В качестве контейнеров чего-нибудь они неудобны. Удобнее и техничнее оказываются списки (или блочные списки, где сцепляются RECORD с буферами фикс. длины). Хотя и написал процедуру SetLength для динам. массивов, которую используют, как сужу по форуму-открытым исходникам, многие, но сам ей не пользуюсь, не нравится. В целом, просто объявить контейнер в КП не получается, нек. небольшое время приходится тратить на конструирование подходящей структуры данных и операций на ней. Иногда несколько надоедает, иногда наоборот помогает. Решить этот вопрос, не нарушая баланс языка (выскоуровневость в сочетании с машинной прозрачностью), имхо, нельзя. Поэтому принимаем как есть (но относительно того, как бы это могло быть "вообсче говоря", соображения копятся). |
Автор: | AVC [ Суббота, 25 Октябрь, 2008 21:53 ] |
Заголовок сообщения: | Re: Оберон-07 |
Info21 писал(а): Она там не совсем полноценная. То есть?Info21 писал(а): Массив -- чуть более низкоуровневая сущность, чем запись (объект). Проявлено таким образом, что я не могу создать массив нужной размерности (если она не известна на этапе компиляции).И в О-07 это проявлено. Info21 писал(а): А с динамическими массивами возникает проблема экспорта элементов только для чтения. Можно не экспортировать, главное - было бы что. Info21 писал(а): Я тоже считал, что динамические массивы нужны, но по размышлении схема в О-07 вызывает меньше возражений, чем в О, и имеет упомянутые плюсы, которых нет в О-2 и КП. Как (каким-то боком) "компиляторо-писака" , я оценил упрощение компилятора и определённое изящество решения. Но язык стал менее удобным для программиста.Плюс к тому еще один плюс -- увеличившуюся простоту Вместе с тем, мне весьма любопытно, к каким выводам Вы пришли по размышлении (и почему). |
Автор: | AVC [ Суббота, 25 Октябрь, 2008 21:59 ] |
Заголовок сообщения: | Re: Оберон-07 |
Илья Ермаков писал(а): По поводу динам. массивов: не могу говорить про мат. задачи, но в своей практике ни разу их не использовал (пытался, но оказывалось неудобно). Основная выгода от динамических массивов достаётся конечно математикам , другое очевидное применение - строки.
|
Автор: | Илья Ермаков [ Суббота, 25 Октябрь, 2008 22:14 ] |
Заголовок сообщения: | Re: Оберон-07 |
Ну, для меня строка - это LEN <= 256 Всё, что длиннее - это текст. И применяются, например, TextModels ББ или что-то подобное, библиотечное. |
Автор: | Александр Ильин [ Суббота, 25 Октябрь, 2008 22:27 ] |
Заголовок сообщения: | Re: Оберон-07 |
Илья Ермаков писал(а): Ну, для меня строка - это LEN <= 256 :-) Всё, что длиннее - это текст. И применяются, например, TextModels ББ или что-то подобное, библиотечное. А для меня, однако, сразу вопрос, как этот текст (TextModels) передать параметром в WinApi? Внутри микроконтроллерa - не спорю, можно выкинуть. |
Автор: | bohdant [ Суббота, 25 Октябрь, 2008 22:54 ] |
Заголовок сообщения: | Re: Оберон-07 |
Илья Ермаков писал(а): Ну, для меня строка - это LEN <= 256 Всё, что длиннее - это текст. И применяются, например, TextModels ББ или что-то подобное, библиотечное. Извиняюсь, но так и напрашивается: много букв, неасилю (не сочтите за оскорбление, просто шутка) |
Автор: | Илья Ермаков [ Суббота, 25 Октябрь, 2008 22:56 ] |
Заголовок сообщения: | Re: Оберон-07 |
Нет, на самом деле: строка - это строка. Текст - это текст. Если предполагается оперирование с многострочными последовательностями знаков - однозначно текст, в библиотечной реализации. |
Автор: | Info21 [ Воскресенье, 26 Октябрь, 2008 00:23 ] |
Заголовок сообщения: | Re: Оберон-07 |
AVC писал(а): Info21 писал(а): Массив -- чуть более низкоуровневая сущность, чем запись (объект). Проявлено таким образом, что я не могу создать массив нужной размерности (если она не известна на этапе компиляции).И в О-07 это проявлено. Тут логика работы должна быть чуть другая. В длину массивов закладывается некое ограничение сверху, а реальная длина хранится как отдельное поле. Это не годится, если размерность обрабатываемых массивов может сильно меняться, но и тут, подозреваю, можно извратиться, не меняя язык -- что-нибудь мета-образное. Это в некотором смысле вынос NEW( a, N ) из языка в библиотеки. Что-то в таком духе, но щас уж поздно.................. |
Автор: | Info21 [ Воскресенье, 26 Октябрь, 2008 17:42 ] |
Заголовок сообщения: | Re: Оберон-07 |
Предлагаю завести раздел форума "Идеология Оберонов". Сделать там ветки: Структурное программирование Секция VAR Цикл Дейкстры ... и перенести туда соотв. цепочки сообщений. Так сказать, явим коллективный пример 2-го умотипа |
Автор: | Trurl [ Понедельник, 27 Октябрь, 2008 09:55 ] |
Заголовок сообщения: | Re: Оберон-07 |
AVC писал(а): 4. Исключение типов SHORTINT, LONGINT и концепции поглощения типов в целом. Удобство пользования единственным целочисленным типом понятно. В принципе, это правильно. Но чтобы такое "учудить" в практическом ЯП, надо жить в башне из слоновой кости. В реальном мире большое число форматов данных использует для экономии места "короткие" типы. Теперь, чтобы работать с ними в Обероне, придется использовать разные искусственные приёмы, вплоть до привлечения псевдомодуля SYSTEM. Наличие SHORTINT и т.п. все равно не спасает от необходимости использовать искусственные приёмы. |
Страница 6 из 12 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |