Продолжение «"Программисты не умеют программировать"»⁠⁠

Просто компилирую почти пустые приложения в Delphi 7 (x86), 11.3, а также Lazarus 2.2.4 (x64). Уровень "Hello, World". Я не менял Uses, оно само туда надобавлялось. Не использовал KOL и прочие навороты.

У Lazarus просто отключал генерацию отладочной информации, у Delphi 11.3 переключал профили Debug/Release (Win32), Delphi 7 (x86) - компилил как есть, на свежеустановленной среде.

Оконное приложение:

vcl, TCaption для вывода "Hello, World". Код примерно такой (Delphi 11.3):

Delphi 11.3

Delphi 11.3

У Lazarus другой список uses:

uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

У Delphi 7 этот список такой:

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

Консольное приложение:

Lazarus

Lazarus

Delphi 11.3

Delphi 11.3

Delphi 7 - как у Lazarus + uses SysUtils.

Навороченное консольное приложение Lazarus 2.2.4. Это стандартная заготовка, я добавил только строчку № 47.

Навороченное консольное приложение Lazarus 2.2.4. Это стандартная заготовка, я добавил только строчку № 47.

По итогу накомпилировал столько приложений:

В виде таблички:

Для Delphi 7 (x86) -- вроде и Debug-версия, но там Debug-файлы генерируются отдельно, т.е. вроде и не Debug.

Решил отдельно замерять по трем компиляторам, даже Delphi 7 откопал, развитие моего комментария: #comment_306393162

Отдельно запустил C# (.NET Framework) с использованием Windows Form и получился такой код:

Все эти Form1 и label1.Text мне что-то смутно напоминают.

Все эти Form1 и label1.Text мне что-то смутно напоминают.

Андерс Хейлсберг приложил свою руку и к Delphi, и к C#. При этом C# вдохновлялась Java, а Java вдохновлялась виртуальными машинами:

в 1973 году с участием Вирта был разработан прототип виртуальной машины, исполняющей на любой платформе промежуточный «пи-код», в который предполагалось компилировать все программы

А Никлаус Вирт создал Паскаль, который лег в основу Delphi.

0
Автор поста оценил этот комментарий

По первой части приведу свой пример: уменя сейчас 7 проектов, использующих общие модули. Разные проекты используют разный набор общих модулей. Часть проектов сертифицируется, и потому должна быть возможность собрать проект в монорепозиторий в виде исходников. Решается проблема сочетанием плагинной архитектуры с менеджером пакетов, плагинная архитектура позволяет менять набор модулей без пересборки, менеджер пакетов позволяет использовать общие модули в разных проектах, и вытянуть исходники в один монорепозиторий. Никаких микросервисов, и соответствуешей потери производительности (но у нас в целом скорее desctop, сетевая часть небольшая, БД до недавнего времени простая).


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


Тут у нас есть два решения. Первое - как раз опции компиляции. Те самы if defined и т.п. Аналоги есть практически в любом языке, но проблема в том, что нужно пробросить опции через менеджер пакетов. Наш менеджер пакетов (conan) это позволяет, мы буквально может указать, что для такого-то проекта нужно использовать такие-то опции. Причем в зависимости от опций можно не только dэпеоеменгые препроцессора добавлять, но подключать или отключать часть исходных файлов. И если заморочиться - скрипт сборки монорепозиторя можно доработать так, чтобы он тоже учитывал опции. Например, так мы выпилиааем тесты из сертифицируемой версии.


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

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


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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Какой- то более-менее универсальный габлонизатор или кодогенератор возможен только для ограниченного

Пример, который я использовал, C#, web (это набросок, переменные могут отличаться):

using MyEngine;

namespace TDO.Product

{

/// <summary>

/// Сущность описания продукта

/// </summary>

public class TProduct : BaseTDO

{

<#@ include file="$Id" #>

<#@ include file="$ProductId" #>

<#@ include file="$Description" #>

<#@ include file="$Post" #>

<#@ include file="$DateCreated" #>

}

}

Файл DateCreated.inc:

/// <summary>

/// Дата создания.

/// </summary>

public DateTime DateCreated { get; set; }

И даже этот вариант слишком многословный.
Вместо того, чтобы написать так:

#u MyEngine;

#n TDO.Product;

{

#s

/// Сущность описания продукта

#s2

#pc TProduct : BaseTDO

{

#i($Id)

#i($ProductId)

#i($Description)
#i($Post)
#i($DateCreated)

}

}

И отдельно файл:

#u = "using";
#n = "namespace";

#s = "/// <summary>";
#s2 = "/// </summary>";
func #i($file_include)

{ return F"<#@ include file="$file_include" #>" }

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества