LINUX.ORG.RU
ФорумTalks

Почему бы IDE не общаться с компилятором бинарными блобами?

 ,


0

2

Можно же передавать между IDE и компилятором сразу AST. Все равно IDE парсит исходники и создает какое-то дерево внутри (не обязательно AST), а потом компилятор делает подобную работу второй раз. Автокомплит, форматирование, все это ведь может делать компилятор, в нем уже есть нужные абстракции.

И сохранять исходники нужно сразу как обогащенный AST, что-бы по нему однозначно восстанавливался правильно форматированный текст, который нужен только в окне редактора. Тогда неправильно форматированный код просто не можно будет сохранить и не будет этого всего страдания, не будет табы vs. пробелы.

IDE должна поддерживать кривые исходники, компилятор - нет.

AST очень жирный. Речь про гигабайты даже для hello world. Достаточно посмотреть на clang daemon.

Разрабам компилятора отдельная головная боль.

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

AST весит примерно столько же, сколько и текстовый код.

IDE должна поддерживать кривые исходники

Зачем?

Разрабам компилятора не нужно будет разбирать текст. Одной болью меньше.

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

Разрабам компилятора не нужно будет разбирать текст. Одной болью меньше.

Не всем разрабам нужны IDE. А компилятор нужен всем

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

AST весит примерно столько же, сколько и текстовый код.

В ваших фантазиях - да.

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

Аскетам вообще ничего кроме си на надо.

Я говорил о нормальных программистах, которые программируют за деньги и используют операционную систему, среду рабочего стола, IDE и другие инструменты.

vlad9486
() автор топика

Как ты себе представляешь работу сборочных серверов, Continuous integration и прочего, где IDE нету? Юнит-тестов всяких

Harald ★★★★★
()

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

вот уже третья причина, почему твоя идея говно и ненужно

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

И сохранять исходники нужно сразу как обогащенный AST

Компилятор его схавает без IDE и даже спасибо скажет за то, что меньше работы.

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

Я имел ввиду не тот AST, который со всеми инклюдами и жирный. А просто бинарный формат для исходников, в котором уже все распарсено и нету избыточности. Нету возможности выразить неправильное форматирование.

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

А просто бинарный формат для исходников, в котором уже все распарсено и нету избыточности.

Чтобы всё распарсить, нужны заголовочные файлы. Заголовочные файлы могут быть разными на разных платформах, или банально версии зависимостей могут отличаться

Harald ★★★★★
()

Можно же передавать между IDE и компилятором сразу AST. Все равно IDE парсит исходники и создает какое-то дерево внутри (не обязательно AST), а потом компилятор делает подобную работу второй раз.

Некоторые IDE используют Clang для анализа исходников.

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

Именно так. Текст не нужен. В блобе, конечно же, будет текст что-бы восстановить имена.

Типа так:

int main(int argc, char* argv[]) {
    return 0;
}

превращается в

  • 2 байта дискриминант, который означает что далее идет функция,
  • 2 байта длина имени,
  • 4 байта имя функции,
  • 2 байта код типа данных что возвращается (для int код вообще может быть коротким, только все они должны быть Prefix code),
  • 1 байт количество аргументов,

и т.д.

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

и как тогда делать код ревью, диффы смотреть, что с безопасностью? Чем проверять, что твой AST соответствует исходнику и в него не добавлен зловред? Все статические анализаторы переписывать заново?

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

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

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

Допустим я программирую за деньги, и достаточно давно не программирую на С, в основном на js, C# и sql. Однако до аскета как до луны. И да, не использую ide в большинстве случаев, а вот компиляторы использую разные. Ситуации бывают разные, не нужно думать что вы учли все ситуации.

По сабжу, многие ide уже давно работают с компиляторами, точнее с сервисами, по протоколу, и поручают таким сервисам и проверку кода, и автокомплит и тд. Всех всё устраивает.

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

Эх, видимо недостаточно опыта просто у вас.

Профит от подобного будет копеечный, а вот объём геморроя неимеверный. Просто постарайтесь понять почему тот же git насколько простой как топор, почему сложные вещи там делаются кишками на ружу, заставляя пользователя их делать самому. Да потому что так в конце-концов надёжнее и все счастливы. Исходники в текстах в конечном счёте значительно проще и эффективнее для всех. Просто поинтересуйтесь какие бывают проблемы у разработчиков дб с дебагом хранимых процедур, триггеров, когда это всё прямо в базе редактируется и отлаживается, насколько возрастает геморрой поддержки такой базы и тд. Да, вроде по началу концепция выглядит хорошо, но на практике рассыпается. Вот с вашей идеей так же.

ixrws ★★★
()

это уже было..причём помнится что-то советское :-)

редактор держал дерево синт.разбора (видимо с мета-данными) и на своём «птичьем» языке общался с компилятором.

Компиляция происходила с быстротой молнии. Но традиционно «никому не нужно» :-)

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

Как ты себе представляешь работу сборочных серверов, Continuous integration и прочего, где IDE нету?

В начале двухтысячных я слышал, что в акронисе сборку автоматизировали нажатием на кнопочки в Visual Studio. Тогда это тоже казалось диким. Но мне тогда и идея CI казалась дикой.

i-rinat ★★★★★
()

Почему бы IDE не общаться с компилятором бинарными блобами?

Идея мутноватая, и непонятно, что она вообще даст. Возможно, окажется очень полезной. Возможно, окажется пшиком. Возможно, только всё ухудшит. Может, сделаешь прототип, чтобы можно было оценить?

И сохранять исходники нужно сразу как обогащенный AST, что-бы по нему однозначно восстанавливался правильно форматированный текст, который нужен только в окне редактора.

Как сохранять некорректный исходник?

i-rinat ★★★★★
()
Ответ на: комментарий от ixrws

Да потому что так в конце-концов надёжнее и все счастливы.

Так и я о том же. Бинарный формат в котором уже сразу структуры компилятора - это проще чем текст. Текст нужен только человеку. Инструментам будет проще работать с типами данных компилятора.

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

Да, похоже что делается уже то что нужно.

LSP is a win for both language providers and tooling vendors!

Именно.

vlad9486
() автор топика
Ответ на: комментарий от i-rinat

Может, сделаешь прототип, чтобы можно было оценить?

тонко

Harald ★★★★★
()

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

Вот только собирать и разбирать код придётся всегда одним и тем же компилятором.

И да, ide нужны не всем, более того, чем сложнее проект, тем меньше от него обычно толку. Например такие прекрасные вещи как qtc и clion загнуться на хроме, если у тебя тачка меньше 200к стоит.

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

Фантастический маразм.

  • накладные расходы на прекомпил (который не всегда нужен)
  • простым редактором сохранёнки не откроешь
  • в гит диффы кода не посмотришь
  • в репозиториях тоже код не посмотрешь, там же бинари
  • выше риск потерять исходники

Пререписывать-переделывать-доделывать множество различных инструментов только ради крохотного прироста производительности при компиляции. Чтобы всё было не удобным и лагало, а компиляция занимала на сколько-то там % меньше времени.

Это при том, что серьёзные проекты на рабочих машинах вообще не компилируют, для таких задач есть CI сервер и тестовая среда.

Классический пример вредной оптимизации.

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

Тут как раз дело в человеке, но что и немаловажно - в инструментах, которые были сделаны для человека. Есть не мало всяких штук вроде grep, которые в разработке пусть и не непосредственно, но зачастую используются. И они работают с текстом.

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

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

Потому что различные окружения, где работают наши софтины, от маленьких утилит, до довольно крупных хреновин вроде accounting софтин. И различные окружения просто не позволяют там использовать ide для нахождения проблем. Да, где-то позволяют и там где позволяют - используются. Но это не сказать чтобы правило. Иными словами: на одном сервере используется ms sql studio, на другом только чисто текстовый sql клиент, потому что на нём голо, на третьем сервере всё настолько туго, что кроме нашей софтины вообще ничего нет, а доступ до него огорожен несколькими vpn. Получается что тащить везде студию или другой sql ide(используем и mysql, и pg) просто не выходит.

Добавим сюда то, что скажем поиск по дампу базы в виде sql файла зачастую гораздо проще делать тем же grep, получим что не всегда ide просто эффективны. Разные проекты веду в emacs, в том числе из-за org-mode, поддержка js того же весьма приличная, да и C# вместе с dot net core очень удобно.

Да, ide могут быть хороши где-то на крупных проектах, для тех же C#, С++ и Java, но и там могут быть нюансы. У нас есть подобные проекты и та же MS VS Studio на них едва шевелится на любых компьютерах, мне очень больно видеть эти тормоза:)

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

Я говорил о нормальных программистах, которые программируют за деньги и используют операционную систему, среду рабочего стола, IDE и другие инструменты.

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

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

Вы может одминов имеете в виду?

Я как контракторствует много организаций повидал и везде нормальные программисты используют ИДЕ

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

та же MS VS Studio на них едва шевелится на любых компьютерах, мне очень больно видеть эти тормоза:)

Вы бы с Атомов слезли.

Хоть i3 попробуйте или какой Бульдозер.

grim ★★☆☆
()
Последнее исправление: grim (всего исправлений: 1)
Ответ на: комментарий от pon4ik

Вот только собирать и разбирать код придётся всегда одним и тем же компилятором.

Сам язык программирования будет в этой бинарной форме. Разные компиляторы просто реализуют тот же стандарт.

vlad9486
() автор топика

Дай угадаю, ты пишешь мобильные и/или десктопные приложения? Перекладывать работу билд-сервера на IDE и десктоп может прийти в голову только вашему брату.

Современные разрабы и так слишком сильно зависят от IDE, наоборот нужно ломать эту зависимость.

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

Я думал что можно программировать всегда на любимой машине в любимом окружении и неважно где это работать будет. Видимо у меня мало опыта. Но по-моему это неправильно организованный проект если программист не может работать где ему удобно.

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

Только что уже писал. Не важно где программа будет работать. Программировать должно быть можно где угодно.

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

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

То есть «почему IDE не компилит код в LLVM IR»? Потому что это не его собачье дело.

Languageserver’у удобно свое промежуточное представление, отдельным линтерам — свое, компилятору — свое и скрещивать их насильно никому не надо.

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

Некорректный исходник сохранять не нужно.

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

i-rinat ★★★★★
()
Ответ на: комментарий от vlad9486

Я тебе вовсе не про программирование написал, а про сборку. Но тебе оно не понятно, ибо ты банально не в контексте.

То, что хочешь, даже если опустить глупость самой концепции (внедрение лишних сущностей), просто несовместимо с более-менее серьёзной разработкой.

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

Эм, на атоме можно использовать VS Studio? Боюсь моя психика не выдержит. Нет, я как минимум про i5с хотя бы 8 гигабайтами оперативки. Но это не решает проблему, потому что и на i7 оно еле вешелится если сравнивать скажем с emacs и vim. Я про элементарные вещи, вроде переключиться с файла на файл. С позиции в одном файле на позицию в другом.

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

Да, в идеально выстроенном мире, при условии, что вы только разработчик, так и есть. В моём случая я не только разработчик, но и консультант и проверяющий:) Всё что касается разработки ведётся на моём личном ноуте и изредко на стационарнике. На них обычный calculate linux + mate + emacs + eclipse. Но проекты разбросаны по различным хостам. Не все проекты крупные, какие-то это просто десятки строк sql, которые на моём личном ноуте не имеют смысла, ибо на нём просто нет ни тестовой не рабочей базы. А в тестовой может просто не быть нужных данных.

В основном, если до хостов есть адекватный доступ, ну чтобы хотя бы ssh был, всё ок, и работается как удобно и с теми инструментами, которые нравятся. Но не до всех хостов такой доступ, где-то доступ через сертифицированые огороженные vpn. Но да, обычно и в таких случаях выкручиваемся:)

ixrws ★★★
()
Ответ на: комментарий от i-rinat

Программирую 5 лет. Писал мобильные фронтенды (swift, да-да, испорченный хипстерством), работал в геймдеве (c++), на галере (c++) и еще кое-где. Никогда не приходилось сохранять некорректные исходники. Интересно для чего это может быть нужно? Может кто с большим опытом подскажет.

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

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

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

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

Никогда не приходилось сохранять некорректные исходники. Интересно для чего это может быть нужно? Может кто с большим опытом подскажет.

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

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