OSDev

для всех
Текущее время: 13 дек 2017, 00:48

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 12 май 2015, 21:05 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1057
Bargest писал(а):
Цитата:
php версии с 3 компилируемый. Javascript тоже, давно компилируется.

Jit - это хорошо, но это не совсем компиляция в "традиционном" виде. Все Jit-компилируемые языки получают популярность за счет своей управляемости. При выполнении происходит просто невообразимое количество проверок по каждому чиху, поиска чего-либо при каждом вызове (да, результат кешируется, но все же), повсюду куча этой вашей абстрактности и виртуальности (половина кода вызывается через vftable) и прочих чудес инженерной мысли. А потому даже после докомпилирования из внутреннего представления в асму приложение уйму времени проводит в недрах виртуальной машины, что не лучшим образом сказывается на производительности.
Jit-средам не надо генерировать быстрый код, нужно только убедить всех, что код быстрый, с помощью синтетических тестов. Где-то были статьи, что тот же C# крайне фигово умеет делать инлайны, не особо любит разворачивать циклы - короче не умеет базовые вещи оптимизатора. Хотя ссылку уже не найду.
Конечно, jit во много раз быстрее, чем прямая интерпретация, но до скорости обычного компилируемого кода с нормальным оптимизатором на реальных приложениях ему далеко. В первую очередь из-за чрезмерно активной работы с памятью, когда это не шибко нужно, и из-за постоянных проверок на все случаи жизни, чтобы ничего никогда не могло упасть. А если работу с памятью, все проверки и поиск выпилить, то все эти php с javascript'ами и прочими C#-ами превратятся в тот же пресловутый Си. Да, они действительно станут полностью компилируемыми в "традиционном" смысле, но что толку-то.

Потому я полностью согласен с Freeman'ом по поводу определения компилируемости. Наличия кусочков асмы где-то во время выполнения не достаточно.

Несогласен. Хотя доля правды в этом есть. ООП медленное и медленное оно что на нативном компиляторе что и на jit. Синтетические тесты что там что там не используют ООП. По крайней мере таких не видел. Что касается проверок, то это зависит от того, как разработано приложение. Понятно что javascript к примеру работает только с объектами. Php скорее всего тоже сюда, хотя положительные моменты в нём есть. В Си# идеология открытых библиотек. Но ничего не мешает отступить от этой идеологии, кроме идеологов. В Java с этим нет проблем.

Почему нельзя все проверки выкинуь? Думаю можно. Просто народ лениться разрабатывать новое, а копирует старые решения. Я к примеру прекрасно умею писать код без проверок. И без лишних обращений к памяти. И даже можно делать с ООП. Но до конца от проверок пока не получилось отказаться, потому что работал в рамках существующих языков и правил.
Думаю вопросы подняты правильные и в новом языке их надо решить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 12 май 2015, 21:28 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Цитата:
Я к примеру прекрасно умею писать код без проверок. И без лишних обращений к памяти. И даже можно делать с ООП.

Человек может так сделать, да. Но когда у нас ООП и отсутствие указателей - всё есть объект, даже когда int надо в строку перевести, для него создается объект, и среда не будет спрашивать человека, делать ли проверку или очередной new. Каждый объект - это malloc + пометочка для сборщика мусора (добавление в общую таблицу объектов или еще что-то). Поэтому по каждому чиху у нас new. Даже если объект (структура) нужен локально, и его можно было бы выделить в стеке и работать через указатель. А такая ситуация довольно часто встречается. Также часто надо сделать составное поле в структуре, т.е. объявить
Код:
struct A
{
    struct { int a,b;} x;
    int y;
}

В таком случае в управляемых языках "x" должен тоже быть объектом, а значит еще один new.
А с проверками - как без проверок C# будет кидать Index Out Of Range Exception при выходе за границы массива? Как он будет кидать invalid cast при попытке неверного преобразования типа объекта? Как он будет обрабатывать использование обычного int на стеке виртуалки как объекта? В Ц++ все понятно: вышел за границу массива - твои проблемы, кастанул string в memo - лови пачку бессвязных ексепшенов через несколько десятков строк кода, разыменовал int как указатель на объект - получай неопределенное поведение или SEGFAULT. А в скриптообразных (управляемых) так нельзя. А как javascript будет без проверок и поиска обрабатывать динамическое добавление полей в структуру, когда на этапе компиляции смещения полей вычислить невозможно? Если объект, к примеру, генерируется из приходящего через ajax JSON-а, что для JS нормальная ситуация.
Если в C# (да и в любом другом управляемом языке) сделать возможность создания переменных типа "структура/объект" (без new), сделать ручное управление памятью и отключить все проверки - мы получим тот же си++. Потому что только этим принципиально отличается управляемый код от обычного.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 12 май 2015, 22:11 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1057
Bargest Вы мыслите узко. Отвечать подробно нет времени. Так что ниже сказанное это больше для меня что-бы запомнить идею.

Цитата:
Но когда у нас ООП и отсутствие указателей - всё есть объект, даже когда int надо в строку перевести, для него создается объект, и среда не будет спрашивать человека, делать ли проверку или очередной new.
Назначение ООП для группировки кода и данных. Но это не значит что надо возводить в абсолют.

Цитата:
В таком случае в управляемых языках "x" должен тоже быть объектом, а значит еще один new.
Структурировать код так что-бы компилятор мог отличить управляемый код от не управляемого.

Цитата:
А с проверками - как без проверок C# будет кидать Index Out Of Range Exception при выходе за границы массива?
Где нужно исключение можно использовать инкапсуляцию. Но писать код что-бы были исключения не нужно. Добавить шаблоны или структуры что-бы избежать оказий. Оказии должны вычисляться статически.

Цитата:
int как указатель на объект - получай неопределенное поведение или SEGFAULT.

Продумать работу с указателями.

Цитата:
А как javascript будет без проверок и поиска обрабатывать динамическое добавление полей в структуру, когда на этапе компиляции смещения полей вычислить невозможно?
Что-бы не искать использовать делегирование. Проработать вопрос автоматической оптимизации делегатов.

Цитата:
Если в C# (да и в любом другом управляемом языке) сделать возможность создания переменных типа "структура/объект" (без new), сделать ручное управление памятью и отключить все проверки - мы получим тот же си++. Потому что только этим принципиально отличается управляемый код от обычного.
Минимизировать введение новых сущьностей в язык. Что-бы не заставлять все описывать руками.

Проработать вопрос автоматической оптимизации с минимум ручной организацией для ООП шаблонов, автоматов, конвейеров, с учетом параллельность, управляемость из вне.
Проработать автоматическое/ручное управление памятью. И проработать вопрос защитных механизмов в языке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 05 июн 2015, 11:13 

Зарегистрирован: 15 фев 2015, 12:41
Сообщения: 9
Цитата:
Раз такое дело, скачал я этот Rust, чтобы хоть краем глаза посмотреть, насколько он честен в компиляции. При попытке запустить получил ошибку:
Цитата:
Точка входа в процедуру AcquireSRWLockExclusive не найдена в библиотеке DLL KERNEL32.dll

Windows 7 хочет, по всей видимости. В самом PE в поле версии ОС стоит 4.0, даже не 5.0... Раз пока бета, простим.
У меня было тоже самое под XP. Поставил на 7-ку, описанное выше ушло. Но при компиляции "hello word", взятого из букваря, выдаёт, что не найдена какая-то библиотека.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 26 июн 2015, 14:38 
Аватара пользователя

Зарегистрирован: 28 май 2012, 23:44
Сообщения: 237
Откуда: Санкт-Петербург
"Rust - новый язык программирования: Часть 15. Модульная система и крэйты":
Цитата:
Модель компиляции сконцентрирована на объектах, именуемых крэйтами (crates). Каждый процесс компиляции обрабатывает одиночный крэйт в форме исходного кода, и если компиляция завершается успешно, то результатом её становится один отдельный крэйт в бинарной форме: либо выполняемый файл, либо библиотека.

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

Компилятор Rust всегда вызывается с указанием единственного файла с исходным кодом в качестве входного и всегда генерирует единственный выходной крэйт. Обработка такого исходного файла может приводить к тому, что будут загружаться другие исходные файлы, как модули. Файлы с исходным кодом обычно имеют расширение .rs, но по соглашению исходные файлы, которые представляют крэйты, имеют расширение .rc и называются крэйт-файлами (crate files).

Начало третьего абзаца шокирует. :shock:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 26 июн 2015, 15:35 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Цитата:
Начало третьего абзаца шокирует.

А что удивительного? Файл содержит ссылки на остальные файлы, следовательно, компилятор сам может их найти. Это просто и логично.
Мне как раз интереснее, в каком воспаленном мозгу могла появиться C-шная система компиляции со всеми этими тысячами отдельных объектников на каждый файл с последующей их линковкой и с этими маразматическими make-файлами. Это же просто нелогично, глупо и даже абсурдно - ведь до жути неудобно собирать сотни разных уже полускомпилированных файлов в одну программу, неудобно инлайнить функции из одного объектника в другой, неудобно обмениваться ссылками между модулями, неудобно разрешать конфликты имен, неудобно оптимизировать уже собранный код. Не говоря уже про безумную сложность написания сценариев сборки и огромное затрачиваемое на компиляцию и линковку время.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 26 июн 2015, 23:17 

Зарегистрирован: 04 ноя 2007, 14:48
Сообщения: 113
Цитата:
крэйт-файл


Кому то могут не понравится новые непонятные термины, им следовало подобрать нечто более понятное. К примеру, показать аналог крейта в других языках. makefile, .dpr, .bpg, .sln? Или более точно описать что есть крейт с приведением аналогий.

Цитата:
Мне как раз интереснее, в каком воспаленном мозгу могла появиться C-шная система компиляции со всеми этими тысячами отдельных объектников на каждый файл с последующей их линковкой и с этими маразматическими make-файлами.


Не осилил чтоли? Это всё существует по историческим причинам и в целом более удобно в определённых случаях, нежели монолитный механизм "make-компилятор-линковщик", процесс сборки которого нельзя настроить под свои нужды. Другое дело что make-файл не настолько удобен и гибок как мог бы быть. Впрочем имеем то, что есть, воз и ныне там, изменений в ближайшее время не предвидится. К слову, скорее всего окажется, что такой подход даже с сишником никак не связан.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 26 июн 2015, 23:53 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Цитата:
Не осилил чтоли?

Как раз-таки осилил, и меня этот механизм дико раздражает. Вместо того, чтобы продумывать алгоритм писать код, порой приходится возиться с этой бесполезной ерундой.
Цитата:
Это всё существует по историческим причинам и в целом более удобно в определённых случаях, нежели монолитный механизм "make-компилятор-линковщик", процесс сборки которого нельзя настроить под свои нужды.

В наше время процентов 70 того, что касается IT, существует "по историческим причинам".:) Никаких удобств у этого уже давно нет. Это имело еще хоть какой-то смысл, когда было крайне мало памяти, поэтому части программы писали на разных языках (к примеру, на Си и на Асм), компилировали в объектники и собирали. Тем не менее, нет никакой разумности в том, чтобы ради подобной возможности применять такой подход в обязательном порядке. Ничто не мешало сделать так, чтобы выхлоп в OBJ был одним из вариантов, причем НЕ основным, а основным была нормальная "монолитная" компиляция. Сегодня второе нужно гораздо чаще. Но как обычно, тогда не подумали, а потом - совместимость, совместимость и совместимость (с), как говорится.
К тому же, не обязательна именно монолиная компиляция. Можно сделать предварительный перевод исходников в бинарное внутреннее представление (разобранный код, но НЕ асма - просто все то, что надо компилятору для генерации асмы), сбор всего этого добра в одно большое дерево и компиляция всего этого дерева сразу. Тогда не надо разбирать все сорцы по-новой при каждой правке, при этом нет необходимости во всем этом make-геморрое, так как дерево будет строиться исходя из ссылок-импортов в самих исходниках.
Цитата:
Другое дело что make-файл не настолько удобен и гибок как мог бы быть.

Дело не в том, что он не гибок, а в том, зачем он вообще понадобился. Если бы не было несколько тысяч объектников всех мастей в серьёзных проектах, не было бы необходимости и в мейках как таковых.
Цитата:
Впрочем имеем то, что есть, воз и ныне там, изменений в ближайшее время не предвидится.

Угу. Как, впрочем, и всегда. Но в теме на ОСДев-е, где обсуждаются языки и выносятся некоторые идеи для создания новых, я как раз и предлагаю не повторять "исторически сложившихся" ошибок.
Цитата:
К слову, скорее всего окажется, что такой подход даже с сишником никак не связан.

Вполне может быть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 27 июн 2015, 04:25 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1315
Откуда: Зеленоград
dragon писал(а):
К слову, скорее всего окажется, что такой подход даже с сишником никак не связан.


Определённым образом связан, хотя ноги растут всё ж из времён ассемблера. Просто в Си как языке, а вслед за ним и в Си++ "высокоуровневой" модульности нет вообще (как нет её и в ассемблере -- но там-то это нормально), поэтому и получается компиляция каждого исходного файла в отдельный объектник с последующей их сборкой в выполняемый файл. В случае Си процесс сборки вообще никак не контролируется, в случае с Си++ применяется извращение в виде декорирования имён, что даёт некое подобие межмодульного контроля типов, но реальной надёжной защиты не обеспечивает. Современный же язык должен иметь нормальную модульность с полным контролем типов и всяких таких прочих вещей в пределах не только модуля, но и всего проекта. Дельфи, например, этому требованию соответствует. "Бесконтрольность" должна быть доступна для специфических случаев, но должна указываться программистом явно или же быть связана с включением в проект ассемблерных модулей.

Что же до make и тому подобных средств сборки, то они вполне себе удобоваримы для "низкоуровневых" случаев, но ведь уже не одно десятилетие программы пишутся не на ассемблере, поэтому необходимость в использовании подобного механизма действительно раздражает. Собственно, одно из больших преимуществ интегрированных средств разработки типа Визуал Студии заключается как раз в том, что программист в них занимается программированием, а не проблемами сборки приложения и т.д. и т.п. Но, как я уже сказал, наличие средств автоматизации не отменяет фатальных недостатков Си и Си++ в плане надёжности, ну а Си++ ещё и очень переусложнён (такое впечатление, что его развивали по принципу "включить все возможные фичи из всего, откуда только можно, причём максимально извращённым способом"). Так что я буду только рад, если появится действительно удобный язык, свободный от недостатков существующих, но сам в это не верю.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: язык программирования для ОС
СообщениеДобавлено: 27 июн 2015, 10:18 

Зарегистрирован: 04 ноя 2007, 14:48
Сообщения: 113
Bargest

Цитата:
Вместо того, чтобы продумывать алгоритм писать код, порой приходится возиться с этой бесполезной ерундой

Просто закладывай резерв времени на возню. На отладку же закладываешь? Хинт - код продумывается и пишется нормально и без компиляции.

Цитата:
чтобы ради подобной возможности применять такой подход в обязательном порядке

Если кого то заставляют использовать такой подход, то видимо за это платят деньги? И наверное переписывать "по нормальному" выйдет дороже чем разобраться с makefile?
Раз уж makefile кажется настолько неадекватным средством, то, вероятно, должны существовать и системы сборки более продвинутые, которые прячут эту кухню от тех, кому не хочется разбираться.
Ну поскольку с сионистским миром я не особо дружу, могу только привести как пример FPC. У него точно такая модель - каждый .pas компилируется в свой объектник, потом это всё собирается.
И FPC при этом вполне нормально по одной команде делает из .dpr .exe. Может стоит поискать подобные высокоуровневые механизмы для других языков?

Цитата:
части программы писали на разных языках

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

Цитата:
выхлоп в OBJ был одним из вариантов, причем НЕ основным, а основным была нормальная "монолитная" компиляция

Выхлоп в OBJ - промежуточный этап сборки. Команда для монолитной сборки: cd .../myproject && make. Или что подразумевается под монолитной компиляцией?

Цитата:
зачем он вообще понадобился

Make понадобился, чтобы автоматизировать процесс сборки и иметь возможность управлять этим процессом более тонко.

Цитата:
не было бы необходимости и в мейках как таковых

Была бы. Всегда найдётся деталь, которую лучше подкрутить на этапе сборки, чем придумывать костыли.

Цитата:
предлагаю не повторять "исторически сложившихся" ошибок

Поддерживаю. Но предпочитаю более конструктивные обсуждения. Что предлагается взамен make? Если ничего конкретного, то make будет неплохой альтернативой.

SII

Цитата:
Си++ "высокоуровневой" модульности нет вообще

Вроде как в C++14 добавили. не?

Цитата:
В случае Си процесс сборки вообще никак не контролируется

В случае с Си процесс сборки контролируется makefile-ом. Или имеется ввиду какой то другой аспект? Если про модульность, тогда и писать нужно про модульность, а не про процесс собрки.
На декорирование имён не возлагалась функция защиты или контроля типов. Скорее всего это либо для overload, либо просто перестраховаться лишний раз, хотябы чуть чуть.

Цитата:
необходимость в использовании подобного механизма действительно раздражает

Опять 25, кто то заставляет чтоли? Ну надо тогда найти альтернативу и аргументировать переход на неё.

Цитата:
одно из больших преимуществ интегрированных средств разработки типа Визуал Студии

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

Цитата:
сам в это не верю

Зря не веришь. Появится рано или поздно. Всё таки мир не статичен. Кто то, наверное, уже нашёл свой идеальный язык. Кто то пишет. Кто не пишет и не нашёл - ждёт.

Цитата:
я буду только рад, если появится действительно удобный язык

freeman, вот, спрос на язык программирования на ОСДев имеется.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 36 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB