OSDev

для всех
Текущее время: 19 окт 2017, 15:42

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




Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: язык программирования для ОС
СообщениеДобавлено: 12 янв 2014, 14:30 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
Вопрос больше к SII. Но те кто знают Си/Си++ тоже могут отписаться.
Разрабатываю свой язык.
Для практической реализации требуется ограничить функционал "переменных". Я имею в виду наложить ограничения типа только чтение или запись. Такое может быть полезным для создания интерфейса при работе с портами в/в.
Интересует как такие ограничения реализуются в ada и других языках?
К примеру в объявлениях функций используются In, Out, Const, var.
Но как к примеру сделать такое ограничение для указателя?
Причем как для самого указателя так и для того объекта на который он ссылается.
Что лучше 1 или 2 вариант?
1)
Код:
Port:out PInt;
Port:out ^ Int;
Port: ^ out Int;

2)
Код:
out WOPort: PInt;
out WOPort: ^Int;
WOPort: PWOInt;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 12 янв 2014, 14:46 

Зарегистрирован: 04 май 2011, 18:13
Сообщения: 121
Оба не нравятся. Тяжело читать.
Язык разрабатывается для человека. Транслятор любую билиберду захавает, но не человек.
Программы пишутся людьми и для людей.

Есть еще варианты?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 12 янв 2014, 18:31 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1314
Откуда: Зеленоград
pavia писал(а):
Для практической реализации требуется ограничить функционал "переменных". Я имею в виду наложить ограничения типа только чтение или запись. Такое может быть полезным для создания интерфейса при работе с портами в/в.
Интересует как такие ограничения реализуются в ada и других языках?


Никак, если говорить о просто переменных. В Аде можно определить типы, работа с которыми будет возможна исключительно через связанные с ними методы, даже присваивание и сравнение не смогут быть выполнены "в лоб". Такой подход в значительной мере позволяет решить эту задачу, но он не всегда удобен: одно дело, когда создаётся некая сложная структура данных, и совсем другое, когда сами по себе данные имеют простой тип, и надо лишь ограничить к ним доступ.

Цитата:
К примеру в объявлениях функций используются In, Out, Const, var


Это в Аде, естественно, есть. Параметры подпрограмм (процедур и функций) могут быть доступны только для чтения, только для записи, для чтения и записи; кроме того, возможна передача параметра через т.н. "тип доступа" (access type -- можно считать, что это указатель, хотя в ряде случаев он может отличаться от традиционных указателей других языков). Для нормальной работы этого хватает; единственное, что меня напрягает, -- это невозможность определить доступные для записи (или чтения и записи) параметры в функциях: мол, функция может возвращать результат только именно как функция, но не через параметры (хотя с помощью access-параметра вернуть, естественно, можно, но этот путь обхода такого ограничения мне не нравится).

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

MyVar : out MyType;

Помещать спецификатор перед именем переменной, а тип -- после имени будет неразумно: один из главных недостатков Си в плане читаемости заключается как раз в том, что там определяемое имя находится не на чётко определённом и легко доступном для глаза месте, а "плавает" по определению (простейший пример -- это объявление массива вроде int a[10], где имя переменной оказывается ровно посредине). Естественно, само объявление типа переменной тоже должно делаться в паскалевском стиле, а не сишном -- читаться строго слева направо, а не то в одну сторону, то в другую.

Цитата:
Но как к примеру сделать такое ограничение для указателя?


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 12 янв 2014, 22:36 

Зарегистрирован: 31 июл 2013, 09:40
Сообщения: 28
ИМХО.

Неудобство in и out в асме и других языках заключается в том, что код с ними читается плохо. Для меня, по крайней мере. Вроде, осознаешь, что и зачем, но мозг с ними медленнее соображает. Думаю, лучше вместо них заюзать read и write. Это как-то более по-человечески, если уж язык для людей делается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 13 янв 2014, 11:09 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 938
Откуда: Дагоба
Я тоже занят разработкой ЯВУ.
Моя точка зрения на данный вопрос такова: не нужно делать высокоуровневые конструкции для машинно-зависимых представлений. В т.ч. не нужно ограничивать способы доступа на переменные, т.к. это всё равно не решает проблемы. Не понимая сути портов компилятор вправе "соптимизировать" обращение к ним, поменяв порядок обращений или вообще выкинув лишние с его точки зрения обращения. Пишите функции in_port(...) и out_port(...) для работы с портами и обращайтесь только через них.

UPD
Чувствую, надо пояснить. Конечно можно сказать "пишите объявления volatile" или что-нибудь в этом духе. Однако это будет решение вопроса через ж... автогеном, не надёжное по психологии программиста, добавленное в спецификации языка ради очень узкого класса задач, в принципе не свойственных программированию на ЯВУ, и которые следует решать совершенно другими путями. Решение при помощи функций гарантирует 100% работу в данном случае без добавления новых фич.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 03 фев 2014, 02:26 

Зарегистрирован: 04 сен 2013, 21:56
Сообщения: 17
Если язык ОС тот же, что язык приложений под неё, то лучше Си ничего не придумали. Если язык ОС реализует интерпретатор для языка приложений куда более высокого уровня, то на Форте легко сообразить удобный лексикон для конкретных классов задач (максимум понятности для человека, недостижимый для универсальных ЯВУ).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 03 фев 2014, 11:28 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 938
Откуда: Дагоба
t0serg писал(а):
лучше Си ничего не придумали.

Во-первых, вы рискуете опять разжечь пустой холивар.
Во-вторых, даже независимо от вашего отношения к таким языкам, как Ада/Паскаль, в текущей формулировке необходимо важное дополнение: "к сожалению, лучше Си ничего не придумали". Конечно, при этом подразумевается, что под Си вы имеете ввиду C/C++.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 04 фев 2014, 10:00 

Зарегистрирован: 04 сен 2013, 21:56
Сообщения: 17
Уверен, достоинства и недостатки Си (подобных, производных) известны Вам не хуже, чем мне. На мой взгляд, все они идут от одного корня: неконтролируемая компиляция (непрограммируемая). Момент концептуальный - даже на чистом асме очень часто получают данные, забывают, получают снова и снова те же данные. Люди. Не задумываясь. Так было, есть и будет, увы. "To CUDA C and OpenCL programmers, GPUs are massively parallel numeric computing processors programmed in C with extensions." (Кирк и Хью)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 04 дек 2014, 05:01 
Аватара пользователя

Зарегистрирован: 28 май 2012, 23:44
Сообщения: 237
Откуда: Санкт-Петербург
Могу поделиться, как делаю в Канторе:
  • Свойства классов и параметры функций в обязательном порядке имеют права доступа: in, out или var. Доступ in не обозначается никаким ключевым словом, out и var -- ключевые слова, при этом var считается комбинацией in и out и не может участвовать в чистых функциях.
  • Ссылка -- это объект, который может принимать значение null. Без модификаторов все объекты not null. Ссылочность обозначется ключевым словом ref и является свойством конкретного параметра, функции, свойства или переменной. Ссылочные типы как понятие отсутствуют. Разыменование ссылки синтаксически неотличимо от обращения к обычному объекту, никаких дополнительных ключевых слов или символов не используется.

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

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

Разыменование ссылок также не вызывает вопросов:
Код:
  var five = 5;
  ref ptrToFive = five;
  ptrToFive++; // операций над ссылками в Канторе нет, поэтому five теперь равно 6

  var six = ptrToFive; // присвоение ссылки не ссылке интерпретируется как
                       // var six = new from ptrToFive;
                       // аналог конструктора копирования в Канторе
                       // вызовет исключение при разыменовании null

// Пример-ловушка
  var Core:Integer a;  // описывает ссылку, поскольку понятия неинициализированных переменных
                       // в Канторе нет, единственное умолчание -- это null, а null можно
                       // присвовить только ссылке

Скриншотик с подсветкой синтаксиса, как в этюдах:
Вложение:
Ссылки.png
Ссылки.png [ 3.39 КБ | Просмотров: 4397 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 29 мар 2015, 22:01 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1056
Цитата:
Недостаточная надёжность. Самый сложный процесс — поиск и исправление ошибок в программах на ЭВМ. Поскольку число ошибок в программах заранее неизвестно, то заранее неизвестна и продолжительность отладки программ и отсутствие гарантий отсутствия ошибок в программах. Следует отметить, что привлечение доказательного подхода к проектированию ПО позволяет обнаружить ошибки в программе до её выполнения. В этом направлении много работали Кнут, Дейкстра и Вирт. Профессор Вирт при разработке Паскаля и Оберона за счет строгости их синтаксиса добился математической доказуемости завершаемости и правильности программ, написанной на этих языках.
Данная проблема возникает при неправильном выборе средств разработки. Например, при попытке создать программу, требующую средств высокого уровня, с помощью средств низкого уровня. Например, при попытке создать средства автоматизации с СУБД на ассемблере. В результате исходный код программы получается слишком сложным и плохо поддающимся структурированию.

Из википедии. Может и не достоверно зато суть верная.

На заметку. Проблема ООП в том что трудно проверить или доказать исправность в виду наличия мутаций во время работы. Значит такие мутации надо свести к мнимому. Альтернативой могут служить макросы и подход форт машины. Которые осуществляют мутацию во время компилирования.
Разработать подходы и методы для доказательство правильности алгоритма в ходе мутаций времени компиляции. В качестве критерия выбрать скорость обнаружения ошибок.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу 1, 2, 3, 4  След.

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


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB