2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 19:24 
Аватара пользователя


12/08/14

111
Республика Коми, г.Ухта
Предложение по комментарию, который предполагается использовать в любом контексте
Текст комментария может использоваться IDE и средой исполнения, а единицы измерения - проверяться на арифметику

Формат:

Код:
идентификатор\[описание измерителей СИ:описание единицы измерения]текст комментария идентификатора\

описание измерителей СИ:

числитель/знаменатель

При этом измерители СИ записываются в алфавитном порядке
количество символов измерителей соответствует степени данного измерителя

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

Например:

Код:
частота\[/T:/с] Гц\
длина\[L/:м] метр\
скорость \[L/T:м/с] метр в секунду (\
ускорение_мяча \[L/TT:м/с с] вертикальное ускорение мяча - метр в секунду за секунду\
может использоваться знак рациональной дроби -/- для указания отображения в виде дроби при выводе

Код:
ускорение \[L/TT:м-/-с с] ускорение мяча - метр в секунду за секунду\


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

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

Конкретные единицы измерения разделяются пробелами

Указание дробной черты для национального обозначения единицы измерения не является обязательным

Безразмерная величина в стандартной форме выглядит таким образом:

Код:
идентификатор \[/:] текст комментария\


При этом комментарии должны поддерживаться средой исполнения, а единицы измерения - анализироваться средой разработки

Какие опровержения есть для такого представления комментариев?

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 19:50 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Фигня это (не сама идея, а конкретно ваш подход). Wolfram Mathematica, например, давно поддерживает вычисления с единицами измерения куда более вменяемым образом.

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 19:54 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Эта идея очень хорошая, во многих языках есть библиотеки для единиц измерения.

Единственное, что если информация анализируется компилятором и ограничивает операции с переменными (например, длину можно складывать только с длиной) - то это называется не комментарий. Это называется тип переменной.

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 19:56 
Заслуженный участник


27/04/09
28128
1. Единицы измерения могут вполне входить и в тип переменной, если объявления типов в языке есть.
2. Бессмысленно ограничиваться описанием только единиц измерения и единиц измерения именно СИ.
0. Чересчур конкретно без повода — эта конкретизация отчасти тривиальна, если выбран конкретный синтаксис конструкции, и отчасти необоснована вместе с синтаксисом. По существу вы предложили анализировать комментарии среде разработки и указывать размерности — всё это уже не ново — но ещё и осложнили специфическими деталями, которые никому не нужны, т. к. в конкретный язык могут не подойти из-за особенностей синтаксиса или такой фиксированной семантики.

Ох, опоздал.

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:06 
Аватара пользователя


12/08/14

111
Республика Коми, г.Ухта
Xaositect в сообщении #896510 писал(а):
Это называется тип переменной.

Вот-вот! Библиотека типов растет бесполезно!
А вот если компилятор вынесет это в ресурсы, то с типами будет легче, что уменьшает таблицу классов.

А уж при отсутствии множественного наследования получить километры в час из метров и секунд - бесперспективное издевательство над выведением и проверкой типов.

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:07 
Заслуженный участник


27/04/09
28128
:facepalm:

У вас какие-то странные критерии удобства всё-таки.

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:09 
Аватара пользователя


12/08/14

111
Республика Коми, г.Ухта
Aritaborian в сообщении #896509 писал(а):
Wolfram Mathematica, например, давно поддерживает вычисления с единицами измерения куда более вменяемым образом.

Не опишите идею в общих чертах?
Извиняюсь, что к Вам, а не к литературе, но Вы можете описать "лучшесть вменяемости"

-- 15.08.2014, 20:13 --

arseniiv в сообщении #896517 писал(а):
У вас какие-то странные критерии удобства всё-таки.

Да просто легкость чтения и безопасность сопровождения - по Глассу и Горбунову-Посадову

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:18 
Заслуженный участник


27/04/09
28128
В качестве единиц измерения используются символы — например, Meter и Second, и потом, благодаря символьным вычислениям, всё остальное происходит автоматически. Приставки СИ можно тоже, записывая через пробел с единицами, определить соответствующими числами (таким образом там уже определён градус °, равный $\pi/180$). Некоторые символы-единицы тоже можно определить как выражения из каких-то других единиц. Проверка на корректность сумм довольно просто пишется (может, даже тривиально, если я что-то забыл); математические функции тоже не будут вычисляться от значений вида 2 Second.

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:22 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
arseniiv, спасибо, что ответили за меня ;-)

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:24 
Заслуженный участник


27/04/09
28128
Palex в сообщении #896519 писал(а):
Да просто легкость чтения и безопасность сопровождения - по Глассу и Горбунову-Посадову
Не вижу, как с этим связаны заявления
Palex в сообщении #896516 писал(а):
то с типами будет легче, что уменьшает таблицу классов
(связь неочевидна, и не обязательно существует вообще какая-то таблица классов) и
Palex в сообщении #896516 писал(а):
издевательство над выведением и проверкой типов

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

-- Пт авг 15, 2014 23:24:53 --

Aritaborian в сообщении #896522 писал(а):
arseniiv, спасибо, что ответили за меня ;-)
А ничего не упустил?

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:31 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
arseniiv в сообщении #896524 писал(а):
А ничего не упустил?
Я бы написал приблизительно то же самое.

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:39 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Palex в сообщении #896516 писал(а):
Вот-вот! Библиотека типов растет бесполезно!
Чем больше типов, тем лучше. Чем больше объектов система типов позволяет различить, чем больше полезной информации компилятор сможет программисту выдать.

Palex в сообщении #896516 писал(а):
А уж при отсутствии множественного наследования получить километры в час из метров и секунд - бесперспективное издевательство над выведением и проверкой типов.
Да что там сложного-то? Вот, например, C++:
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
//=========
//units.hpp
//=========

#ifndef UNITS_HPP_INCLUDED
#define UNITS_HPP_INCLUDED

namespace units
{

template <int L, int T, int M>
struct Unit
{
  double value;
  double coeff;

  Unit<L, T, M> (double value)
  {
    this->value = value;
    this->coeff = 1;
  }

  Unit<L, T, M> (double value, double coeff)
  {
    this->value = value;
    this->coeff = coeff;
  }

  Unit<L, T, M> (double value, const Unit<L, T, M> & unit) {
    this->value = value;
    this->coeff = unit.coeff;
  }

  Unit<L, T, M> (const Unit<L, T, M> & quantity) {
    this->value = quantity.value;
    this->coeff = quantity.coeff;
  }

  Unit<L, T, M> & convert(const Unit<L, T, M> & unit) {
    value = value * coeff / unit.coeff;
    coeff = unit.coeff;
    return (*this);
  }

  Unit<L, T, M> & operator= (const Unit<L, T, M> & other) {
    this->value = other.value;
    this->coeff = other.coeff;
    return (*this);
  }
};

template <int L, int T, int M>
Unit<L, T, M> operator+ (const Unit<L, T, M> & a, const Unit<L, T, M> & b)
{
  Unit<L, T, M> result(a);
  result.value += b.value*b.coeff/a.coeff;
  return result;
}

template <int L, int T, int M>
Unit<L, T, M> operator- (const Unit<L, T, M> & a, const Unit<L, T, M> & b)
{
  Unit<L, T, M> result(a);
  result.value -= b.value*b.coeff/a.coeff;
  return result;
}

template <int La, int Ta, int Ma, int Lb, int Tb, int Mb>
Unit<La + Lb, Ta + Tb, Ma + Mb> operator* (const Unit<La, Ta, Ma> & a, const Unit<Lb, Tb, Mb> & b)
{
  Unit<La + Lb, Ta + Tb, Ma + Mb> result(a.value * b.value);
  result.coeff = a.coeff * b.coeff;
  return result;
}

template <int La, int Ta, int Ma, int Lb, int Tb, int Mb>
Unit<La - Lb, Ta - Tb, Ma - Mb> operator/ (const Unit<La, Ta, Ma> & a, const Unit<Lb, Tb, Mb> & b)
{
  Unit<La - Lb, Ta - Tb, Ma - Mb> result(a.value / b.value);
  result.coeff = a.coeff / b.coeff;
  return result;
}

typedef Unit<1, 0, 0> Length;
typedef Unit<0, 1, 0> Time;
typedef Unit<1, -1, 0> Speed;

static const Length meter(1.0);
static const Time second(1.0);
static const Length kilometer(1.0, 1000.0);
static const Time hour(1.0, 3600.0);

}

#endif


//========
//main.cpp
//========

#include "units.hpp"

#include <iostream>

using std::cout;
using std::endl;
using namespace units;

int main()
{
  Length l(10.0, meter);
  Time t(3.0, second);
  Speed v = l / t;
  v.convert(kilometer/hour);
  cout << v.value << endl;
}
 

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 21:08 
Аватара пользователя


12/08/14

111
Республика Коми, г.Ухта
Спасибо, но в отношении средней школы не сильно убедили
Предлагаемый вариант:
Код:

public measure
{
    [L/м];
    [/T:с];
    [L/:км] ::= [L/:м] * 1000.;
    [/T:ч] ::= [/T:с] * 3600;
}

public real вычислить_скорость_катера\[L/T:м/с]вычисление скорости по расстоянию и времени\
   (расстояние, время)

    real расстояние\[L/:км] пройденное расстояние в километрах\;
    real время\[T/:ч] время движения в часах

{
    local real скорость\[L/T:м/c] скорость в метрах в секунду\;
    скорость := расстояние/время;
    return скорость;
}

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 21:13 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Ну так всей этой штуки с темплейтами пользователь не видит. Пользователь видит только main.cpp, то есть
Код:
int main()
{
  Length l(10.0, meter);
  Time t(3.0, second);
  Speed v = (l / t).convert(kilometer/hour);
  cout << v.value << endl;
}

 Профиль  
                  
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 23:42 
Заслуженный участник


09/05/12
25179
У этого замечательного предложения есть только один изъян: при численном моделировании, использующем размерные параметры (любом, за исключением финансов), любой грамотный программист-вычислитель начнет с того, что обезразмерит задачу.

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

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group