LINUX.ORG.RU

Компилируемый язык вместо javascript

 , ,


0

2

Помнится несколько раз читал о прожектах использования какого-нибудь компилируемого языка в качестве основы web приложений. Т.е. вырисовывается такая цепочка:

  • Пользователь зашел на какой-нить gmail;
  • Браузер качает код написаный на быстром в компиляции языке (например что-нибудь паскалеподобное).
  • Код компилируется и запускается в песочнице и собственно делает все тоже самое, что js, но быстрее и без жора памяти на каждый чих.

Подводных камней тут конечно не мало, но профиты очевидны. Существует ли в природе работоспособная модель? Я бы помацал для одной задачки.

★★★★

Последнее исправление: zloelamo (всего исправлений: 1)
Ответ на: комментарий от Tark

Во-первых, почему в си неявный расход памяти выше, чем у ассемблера?

ну попробуй сложить два 128и битных числа в C кусками по 64 бита. Попробуй перемножить два 64х битных числа больших 2^32 каждое на 64х битной платформе. Попробуй найти первый ненулевой бит целого числа. Много чего ещё есть... Например массив структур, у которых 64х битное поле и 32х битное, при выравнивании 8 байт...

drBatty ★★
()
Ответ на: комментарий от zloelamo

Некорректное сравнение, поскольку вы всегда можете открыть фалик размером 1К и убедится, что дело не в редакторе.

попробуй открывать растровым редактором разные картинки. Увидишь, что дело таки в редакторе.

drBatty ★★
()
Ответ на: комментарий от Tark

От размера в пикселях зависит, от размера в пикселях на экране - не зависит.

ну открой чЁрный экран 32000х20000 в браузере (в смысле - jpg такой, а не цвет фона).

drBatty ★★
()
Ответ на: комментарий от drBatty

ну открой чЁрный экран 32000х20000

имеется ввиду, что браузер сам масштабирует картинку скажем 320х200 -> 32000х20000

drBatty ★★
()
Ответ на: комментарий от drBatty

попробуй открывать растровым редактором разные картинки. Увидишь, что дело таки в редакторе.

Ты, походу, свою первоначальную мысль уже потерял.

zloelamo ★★★★
() автор топика
Ответ на: комментарий от zloelamo

не потерял. расход памяти может зависить от контента. Причём совсем не прямо пропорционально размеру контента. А вообще как угодно. Все эти ваши размышления - ерунда и не имеют отношения к RL.

drBatty ★★
()
Ответ на: комментарий от drBatty

ну попробуй сложить два 128и битных числа в C кусками по 64 бита. Попробуй перемножить два 64х битных числа больших 2^32 каждое на 64х битной платформе. Попробуй найти первый ненулевой бит целого числа. Много чего ещё есть... Например массив структур, у которых 64х битное поле и 32х битное, при выравнивании 8 байт...

С этим соглашусь. Хотя не совсем. Программы пишутся в основном одновременно и под 32 и под 64 битную платформу сейчас, поэтому от этого плюсов никаких не будет.

ну открой чЁрный экран 32000х20000 в браузере (в смысле - jpg такой, а не цвет фона).

Открыл 6400х4000 в хромом, занимат 110 мег памяти. По 4 байта на пиксель, плюс накладные расходы, не вижу ничего странного?

Tark ★★
()
Ответ на: комментарий от zloelamo

И на ЛОРе и может даже коряво, если они не лингвисты, зато по делу говорят, а так, как ты.

mopsene ★★★
()
Ответ на: комментарий от zloelamo

увы нет. Если ты хочешь динамическую структуру, позволяющую создавать всё что угодно визуальное, это будет медленным в любой реализации. если бы веб был бы ограниченным набором контролов и их состояний то - да, все было бы ГОРАЗДО быстрее. но увы и ура - это не так.

wwwsevolod
()
Ответ на: комментарий от Tark

Программы пишутся в основном одновременно и под 32 и под 64 битную платформу сейчас, поэтому от этого плюсов никаких не будет.

ну 32/64 это как раз непроблема, проблема будет с испорченной на 9 жизней вперёд кармой быдлокодера. Когда его быдлокод будут переписывать под _другую_ архитектуру.

Но суть в том, что накладных расходов в асме действительно _можно_ избежать. Ценой переносимости. В сишешке с переносимостью получше, но придётся кодить на очень низком уровне. В плюсах всё хорошо с уровнем, но таки есть накладные расходы. Причём если скорость разработки на плюсах как у какой-нить явы, то и накладных расходов столько же.

Открыл 6400х4000 в хромом, занимат 110 мег памяти. По 4 байта на пиксель, плюс накладные расходы, не вижу ничего странного?

дык и я про то говорю. А теперь расскажи это тем господам, у которых «winxp+64mb летает». Я им объясняю, что она ЛЕТАЛА, когда-то. На SVGA 800x600 максимум, да ещё и с 16и битным цветом, да и с web 1.0. А сейчас уже другое столетие.

drBatty ★★
()
Ответ на: комментарий от drBatty

ну 32/64 это как раз непроблема, проблема будет с испорченной на 9 жизней вперёд кармой быдлокодера. Когда его быдлокод будут переписывать под _другую_ архитектуру.

Даже под 32/64 это проблема, потому что программа не получит никаких преимуществ от 64 бит и одни недостатки. В принципе путем всяких извращений накладных расходов можно избежать и на си я думаю, хотя на си это будет гораздо сложнее чем на ассемблере.


дык и я про то говорю. А теперь расскажи это тем господам, у которых «winxp+64mb летает». Я им объясняю, что она ЛЕТАЛА, когда-то. На SVGA 800x600 максимум, да ещё и с 16и битным цветом, да и с web 1.0. А сейчас уже другое столетие.

Так и я те аргументы использовал. Я сам упоминал, что зависит от размеров в пикселях картинки, но не размера в пикселях ее отображения на экране.

Tark ★★
()
Ответ на: комментарий от Tark

Даже под 32/64 это проблема, потому что программа не получит никаких преимуществ от 64 бит и одни недостатки.

это не так. Кроме 64х битных указателей, в новых CPU ещё Over9000 разных вкусностей. А 64 бита - это не главное, просто для 64х битных приложений надо значительно ломать ВСЁ ПО, а другие фишки можно вводить так, что юзер этого и не замечает (чем давно и невозбранно пользуются гентушники, достигая часто значительного прироста быстродействия, тупо пересобирая всё ПО под свой конкретный камень)

Другое дело, что эффект от любой низкоуровневой фичи будет заметен лишь тогда, когда это будут учитывать кодеры этих либ.

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

тут дело всё в том, что на ассемблере просто выхода другого и нет. А вот в С (и особенно в С++) всё в твоих руках. Есть в С поля и объединения, т.ч. можно всегда упаковать что угодно, и куда угодно.

Так и я те аргументы использовал. Я сам упоминал, что зависит от размеров в пикселях картинки, но не размера в пикселях ее отображения на экране.

я говорил о том, что многие картинки браузер самостоятельно масштабирует до нужного (быдлодизайнеру) размера. Потому картинка в 10х10 может быть растянута браузером до 100х100, и при этом будет занимать в 100 раз больше памяти. Т.ч. «размер в пикселях» может отличаться (и отличается) от того, который у картинки изначально. ЧСХ обычно в большую сторону. ИЧСХ, при десятикратном увеличении размер увеличивается в 100 раз. Я уж не говорю о том, что увеличение - процесс очень сложный, и ресурсоёмкий, и потому браузер жрёт не только сотни метров памяти, но и миллиарды тактов CPU.

drBatty ★★
()
Ответ на: комментарий от drBatty

я говорил о том, что многие картинки браузер самостоятельно масштабирует до нужного (быдлодизайнеру) размера. Потому картинка в 10х10 может быть растянута браузером до 100х100, и при этом будет занимать в 100 раз больше памяти. Т.ч. «размер в пикселях» может отличаться (и отличается) от того, который у картинки изначально. ЧСХ обычно в большую сторону. ИЧСХ, при десятикратном увеличении размер увеличивается в 100 раз. Я уж не говорю о том, что увеличение - процесс очень сложный, и ресурсоёмкий, и потому браузер жрёт не только сотни метров памяти, но и миллиарды тактов CPU.

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

Tark ★★
()
Ответ на: комментарий от Tark

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

ну это уже вопрос десятый. Важно то, что нужно сотни метров и миллиарды тактов на это. И нефиг ныть - кому не нравиться - man lynx.

drBatty ★★
()
Ответ на: комментарий от drBatty

В сишешке с переносимостью получше, но придётся кодить на очень низком уровне.

Хоть сам понял, что сказал? Если писать на низком уровне, то как раз никакой переносимости не будет, для этого и придумали стандартную библиотеку С

ms-dos128
()
Ответ на: комментарий от ms-dos128

Хоть сам понял, что сказал? Если писать на низком уровне, то как раз никакой переносимости не будет, для этого и придумали стандартную библиотеку С

почему «не будет»? смотря как писать.

drBatty ★★
()
Ответ на: комментарий от drBatty

Если ты имел в виду язык С вообще, то он не настолько низкоуровневый, как многие его описывают. А для кроссплатформенности используются кросплатформенные функции и библиотеки (SDL, libc)

ms-dos128
()
Ответ на: комментарий от KRoN73

JS давнооо уже умеет компилироваться. Более того, даже в машинный код может

Компиляция исходного кода JavaScript непосредственно в собственный машинный код, минуя стадию промежуточного байт-кода.

ZX-Spectrum BASIC компилировался в точности также, если ты забыл. Там тоже каждая команда переводилась в машинный код. Мало того, он даже покруче JS был, там были зайчатки байткода: Дело в том, что в спеке, каждый оператор хранился как ОДИН байт, и интерпретатор не парсил операторы, а просто брал программу в кодах по нужному адресу. Потом решили (во времена 8086), что это не нужно на новых быстрых CPU, и стали каждый оператор парсить. Потом решили, что парсить таки один раз всё-таки лучше, и придумали java с байткодом. Теперь вот в гугле решили, что CPU сейчас опять быстрые, и байткод не нужен, потом... Ну ты понял.

drBatty ★★
()
Ответ на: комментарий от ms-dos128

Если ты имел в виду язык С вообще, то он не настолько низкоуровневый, как многие его описывают.

я читал K&R, они заблуждаются?

А для кроссплатформенности используются кросплатформенные функции и библиотеки (SDL, libc)

Задумайся, на чём пишут эти библиотеки?

drBatty ★★
()
Ответ на: комментарий от drBatty

ZX-Spectrum BASIC компилировался в точности также, если ты забыл.
Там тоже каждая команда переводилась в машинный код

Sinclair BASIC был сложной с точки зрения классификации штукой. По архитектуре среды исполнения он был чистым интерпретатором. Но посимвольного разбора исходника не было, так как все операторы кодировались одним байтом прямо в исходнике. Это можно условно считать «компиляцией» по мере ввода. Правда, компиляция — «на уровне пользователя». Вводились операторы не побуквенно, а сразу целиком. Так что, наверное, это интерпретатор, но не ASCII, а специализированного алфавита.

Но в любом случае это ни разу не компиляция в машинный код ни на каком уровне.

Другое дело, что под Спекки были Бейсики загружаемые, которые в машинный код вполне себе компилировали. Скажем, ZX Basic Compiler. Но они были непопулярны. Жрали много памяти, а эффективность была относительно сомнительная.

KRoN73 ★★★★★
()
Ответ на: комментарий от drBatty

Если ты имел в виду язык С вообще, то он не настолько низкоуровневый, как многие его описывают.

я читал K&R, они заблуждаются?

Во времена K&R Си считался языком высокоуровневым.

KRoN73 ★★★★★
()
Ответ на: комментарий от ms-dos128

Эти библиотеки платформозависимы, а обращаемся мы к ним на всех платформах одинаково

это лишь ещё раз доказывает мой тезис, что писать на си можно по разному. Можно использовать только библиотеки подчиняющиеся какому-то стандарту, а можно - не только.

drBatty ★★
()
Ответ на: комментарий от drBatty

Твой тезис заключается в том, что можно на си писать кроссплатформенные программы, но придется писать на низком уровне. Это не так

ms-dos128
()
Ответ на: комментарий от KRoN73

Sinclair BASIC был сложной с точки зрения классификации штукой. По архитектуре среды исполнения он был чистым интерпретатором. Но посимвольного разбора исходника не было, так как все операторы кодировались одним байтом

ох... слово «зайчатки» не заметил? Какая разница, как это всё вводилось? Суть в том, что даже в далёких 80х годах прошлого века применялось не чистое интерпретирование чистого текста, а выполнение некой заготовки, которая plain-text'ом не была, а была бинарником, более близким к машинным командам (и потому - более быстрым). В JS мы наблюдаем противоположную тенденцию: браузер получает plain-text, который напрямую транслируется в машинный код. Что в IE, что в хроме. Потому твоя цитата годна только для маркетологов и википедиков. Реальность такова, что для повышения быстродействия и оптимизации ресурсов следует транслировать текст в бинарный вид. Как в JIT'е например.

Ну а что до ввода, дык это просто для удобства - длинный оператор проще ввести одной кнопкой, а не десятью. Особенно учитывая, что операторы всё равно нужно будет свернуть в один «символ».

Другое дело, что под Спекки были Бейсики загружаемые, которые в машинный код вполне себе компилировали. Скажем, ZX Basic Compiler. Но они были непопулярны. Жрали много памяти, а эффективность была относительно сомнительная.

дык в то время было проще и быстрее написать программу с приемлемым быстродействием прямо на ассемблере. Сейчас всё изменилось.

drBatty ★★
()
Ответ на: комментарий от KRoN73

Во времена K&R Си считался языком высокоуровневым.

он и сейчас высокоуровневый, если сравнивать с асмом. А тогда сравнивать было больше не с чем.

drBatty ★★
()
Ответ на: комментарий от ms-dos128

Твой тезис заключается в том, что можно на си писать кроссплатформенные программы, но придется писать на низком уровне.

«на низком» по сравнению с чем? Я говорил о том, что даже низкоуровневые библиотеки на С можно писать переносимо. До определённой степени конечно.

drBatty ★★
()
Ответ на: комментарий от drBatty

Суть в том, что даже в далёких 80х годах прошлого века применялось не чистое интерпретирование чистого текста, а выполнение некой заготовки

Где как. Sinclair BASIC был достаточно передовым решением. И очень быстрым на фоне многих тогдашних решений.

Чистых интерпретаторов тогда много было.

В любом случае, значение терминов «интерпретация» и «компиляция» от этого не изменятся. Даже с учётом того, что интерпретаторов исходного кода сегодня почти не осталось.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Где как. Sinclair BASIC был достаточно передовым решением. И очень быстрым на фоне многих тогдашних решений.

ОМГ! Не о том речь, а о том, что «прямая интерпретация в машинный код» это регресс и тупик. Это _начали_ понимать ещё 30 лет назад, но до сих пор находятся некоторые интересные личности, которые этого не понимают.

В любом случае, значение терминов «интерпретация» и «компиляция» от этого не изменятся. Даже с учётом того, что интерпретаторов исходного кода сегодня почти не осталось.

да знаю я значение терминов, конечно бэйсик в ZX был интерпретатором, никто же не спорит... А самих интерпретаторов сегодня даже слишком много. Иные умудряются даже на C++ написать интерпретатор, а потом его успешно юзать в своих поделиях. Тут кто-то кричал, что программеры-сволочи пихают NOP'ы в код... Зачем? Есть более элегантные способы - вместо того, что-бы взять, и сделать, можно ведь скачать инструкцию на китайском (ибо быстрее), перевести на английский (ибо стандарт), а потом на русский(ибо другого не понимаем), а потом удивится тому, что получилось...

drBatty ★★
()
Ответ на: комментарий от drBatty

Я сказал, что основные конструкции и функции библиотеки языка С не меняются на различных архитектурах, что говорит о высоком уровне языка

ms-dos128
()
Ответ на: комментарий от drBatty

С такими заявлениями либо прекращай пороть горячку, либо вкладывай нормальный смысл в свои слова

ms-dos128
()
Ответ на: комментарий от ms-dos128

Я сказал, что основные конструкции и функции библиотеки языка С не меняются на различных архитектурах, что говорит о высоком уровне языка

основные конструкции и библиотеки в сишечке ничем не отличаются от php & javascript. Однако сишечка не такая высокоуровневая. Есть в сишечки указатели, которых нет в других ЯП, и нет в сишечке ненужных структур, которые есть во всех остальных. Эти ненужные структуры и требуется делать через указатели, прямо как в асме, и потому си - это очень низкоуровневый ЯП.

drBatty ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.