LINUX.ORG.RU

История изменений

Исправление Xenius, (текущая версия) :

вот смотри, такой код

Не компилируется.

In function `_start': ... csu/../sysdeps/x86_64/elf/start.S:109: undefined reference to `main'
collect2: ld returned 1 exit status

Почему у тебя _tmain вместо main и какой-то _TCHAR вместо char?

ta-filetest.cpp:1:20: fatal error: stdafx.h: No such file or directory
compilation terminated.

После исправления — опять какой-то нестандарт.

После убирания заголовка:

ta-filetest.cpp: In function ‘int main(int, char**)’:
ta-filetest.cpp:7:16: warning: deprecated conversion from string constant to ‘char*’

Но всё-таки работает.

Результат: созданы файлы, причем оба - в юникодной кодировке. При русской локали совместимость - полная

Совместимость с GNU/Linux не полная, так как добавлена несовместимая фигня, которую пришлось убирать. Без неё бы не работало? Почему?

Вот ты говоришь о совместимости со старыми программами — значит надо было так делать, чтоб старые программы, написанные для UNIX компилировались без изменений в коде и работали даже с нативными символами, если они не применяют манипуляций со строками.

Можно. Осталось только научить ею пользоваться кучу legacy-софта, давно не поддерживаемого и проприетарного, но необходимого некоторым

Зачем? Есть же «режим совместимости». Если он включен — выбирается таблица ANSI в тех же настройках, причём возможно разная для разных приложений. Если выключен — по умолчанию выбирается CP_UTF8 и приложения, работающие с юникодом в линуксе компилируются и работают без изменений.

Если пишется новая версия приложения — переписать придётся только строковые операции, а всё остальное остаётся без изменений.

Выбранный же мелкомягкими метод с UTF16 требует не только изменить строковые операции, но ещё заменить все вызовы API, чтоб перейти на него и несовместим с POSIX. То есть однозначно хуже чем CP_UTF8

Исправление Xenius, :

вот смотри, такой код

Не компилируется.

In function `_start': ... csu/../sysdeps/x86_64/elf/start.S:109: undefined reference to `main'
collect2: ld returned 1 exit status

Почему у тебя _tmain вместо main и какой-то _TCHAR вместо char?

ta-filetest.cpp:1:20: fatal error: stdafx.h: No such file or directory
compilation terminated.

После исправления — опять какой-то нестандарт.

После убирания заголовка:

ta-filetest.cpp: In function ‘int main(int, char**)’:
ta-filetest.cpp:7:16: warning: deprecated conversion from string constant to ‘char*’

Но всё-таки работает.

Результат: созданы файлы, причем оба - в юникодной кодировке. При русской локали совместимость - полная

Совместимость с GNU/Linux не полная, так как добавлена несовместимая фигня, которую пришлось убирать. Без неё бы не работало? Почему?

Вот ты говоришь о совместимости со старыми программами — значит надо было так делать, чтоб старые программы, написанные для UNIX компилировались без изменений в коде и работали даже с нативными символами, если они не применяют манипуляций со строками.

Можно. Осталось только научить ею пользоваться кучу legacy-софта, давно не поддерживаемого и проприетарного, но необходимого некоторым

Зачем? Есть же «режим совместимости». Если он включен — выбирается таблица ANSI в тех же настройках, причём возможно разная для разных приложений. Если выключен — по умолчанию выбирается CP_UTF8 и приложения, работающие с юникодом в линуксе компилируются и работают без изменений.

Если пишется новое приложение — переписать придётся только строковые операции, а всё остальное остаётся без изменений.

Выбранный же мелкомягкими метод с UTF16 требует не только изменить строковые операции, но ещё заменить все вызовы API, чтоб перейти на него и несовместим с POSIX. То есть однозначно хуже чем CP_UTF8

Исходная версия Xenius, :

вот смотри, такой код

Не компилируется.

In function `_start': ... csu/../sysdeps/x86_64/elf/start.S:109: undefined reference to `main'
collect2: ld returned 1 exit status

Почему у тебя _tmain вместо main и какой-то _TCHAR вместо char?

ta-filetest.cpp:1:20: fatal error: stdafx.h: No such file or directory
compilation terminated.

После исправления — опять какой-то нестандарт.

После убирания заголовка:

ta-filetest.cpp: In function ‘int main(int, char**)’:
ta-filetest.cpp:7:16: warning: deprecated conversion from string constant to ‘char*’

Но всё-таки работает.

Результат: созданы файлы, причем оба - в юникодной кодировке. При русской локали совместимость - полная

Совместимость с GNU/Linux не полная, так как добавлена несовместимая фигня, которую пришлось убирать. Без неё бы не работало? Почему?

Вот ты говоришь о совместимости со старыми программами — значит надо было так делать, чтоб старые программы, написанные для UNIX компилировались без изменений в коде и работали даже с нативными символами, если они не применяют манипуляций со строками.

Можно. Осталось только научить ею пользоваться кучу legacy-софта, давно не поддерживаемого и проприетарного, но необходимого некоторым

Зачем? Есть же «режим совместимости». Если он включен — выбирается таблица ANSI в тех же настройках, причём возможно разная для разных приложений. Если выключен — по умолчанию выбирается CP_UTF8 и приложения, работающие с юникодом в линуксе компилируются и работают без изменений.

Если пишется новое приложение — переписать придётся только строковые операции, а всё остальное остаётся без изменений.

Выбранный же мелкомягкими метод с UTF16 требует не только изменить строковые операции, но ещё заменить все вызовы API, чтоб перейти на него и несовместим с POSIX. То есть однозначно хуже чем CP_UTF8