2014 dxdy logo

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

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




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

Формат:

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

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

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

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

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

Например:

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

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


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

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

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

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

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

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


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

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

 
 
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 19:50 
Аватара пользователя
Фигня это (не сама идея, а конкретно ваш подход). Wolfram Mathematica, например, давно поддерживает вычисления с единицами измерения куда более вменяемым образом.

 
 
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 19:54 
Аватара пользователя
Эта идея очень хорошая, во многих языках есть библиотеки для единиц измерения.

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

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

Ох, опоздал.

 
 
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:06 
Аватара пользователя
Xaositect в сообщении #896510 писал(а):
Это называется тип переменной.

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

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

 
 
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:07 
:facepalm:

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

 
 
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:09 
Аватара пользователя
Aritaborian в сообщении #896509 писал(а):
Wolfram Mathematica, например, давно поддерживает вычисления с единицами измерения куда более вменяемым образом.

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

-- 15.08.2014, 20:13 --

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

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

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

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

 
 
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:24 
Palex в сообщении #896519 писал(а):
Да просто легкость чтения и безопасность сопровождения - по Глассу и Горбунову-Посадову
Не вижу, как с этим связаны заявления
Palex в сообщении #896516 писал(а):
то с типами будет легче, что уменьшает таблицу классов
(связь неочевидна, и не обязательно существует вообще какая-то таблица классов) и
Palex в сообщении #896516 писал(а):
издевательство над выведением и проверкой типов

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

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

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

 
 
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:31 
Аватара пользователя
arseniiv в сообщении #896524 писал(а):
А ничего не упустил?
Я бы написал приблизительно то же самое.

 
 
 
 Re: Синтаксис языка - комментарий идентификатора
Сообщение15.08.2014, 20:39 
Аватара пользователя
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 
Аватара пользователя
Спасибо, но в отношении средней школы не сильно убедили
Предлагаемый вариант:
Код:

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 
Аватара пользователя
Ну так всей этой штуки с темплейтами пользователь не видит. Пользователь видит только 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 
У этого замечательного предложения есть только один изъян: при численном моделировании, использующем размерные параметры (любом, за исключением финансов), любой грамотный программист-вычислитель начнет с того, что обезразмерит задачу.

 
 
 [ Сообщений: 17 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group