LINUX.ORG.RU

А есть ли ЯП, которые умеют обходиться без системы сборки?

 , ,


0

1

Которые умеют модифицировать исходники в зависимости от environment на машине разработчика. Например, на которых можно сделать ORM не отдельной тулзой, как Hibernate в жабке (да и, наверное, почти любой ORM) а просто отдельной либой? Ну и далее по списку - сборка целей с различными настройками компилятора, запуск тестов и т.п.

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

Условно (помня о том, что ЛИСП гомоиконный) ASDF, похоже, делает то, о чём я говорю. Возможно, даже и безусловно - не сильно вдавался в подробности.

А ещё?

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

БД, скорее всего, будет на сервере

нет, она будет на компе разработчика - она же не боевая

next_time ★★★★★
() автор топика

По теме: в контексте твоих запросов - любой ЯП, умеющий вычислять в момент компиляции. Лиспы, Perl, Haskell, Scala и вроде C++ (про последний не очень уверен, т.к. там не так всё просто).

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

Нет, совсем нет. Вопрос не в том, чтобы вычислять во время компиляции, а вопрос в том, чтобы

1) удобно вычислять во время компиляции, интегрированно и статически типизированно (ну или аннотации там расставлять, как в питоне)

2) вызывать прямо во время компиляции произвольные функции из собственных библиотек, в тех же плюсах возможно вызвать constexpr функцию, но нельзя вызвать функцию, которая сделает запись в файл, например

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

Кстати, а что у питона с аннотациями типов в ORM -ах ?

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

Фичи из пункта 1 очень сложно совместно реализовать.

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

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

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

но ORM в том же Rust вполне себе делается библиотекой, а не отдельной программой

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

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

А по 2 пункту - зачем тебе писать в файл при компиляции? Если надо писать в файл - пиши в рантайме. Наоборот, разработчики ЯП стремятся ограничить код, выразимый при компиляции. Что бы тебе не сделали rm -rf при каком-нибудь perl -c Модуль.pm (в перле это можно, не знаю, как в других динамических ЯП).

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

зачем тебе писать в файл при компиляции?

например, сгенерировать из xml *h и *cpp, любая gui рисовалка такое умеет, но не изнутри языка, что неудобно

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

Rust мощный язык, которого я не знаю, но всё же, подозреваю что эта ORM работает как движок регекспов в большинстве языков - вспомогательные структуры данных формируются при (первом) использовании того или иного регекспа, а движок по сути интерпретирует их.

Интерпретатор тебе не возбраняется написать практически с любым ЯП.

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

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

«не возбраняется» и удобство вещи разные

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

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

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

Нет. Там всё на этапе компиляции. В том числе и базовая валидация запросов.

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

Главная ORM в Rust - https://github.com/diesel-rs/diesel

Там compile-time генерация финального кода через макросы и аттрибуты

#[derive(Queryable)]
pub struct Post {
    pub id: i32,
    pub title: String,
    pub body: String,
    pub published: bool,
}

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

http://diesel.rs/guides/getting-started/

Сам фреймворк немного нарушает DRY принцип, определяешь одно и то же по много раз, так что что-то мне он не очень уже на уровне getting started нравится

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

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

Не более бредовый, чем миграция на другую СУБД, про которую часто поют адепты ORM. По факту я сталкивался с переходом на другой ЯП чаще.

Во-вторых, можно просто сдампить запросы, генеряемые алхимией.

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

anonymous
()

А есть ли ЯП, которые умеют обходиться без системы сборки?

Red - язык, рантайм и нативная кросскомпиляция под несколько платформ в 1мб бинарнике.

Только он пока еще из альфы не вылез, так что можно сказать не считается.

anonymous
()

Хибер это обычная либа.

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