Какая прелесть. ARM
тихой сапой добавил явовские байткоды в качестве еще одной ISA. (у них уже и так было две) Поскольку ARM просто везде, можно с уверенностью говорить, что никакой Явовской виртуальной машины вне пределов совсем "взрослых" писюков и рабочих станций уже нет - нелепая архитектура явовской машины канонизорована "в железе"! Фу
(
Read more... )
JITу сложные адресации не нужны. Он переводит стековый код в нормальный трехадресный, а потом его компилирует.
Аппаратная Java хороша для систем с маленькой памятью. Каковыми являются все встраиваемые системы :-).
Reply
Reply
Reply
Reply
Reply
Всё же ряд решений, принятых в своё время в C, оказался источником длительных головных болей: null-terminated strings (любимый источник дыр через stack overflow), headers вместо нормальных модулей, отсутствие явного boolean... Эх.
Reply
Я бы в раздел головных болей записал бы скорее фундаментальную склонность к memory aliasing, негуманный синтакс функциональных поинтеров, непонятки с функциями, возвращающими аггрегатные структуры данных и, раз мы уж претендуем на замену ассемблера, синтаксическая невозможность напрямую манипулировать отдельные биты даже на архитектурах, которые такие вещи допускают.
Reply
Беда прямого использования int как boolean мне видится в основном в том, что "a = 1" становится логическим выражением, равноправным с "a == 1". В ООП это решается тем, что зовётся какой-нибудь a.toBoolean(), и можно продолжать спокойно писать "if (a) {...}", не напрягаясь про нечаянное "a = 1".
Memory aliasing, я так понимаю, неизбежен и в ассемблере.
Про синтаксис указателей на функции согласен. Туда же type cast, туда же typedef (хотя он не столь ужасен). В общем, хак на хаке. Для себя писали, а вышло публичным.
Отдельными битами можно рулить в структурах, как я помню. Хотя ты, похоже, имел в виду что-то вроде i432 ;)
Reply
Reply
Про ассемблер я ступил: там же нет scope, о котором думает компилятор.
Имелась в виду iAPX 432, у которой, по воспоминаниям из читанной в древности книжки, была адресация даже отдельных бит, поскольку доступ ко всему там тщательно контролировался железом. Пока статья в википедии этого не подтверждает.
Теоретически можно сделать struct с числом bit fields по числу нужных бит, и везде использовать его. Но возникает проблема - надо к нему кастить, надо помнить про порядок бит в памяти, в общем, тоже недодумано.
Reply
Reply
Почему, кстати, массовый параллелизм для бедных-то? Можно же и "обычный" запрячь, как в GPU, наверное? Сделать юниты достаточно большими и умными, чтобы компилятору не приходилось думать совсем обо всём, на уровне каждого бита переноса. А то будет как с итаниумом (тоже ведь красиво задумывали).
Reply
2. Кстати, а ведь все VLIW трюки будут тоже к такой хрени еще как применимы. Даже лучше, поскольку можно выкинуть оптимизации под заданный размер вектора.
Reply
Всячески верю, что можно найти много осмысленных асинхронных 1-битных алгоритмов :) Но чаще нужно много упорядоченных бит сразу (числа там).
Reply
Тоже идиология совсем не новая. см. PCI-E например. Хош 1 канал, а хош 16. 16 дороже, но серийная архитектура в основе та же)
Reply
Но смотри: мне нужно 16 разрозненных бит. Мне надо установить 16 адресов, откуда-то их загрузив или вычислив. А если 16 последовательных бит, то достаточно начального адреса и счётчика бит. Тут, мне кажется, зарыта некоторая экономия времени, и не пользоваться ей будет глупо. Т.е. здорово, конечно, иметь возможность грузить совсем независимые биты. Но и дёшево грузить зависимые тоже полезно.
С третьей стороны, если архитектура одноадресная (стековая, например), то вопрос становится нерелевантным: каждая команда грузит столько бит, сколько ей сейчас надо на один операнд. А компилятор раскладывает независимые операции так, чтобы эффективнее загрузить все линии памяти. Раз уж VLIW вспомнили.
Reply
Leave a comment