Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - Berserker

Страницы: [1]
1
Общий раздел / C++ инициализация ссылок
« : Март 14, 2013, 04:55:01 pm »
Подскажите, пожалуйста, если есть знатоки.
Обыскал весь инет, везде твердится одно и то же: ссылки инициализируются единожды. Повторная установка невозможна.

Как тогда GNU C++ компилирует это:

for (size_t i = 0; i < scheta_.size(); i++)
{
  const Schyot &schyot = scheta_; // На каждой итерации разный объект
  ..
}

2
Неужели свершилось? В Госдуму внесли закон о запрете использования иностранных слов при наличии их аналогов в русском языке

Цитировать
«Зачем говорить «дилер», когда есть русское слово «посредник», перфоманс вместо представления – скоро у нас и английское произношение заставят делать», – констатировал Владимир Жириновский, его слова цитирует «Интерфакс». Также он отметил, что подобных примеров в современном языке можно найти огромное количество. Согласно разрабатываемому ЛДПР документу, работников, которые применяют иностранные слова, будут ждать штрафные санкции вплоть до увольнения с работы.

3
Общий раздел / Подсветка синтаксиса 1С на PHP
« : Ноябрь 17, 2012, 07:41:19 pm »
Размер: 30.9 KiB
Ссылка: Скачать
Демо: Перейти (Двойной щелчок по раскрашенному коду выделяет его)
Требования: PHP 5.3+, расширение Multibyte String.
Производительность: 2500 строк/сек. на Intel Pentium 4, 3.00 GHz, PHP 5.3.6, Windows XP.
Примеры раскраски: monokai, visual studio
Идея реализации: cyberforum.ru.

Особенности:
  • Работает с кодировкой Windows-1251. Может понадобиться обёртка для преобразования в/из Windows-1251 до раскраски и после.
  • Полностью поддерживается двуязычность.
  • Используется лексический анализатор, а не регулярные выражения.
  • Подсветка следующих видов лексем: строка, комментарий, число, идентификатор, зарезервированное слово, имя новой функции, глобальный идентификатор, метка, директива компиляции, инструкция препроцессора, дата, оператор, неизвестный символ.
  • Распознаются все идентификаторы глобального контекста языка 1С, а также встроенные функции и ряд типов данных. Различаются встроенные функции и пользовательские переменные с такими же именами.
  • Настройка раскраски осуществляется средствами css.
  • Код разметки очень компактный за счёт использования сокращённых имён классов: a0..z9. Возможно использование пользовательских имён классов.
  • Есть возможность преобразования табов в фиксированное количество пробелов или использование умных отступов (smart indentation).
  • Возможность не подсвечивать обычные идентификаторы снижает размер итогового HTML кода в ~2.5 раза.

Пример использования:
Код: (php) [Выделить]
require_once('1c.php');
$H = new B2Lib\Highlighter1C();
echo($H->Highlight($Code));

Настройка раскраски:
  • У экземпляров класса B2Lib\Highlighter1C есть ряд настраиваемых параметров:
    • $TabsToSpaces  = true; // Заменять ли табы пробелами
    • $TabSize  = 4; // Количество пробелов в табе: 0..32
    • $SmartIdent  = false; // Умный отступ: динамический размер табов
    • $MarkIdents  = false; // Подсвечивать ли обычные идентификаторы
    • $Styles  = array(...); // Массив имени стиля => имени класса css
  • Доступные имена стилей: string, comment, number, ident, resword, function, global_ident, label, directive, preprocess, date, operator, char
  • Статические массивы (имя => true) $ResWords, $GlobalIdents и $GlobalFuncs доступны для пополнения новыми идентификаторами

Содержимое архива highlighter_1c.rar:
  • src\ - Содержит исходные коды модулей раскраски
  • monokai.css - Пример шаблона раскраски
  • visual studio.css - Пример шаблона раскраски
  • example_monokai.html - Пример раскраски
  • example_visual_studio.html - Пример раскраски
  • index.html - Форма для демонстрации
  • template.html - Шаблон странички, генерируемой демо-скриптом
  • 1c.php - Объединённые в один файл модули раскраски
  • highlight.php - Демонстрационный скрипт

4
Общий раздел / Странный импорт
« : Август 20, 2012, 03:08:32 pm »
Подскажите, чем продиктована возможность импорта одного и того же модуля под разными именами и не является ли она ошибочной?

IMPORT w:=StdLog, r:=StdLog, q:=StdLog;

5
Общий раздел / Сообщение о языке
« : Июнь 06, 2012, 08:07:41 pm »
Подскажите пожалуйста, где в сообщении о языке "Компонентный Паскаль" регламентируется порядок секций (CONST, TYPE, VAR, PROCEDURE) и их количество. Потому как после первой объявленной процедуры любая другая секция вызывает ошибку.

6
Хорошо повышать надёжность языка, убирая из него потенциально опасные возможности. Впорос: почему в Обероне не запретили использовать несколько подряд идущих операторов? Тогда не нужно извращаться со сменой знаков (AND - &, OR - |) и результат всегда очевиден. Оберон ещё ладно, а вот то, что в остальных языках творится...
Лично я никогда не заучивал приоритеты операций для очередного языка Х. Использую скобки. Считаю приоритеты анахронизмом и потворством лени.

7
Столкнулся с забавной проблемой во время написания кода на Delphi. Связана она с тем, что в методах класса все поля и методы класса перекрывают другие идентификаторы с такими же именами. Обратиться к идентификаторам этого же модуля точно можно используя полную нотацию: ModuleName.IdentName. Дело становится хуже, если обратится нужно к одному из модулей в секции USES. И вот почему.

Класс TForm (диалоговое окно) имеет поле Controls - дочерние контролы. С другой стороны, есть и используется одноимённый модуль Controls, из которого, нам, например, нужна пара констант. В результате Controls, Self.Controls указывает на поле, ModuleName.Controls выдаёт ошибку об отсутствии идентификатора Controls. То есть указать полное имя константы становится невоможным.

Решение найдено в обходном путе.

UNIT ModuleName;
USES ..., Controls;
...
CONST mbLeft = Controls.mbLeft;
...
...ModuleName.mbLeft...

то есть в импорте константы, а вернее создании её синонима.

PS. Если же у объекта будет ещё и поле, совпадающее с именем текущего модуля, то результат будет крайне плачевным. Из чего делаю вывод, что автоматический импорт идентификаторов в текущую область видимости есть зло, которого, к счастью, нет в Оберонах.

8
Общий раздел / Идеальный ЯП
« : Февраль 26, 2011, 03:28:42 pm »
Хочу поделиться с записями, сделанными на начало прошлого года и содержащими идеи на тему, какими фичами должен обладать ЯП, условно приближенный к идеальному.
-) Все входные аргументы подпрограмм подлежат обязательной проверке assert-подобным выражением.

Код: (delphi) [Выделить]
procedure WriteChar
(
  x: int; Math.InRange(x, 0, WndWidth - 1);
  y: int; Math.InRange(y, 0, WndHeight - 1);
  col: str; ANY;
)
Смысл: координаты должны быть в рамках окна, а строка цвета - любой.

Особенности:
- Объявление одного аргумента - одна строка.
- Аргумент отделяется от охраны символом ";"
- Охрана - обычное логическое выражение. Если оно включает подпрограммы, то те не должны рекурсивно ссылаться на объявляемую подпрограмму.
- Константа ANY = TRUE.

Дополнение:
Так как охрана может быть сложной и писать её полностью может быть затруднительно, неплохим вариантом видится введение соглашений (см.  Соглашения).

-) Именованные параметры.
При вызове подпрограммы должны указываться пары: имя параметра ":" значение.

Код: (delphi) [Выделить]
WriteChar(x: 3; y: 4; col: 'black');! Исключение: если переменная/константа имеет то же имя, что и параметр, то может указываться просто имя параметра:
WriteChar(x, y, col: 'red');

-) Опциональные параметры.
Параметры, которые могут быть опущены при вызове. При этом в теле подпрограммы будут находиться проверки компилятора на проинициализированность подобных аргументов.

Код: (delphi) [Выделить]
procedure WriteChar
(
  x: ...
  y: ...
  optional Col: string; ANY; (* охрана типа осуществляется только, если аргумент инициализирован *)
)
{
  ...
  if !IsSet(Col)
  {
    Col := Console.Col;
  }
}
IsSet - проверяет, установлен ли аргумент. Прямое присваивание значения аргументу автоматически устанавливает его.

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

Код: (delphi) [Выделить]
function Random
(
  Min: int = 0; Min >= 0; (* охрана сработает всегда *)
  Max: int = 99; Max >= Min; (* охрана сработает всегда *)
): int;

-) Аргументы по ссылке:
- in - после вызова переменная получает статус Unknown (равносильно неинициализированности)
- out - внутри подпрограммы имеет начальный статус Unknown
- inout - аналог var

-) Язык со сборкой мусора.

-) procedure и function для логического разделения подпрограмм. () после имени обязательно.

-) Обязательное присвоение значений переменным при объявлении с необязательной охраной.

Код: (delphi) [Выделить]
VAR
  AbsX: int = x + Con.Window.x1; AbsX in [0; Con.Width - 1];
-) Записи-константы и записи, создаваемые на лету.

Код: (pascal) [Выделить]
coords := (x: MyX, y); (* Заметьте, "y" не указывается два раза, та как имя переменной совпадает с именем поля в записи *)-) Опциональные поля записей.

Код: (pascal) [Выделить]
Cell = record
  optional Opacity: float = 1.0; (* прозрачность ячейки *)
end;
-) Обязательное присвоение значений полям записи.

Код: (delphi) [Выделить]
TCoord = record
  x: int = -1;
  y: int = -1;
end;
-) Соглашения.
Служат для точного указания особенностей подпрограмм.
Пусть соглашение - логическая функция.
Пусть часть функций работает с абсолютными координатами консоли, а другая с относительными (относительно границ логически подокна).

Код: (delphi) [Выделить]
convention  (Con: TConsole) UsesRelativeCoords ()
(
  x: int;
  y: int;
)
{
  result := Math.InRange(x, Con.WndWidth - 1) and Math.InRange(y, Con.WndHeight - 1);
}

procedure WriteChar
(
  x: int; ANY;
  y: int; ANY;
  Ch: char; ANY;
); UsesRelativeCoords;

{
  ...
}
Те аргументы, которые указанны в соглашении, обзяаны быть и в подпрограммах, использующих эти соглашения.


Страницы: [1]