включение кодировки UTF-8 для clojure исходных файлов

Проблема состоит в том, что с целым числом, компилятор обычно никогда не должен создавать адрес памяти для константы. Это не существует во времени выполнения, и каждое использование его встраивается в окружающий код. Это может все еще решить дать ему ячейку памяти - если ее адрес когда-либо берется (или если это передается ссылкой константы на функцию), что это должно. Чтобы дать ему адрес, это должно быть определено в некоторой единице перевода. И в этом случае, необходимо разделить объявление от определения, так как иначе это определить в нескольких единицах перевода.

Используя g ++ без оптимизации (-O0), это автоматически встраивает постоянные целочисленные переменные, но не постоянные двойные значения. На более высоких уровнях оптимизации (например, -O1), это встраивает постоянный, удваивается. Таким образом следующий код компилирует в -O1, но НЕ в -O0:

// File a.h
class X
{
 public:
  static const double d = 1.0;
};

void foo(void);

// File a.cc
#include <stdio.h>

#include "a.h"

int main(void)
{
  foo();
  printf("%g\n", X::d);

  return 0;
}

// File b.cc
#include <stdio.h>

#include "a.h"

void foo(void)
{
  printf("foo: %g\n", X::d);
}

Командная строка:

g++ a.cc b.cc -O0 -o a   # Linker error: ld: undefined symbols: X::d
g++ a.cc b.cc -O1 -o a   # Succeeds

Для максимальной мобильности, необходимо объявить константы в заголовочных файлах и определить их однажды в некотором исходном файле. Без оптимизации это не повредит производительность, так как Вы не оптимизируете так или иначе, но с включенной оптимизацией, это может повредить производительность, так как компилятор больше не может встраивать те константы в другие исходные файлы, если Вы не включаете "целую оптимизацию программы".

13
задан RD. 16 September 2009 в 15:16
поделиться

5 ответов

Вы пробовали передавать параметры компилятора ? [-кодирование UTF-8]

1
ответ дан 2 December 2019 в 02:23
поделиться

Обновление: судя по вашим комментариям, это проблема времени выполнения, а не компиляции. В качестве обходного пути вы можете попробовать экранировать символ как Unicode.

т.е. изменить символ на '\ uXXXX' в файле clojure, где XXXX - это точка Unicode в шестнадцатеричном формате.

Если ваша проблема возникает в вашем устройстве тесты. Вы можете настроить плагин surefire, установив свойство argLine . Это позволяет вам устанавливать произвольные параметры JVM в командной строке.

1
ответ дан 2 December 2019 в 02:23
поделиться

Вы установили параметр через подключаемый модуль компилятора следующим образом?

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <compilerArgument>-Dfile.encoding=UTF8</compilerArgument>
    </configuration>
  </plugin>
</plugins>
0
ответ дан 2 December 2019 в 02:23
поделиться

Учитывая тот факт, что Clojure на самом деле жестко кодирует ожидаемую кодировку входных файлов в UTF8 (см. Src / jvm / clojure / lang / Compiler.java, loadFile -метод), Я удивлен, что использование file.encoding действительно имеет какой-либо эффект.

0
ответ дан 2 December 2019 в 02:23
поделиться

Попробуйте добавить это свойство для вашей помпы UTF-8

0
ответ дан 2 December 2019 в 02:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: