Как стать автором
Обновить

Как правильно писать код с Cursor? Смотрим, как тот устроен внутри

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров30K
Всего голосов 46: ↑45 и ↓1+53
Комментарии25

Комментарии 25

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

Уточняйте что речь о вебе, потому что в моем случае писать код с курсором нифига не получается

Какой у вас стек?

Dart/flutter, помогает очень даже хорошо.

Какую LLM используете?

Cursor не настраивал специально, под капотом у него их несколько. А отдельно chatGpt o1, он в логику лучше умеет. Сравнивал их с 4о, на одной и той же задаче, 4о ушёл в мудреные рассуждения, и погиб))

Попробуйте sonnet 3.7 thinking, думаю ваша продуктивность ещё вырастет

На каком стеке используете Claude 3.7? Насколько сильно Claude ускоряет вашу работу (2х, 3х, больше)?

Js, ts, php, python

Сравнивая 4о и sonnet: задачи решаемые соннетом, зачастую и в 3 и в 4 итерации не решаются.

Сравнивая о1 и соннет: разница по ощущениям около 20% в точности/качестве

У меня Dart/Flutter, Claude 3.7 — топ.

Задачи не решаются кем? Разница 20% в какую сторону, кто хуже?

Наконец-то статья не в стиле "Cursor - это волшебная палочка и делает всё за меня" или "Cursor - нерабочее г**** и не работает вообще".

Спасибо за изученные и описанные детали реализации инструмента. Особенно за нюанс с конкатенацией правил (это заставило меня просмотреть свои файлы правил на предмет того, нет ли такой же проблемы у меня).

Selectel обычно годноту пишет, по моим наблюдениям.

Как человек, не умеющий писать сложный код с нуля, объединяющий несколько разных библиотек/технологий и даже не способный разобраться в документации к ним - за вечер (2-3 часа) сделал через cursor прототип hex-тайловой 3d карты на стеке pygame как оконный фреймворк, opengl для 3d, +numpy и pygltflib для загрузки 3д моделей. Нраица.

Оно то хорошо, пока не дойдет до багов. Уверены что их не будет, и будете в состоянии хоть что то с этим сделать? Ладно, игры это не так страншно, а когда речь зайдет о чем то более серьезном. Связаным например с финансами. или прости господи, с инженерными расчетами? А такое скоро начнется и повсеместно

Половину времени баги вчера и фиксили.

А вообще для этого есть тесты.

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

Думаю вопрос все же базового понимания Что генерит нейронка. Тогда баги вполне можно править давая команды на "натуральном" языке. Понятно что Совсем без понимания написанного, исправление критичных багов может стать почти нереальным.

А как он работает с языками с развитой типизацией? Передает в LLM всю информацию о выведенных типах? Умеет ли что-то типа Types-Driven Development, когда по ожидаемому типу генрируется выражение, с учктом текущего контекста?
Умеет ли он параллельно писать код на C/Ada/Rust и доказательство корректности этого кода на Сoq?

Думается, что на текущем этапе в LLM передаётся только текст исходников, а также инструменты для работы с файлами типа записи/чтения и поиска. Никакого построения дерева исходников, импортов, анализа типов языка для LLM не делается. Никакой переваренной информации, только голый текст. Просто потому что LLM не обучены такой синтетический граф понимать и извлекать из него пользу.
Если нужно использовать типы, вы научите LLM желаемой парадигме программирования промптом, она сходит в нужные исходники, посмотрит сама типы и напишет

Спасибо за статью! Остался непонятым один вопрос, как Cursor/Windsurf продолжают итеративно вызывать и вызывать модель для работы над одной задачей (даже так что впадают в цикл бесконечный иногда). Ведь LLM имеет ограниченное количество выходных токенов. Как Cursor/Windsurf вместе с LLM делят задачу генерации большого количество кода на куски, и как понимают когда нужно остановиться чтобы спросить пользователя?

В приведенных tool я не увидел инструмента "вызови меня ещё разок, я не закончил". Пробовал спрашивать у самой модели, какие tool она для этого вызывает - не признаётся. Или такого механизма автопродолжения всё же нет? Я заметил что некоторые LLM типа клода любят много писать за раз, иногда даже вижу сообщения среды типа "генерация остановлена после 25 вызовов". А gpt 4.1 как будто бы не умеет самовызов, выплюнет страницу кода и встаёт. Очень интересно что там такое запромпчено на эту тему.

Windsurf юзали, чем отличается от Cursor?

Я юзаю три дня, с тех пор как астрологи объявили неделю халявы для gpt 4.1 в них обоих. Выглядят оба Cursor/Windsurf неотличимо. Как будто это одно приложение которое только что форкнули и переименовали. Ну из мелочей заметил что Windsurf плюется на исходники с кодировкой отличной от UTF8, а Cursor нормально переваривает и 1251. Это все замеченные различия...

Главный вывод здесь — убедиться, что в .cursorrules четко разделяются секции

Курсор очень часто обновляется и я так понимаю что этот баг уже не актуален верно?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий