kika: (Default)
[personal profile] kika
имхо, универсальный язык - это всего лишь язык, на котором можно написать свой собственный рантайм. С, С++, ассемблер - универсальные языки, а Ява или Хаскель - нет.
http://kika.livejournal.com/84936.html?thread=880072#t880072

truъ or false?

Date: 2009-06-18 03:33 pm (UTC)
From: [identity profile] jsn.livejournal.com
Я, очевидно, был невнятен, давай я попробую почётче.

Вообще это классический способ бутстрапа всяких таких язычков типа
лиспиков и проч, если я правильно помню. Состоит он в том, что ты пишешь изначально очень мелкий сабсет языка, практически не имеющий рантайма -- в частности, раз уж мы о GC, не имеющий GC. И потом на этом уже сабсете ты пишешь рантайм. Для этого, очевидно, в общем случае не необходимо писать "другую яву" -- достаточно заменить в существующей минияве хук аллокатора. Or something.

То есть, совсем уж позитивистски: можно ли было написать llvm на яве? Конечно. Можно ли на этом llvm реализовать бутстрапную ява-машинку практически без рантайма? Почему нет. Можно ли потом над ней написать рантайм? Почему нет, опять же.

Date: 2009-06-18 03:40 pm (UTC)
From: [identity profile] kika.livejournal.com
У тебя в этом сабсете явы кто будет памятью управлять? В Яве нету памяти, в ней есть только массивы. Эти массивы надо как-то отобразить на память, это же абстракция. Кто в этом сабсете будет управлять вводом-выводом? Тебе чтобы в сокет слово "хуй" послать, надо передать ОС указатель на букву "х" и число 3.

ОК, ты можешь написать ОС на Яве. И там не надо передавать указатель, там надо передавать String("хуй"). А кто запишет это слово в DMA буфер и дернет за регистр инициации трансфера?

Date: 2009-06-18 03:54 pm (UTC)
From: [identity profile] jsn.livejournal.com
И ээ, в чём проблема-то -- в том, что в яве нельзя получить указатель, стоящий за массивом, дёрнуть сисколл или сказать outb? Так кто мешает в минияве таких ограничений не иметь, а ввести их слоем выше в этом самом рантайме?

Date: 2009-06-18 04:23 pm (UTC)
From: [identity profile] kika.livejournal.com
Ну все отлично - миниява язык универсальный, а обычная ява - таки нет :-)

Date: 2009-06-18 04:29 pm (UTC)
From: [identity profile] jsn.livejournal.com
Жжош :)
Srsly, though: you're back to square one. Любой язык с ассемблерными вставками универсален, а без них -- нет, dong ma? :)

Date: 2009-06-18 04:35 pm (UTC)
From: [identity profile] kika.livejournal.com
Естественно, любой со вставками - универсален, если встроенный ассемблер не ограничен. Ну он просто равноуниверсален :-) ассемблеру. Без вставок - возможны варианты. С и без вставок позволяет написать собственный рантайм. А без передачи управления на данные - весь рантайм без стартапа :-)

Date: 2009-06-18 06:21 pm (UTC)
From: [identity profile] pzz.livejournal.com
Угу, напиши на Си без вставок setjmp()/longjmp(). Или сисколл какой-нибудь позови...

Date: 2009-06-18 04:37 pm (UTC)
From: [identity profile] kika.livejournal.com
Ну и снова - вот есть у тебя ассемблерные вставки в яве и чо? Можно написать умножение 2 на 2 очень эффективно :-) С памятью-то они тебе работать все равно не дадут, конечно можно вообще всю программу написать на ассемблере и обернуть в яву, но это как-то неинтересно обсуждать.

Date: 2009-06-18 06:09 pm (UTC)
From: [identity profile] jsn.livejournal.com
И ээ как конкретно они не дадут? Вот я вываливаюсь в raw instructions внутри ява-метода, вот там справа, на полочке, регистры, в которых vm держит whatever (включая locals), а вот там слева -- memory locations, из которых растут деревья environment-а. Jump table хелперов прямо по центру, стек аккуратно разложен под ногами. Что конкретно меня остановит?

Это будет непортабельно, но не более непортабельно, чем ассемблерные вставки на си. Это сильно не "написать всю программу на ассемблере и обернуть её в яву" -- так, на глазок, там нужно несколько дырок просверлить, типа из oref2laddr и наоборот, плюс-минус типы, ну и прочее в таком же ключе.

При этом с "неинтересно обсуждать" я согласен -- чем дальше я уточняю предложенную идею "универсальности", тем больше я согласен с комментатром ниже (про "бессмысленный термин"). Твоё "неинтересно обсуждать" -- это же "impractical", так? Ну так это сильно более слабый термин, чем "универсальный". Если бы ты сказал, что писать рантайм к яве на целиком яве impractical -- дискуссии бы не вышло :)

Я могу ещё за само понятие "C runtime", а также за safety тут спеть, но, по-моему, все уже выдохлись.

Date: 2009-06-18 03:47 pm (UTC)
From: [identity profile] kika.livejournal.com
Тут вот один деятель, с десятилетиями опыта, пишет ОС на Яве. Я его спросить не могу, он меня зобанил :-) но ты можешь - зачем он пишет ОС на Яве и на С? Ведь казалось бы, вся наука софтостроения учит нас, что надо сначала написать ясно и понятно, а потом уже оптимизировать на ассемблере узкие места.

Date: 2009-06-18 04:05 pm (UTC)
From: [identity profile] jsn.livejournal.com
Ну так не честно, я сюда пришёл за компьютеры тереть, а не за психиатрию.

Кто знает, может, у него сразу видны узкие места и он оптимизирует их на си за неимением ассемблера? Или, более практично, дешевле залеверейжить то, что уже сделано для си (в смысле библиотек, оптимизации и практик), чем изобретать велосипеды с бутстрапом явы.

(хмм, хотя вряд ли -- человек, который пишет OS в наше время, по построению фанат изобретения велосипедов. не бьётся, да)

Profile

kika: (Default)
kika

January 2017

S M T W T F S
1234567
89 1011121314
151617181920 21
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 16th, 2026 04:32 pm
Powered by Dreamwidth Studios