Илья Ермаков писал(а):
Ну да, т.е. получается, что при не-большей максимальной абстракции мы имеем серьёзное повышение уровня минимально-возможной абстракции. Ничего не приобретаем.
Я бы сказал -- при существенно меньшей максимальной абстракции. Т.е. когда после плюсов пишу на яве, то остро ощущаю себя калекой. Не могу сделать то, и это. В высокоуровневом плане. Низкоуровневый фиг с ним, для этого можно и JNI использовать в конце концов, если приспичит.
Но в принципе, в яве мы приобретаем. Дуракоустойчивость приобретаем. Т.е. никто, по простоте душевной, уже в память не нагадит просто так. Чтобы нагадить в память тут уже нужны существенные знания
Т.е. кластер индусов на яве таки родит нечто что будет даже работать, причем в обозримые сроки родит (КАК работать -- вопрос десятый). На плюсах они не родят это никогда. Отсюда, кстати, и любовь к яве в ынтырпрайз-приложениях (документооборот и проч).
Илья Ермаков писал(а):
Касательно же высокоуровневости - если брать за критерий количество гарантируемых инвариантов, то всё же нельзя никак сказать что "ява является более низкоуровневым языком, нежели С++".
Может быть, сказать: менее "абстракциеконструктабельным"
Низкоуровневые инварианты (случайно не нагадить в память) да, в яве гарантируются лучше, просто за счет более высокого низкого уровня
С другой стороны, при желании таки возможно сложить jvm не вылазя в нативный код, причем сложить так, что она и вякнуть не сможет (никаких исключений естественно выкинуто не будет). Но это конечно надо сильно постараться и владеть соответствующими знаниями. Случайно это сделать почти не реально.
На счет высокоуровневых инвариантов таки не соглашусь. В плюсах есть такая зверь машина как язык шаблонов, это тьюринг полный язык времени компиляции, соответственно с помощью этой магии могу на этапе компиляции проверить многие инварианты, которые придется в яве проверять в рантайме (в шарпе, кстати, тоже придется многое из этого проверять в рантайме).
Но всё конечно имеет цену. Во-первых такие проверки приводят к долгой компиляции. Во-вторых в плюсах они смотрятся хм... несколько инопланетно
В D2 с одной стороны низкоуровневые инварианты хорошо проверяются (пожалуй лучше чем в java), так называемый safe D, с другой стороны высокоуровневые проверяются проще быстрее и лучше чем в С++ (на подмножестве D можно банально писать функции времени компиляции, что существенно читабельней чем шаблонная магия), с третьей стороны доступны все низкоуровневые штучки в духе Си/С++, если приспичит.
D2 мешает ровно одно чтобы стать более-менее популярным -- он не понимает сишные хедеры. А без этого он приемником C/C++ стать не сможет. А как это сделать, хотя бы в теории, я пока до конца не представляю.