Вниз  C / C++
- 19.12.2015 / 08:34
mrEDitor
  Пользователь

mrEDitor 
Сейчас: Offline
К тому, что происходило в Java-теме и о передаче массивов в С/С++:
Передача массива по указателю – единственный способ передать массив в C/C++:
  1. void f(int arr[]) {
  2.     arr[2] = 9;
  3. }
  4.  
  5. int main() {
  6.     int arr[] = { 5, 6, 7, 8 };
  7.     cout << arr[2] << ' ';
  8.     f(arr);
  9.     cout << arr[2];
  10.  
  11.     return 0;
  12. }
Вывод: 7 9
При этом объявление аргумента как const int выдаст ошибку компиляции как изменение константного объекта; чтение будет по-прежнему возможно. Ещё есть относительно замечательная функция memcpy, которой можно скопировать область памяти (а вдруг?). Очень интересно, что подразумевалось под передачей массива по указателю, неужели что-то такое:
  1. void f(int& a) {
  2.     int* arr = &a;
  3.     arr[2] = 9;
  4. }
  5.  
  6. int main() {
  7.     int arr[] = { 5, 6, 7, 8 };
  8.     cout << arr[2] << ' ';
  9.     f(*arr);
  10.     cout << arr[2];
  11.  
  12.     return 0;
  13. }

А понятие "массив" существует в C/C++ где-то на уровне понятия "строка", он как бы есть, но он – не то, чем кажется.

Изменено mrEDitor (19.12 / 08:35) (всего 2 раза)
- 19.12.2015 / 09:19
Khorrth
  Пользователь

Khorrth 
Сейчас: Offline
Я сейчас как раз читаю про массивы в С++... Сложная тема, однако...
Кстати, а как можно собрать готовый пакет (включая графику и все остальное), чтобы при установке он требовал библиотеку SFML в качестве зависимости?

Изменено Khorrth (19.12 / 09:21) (всего 1 раз)
- 19.12.2015 / 09:54
Oak
  Пользователь

Oak 
Сейчас: Offline
Цитата Khorrth:
Ой, Java - это тоже отдельная история. Я в последнее время очень сильно ругаюсь на ее "кросс-платформенность". " Написано однажды - работает везде" в последнее время лживо. У языка
Этот пост — помесь всевозможной лжи. Dalvik и ART не являются JVM, и именно поэтому оракл с Google судиться. J2ME — отдельная тема, уже давно забытая.

Вторая часть твоего поста (про легкость кросскомпиляции нативного кода) еще более неверна. https://github.com/mattico/rustyjit/blob/master/src/main.rs — для unix систем и win используется различный код.
__________________
 Эль Презеденте

Изменено Oak (19.12 / 09:57) (всего 1 раз)
- 19.12.2015 / 11:47
Khorrth
  Пользователь

Khorrth 
Сейчас: Offline
Да, но и для разных виртуальных машин - тоже разный код получается. Вот только Unix и Windows - две платформы, а этих ВМ - тысячи их. Да, Dalvik и ART - не JVM. Но для них пишут на Java. При чем, насколько я знаю, на Java 1.6. J2ME - Java 1.4. Java SE - Java 8. При чем back-end-совместимость есть, но на Java SE просто так код J2ME не запустишь. Dalvik - вообще имеет другой формат байт-кода и ни с чем не совместим... Кому оно нужно, если можно использовать нативные языки и не будет никаких проблем...

Изменено Khorrth (19.12 / 11:50) (всего 1 раз)
- 19.12.2015 / 12:04
aRiGaTo
  Пользователь

aRiGaTo 
Сейчас: Offline
Khorrth, подожди-подожди. Мир далеко не ограничивается Unix-based, Windows и Android. С «нативной компиляцией» всё не так гладко, как ты думаешь. Есть десятки языков ассемблера. Процессоры тоже бывают разными - про архитектуры же слышал? Разные разрядности, разные системы команд. Да даже популярные процессоры на x86 и x86-64 могут... Отличаться из-за всевозможных расширений (SSE, 3DNow, MMX, FPU, etc). Можешь у @NaruTrey спросить о том, как весело компилить под NES с её сотнями мапперов.
__________________
 don't tread on me
- 19.12.2015 / 12:36
Khorrth
  Пользователь

Khorrth 
Сейчас: Offline
Это я понимаю. Только виртуальных машин еще больше чем платформ при том, что они не на все портированы. ВМ буквально каждого телефона с J2ME отличается.
- 19.12.2015 / 12:37
Oak
  Пользователь

Oak 
Сейчас: Offline
Khorrth, Android — Java 7, Java 2 Me — Java 1.3. Совместимость не бекенд а обратная (backwards), на Java SE код J2ME не запустится потому что там была библиотека MIDP с языком это не связано.

Да, но и для разных виртуальных машин - тоже разный код получается. Это откровенная ложь и незнание Java окружения. Не зря существует JVM Specification от Oracle (Sun).

На Android пишут на языке Java, но Java и JVM — разные вещи.

В общем говоря, люди перешли на языки с ВМ вовсе не потому, что "можно использовать нативные языки и не будет никаких проблем..."
__________________
 Эль Презеденте

Изменено Oak (19.12 / 12:38) (всего 1 раз)
- 19.12.2015 / 12:49
Khorrth
  Пользователь

Khorrth 
Сейчас: Offline
J2ME - 1.4. Это на моем телефоне, проверено точно. Не только: на Java SE не запустится код потоиму, что он распространяется в виде MIDlet'ов и для их установки/запуска нужно AMS соответсвующее. Про отличия CVM и KVM не знаю, но, возможно, это тоже роль играет.
Да, язык и ВМ - разные вещи. Я сам юзал Scala, Groovy, видел MIDletPascal, GPCP и так далее.
Кросс-платформенность языков с ВМ сомнительна. Почему бы не юзать кросс-платформенные библиотеки?
Про безопасность ничего не знаю. Я пока еще не успел напороться на какие-то грабли в С++.
- 19.12.2015 / 13:30
Oak
  Пользователь

Oak 
Сейчас: Offline
Khorrth, Не только: на Java SE не запустится код потоиму, что он распространяется в виде MIDlet'ов и для их установки/запуска нужно AMS соответсвующее. Это абсолютная глупость.

Почему бы не юзать кросс-платформенные библиотеки?Наверное, потому что их нет?
__________________
 Эль Презеденте

Изменено Oak (19.12 / 13:31) (всего 1 раз)
- 19.12.2015 / 13:46
Khorrth
  Пользователь

Khorrth 
Сейчас: Offline
1. Не глупость. Там же нет обычного public static void main(...)... Там MIDlet.startApp();
Еще не понятна сиьуация с JNI. В J2ME его юзать нельзя, но там в API как раз оно и юзается %( А в Java SE - можно.
2. Серьезно? А те же самые Qt, GTK, SDL, SFML?
Наверх  Всего сообщений: 2777
Фильтровать сообщения
Поиск по теме
Файлы топика (111)