Всем привет. Предыдущие две публикации сопровождались комментариями «Это все уже было». Я провел некоторые изыскания и предлагаю вашему вниманию еще одно видео. Первые 4 мин. 20 сек. содержат только новое, чего я не нашел в других фреймворках. Остаток видео — то что уже где-то есть, но я сделал это лучше (проще и удобнее).

Данное видео — концепция, это не ПО готовое к употреблению. Это публикуется здесь, чтобы быть улучшенным.



Транскрипт под катом.

Hi everyone!
Today I will show you a short presentation about G5. The first step is aspect-oriented programming.
It's not classical in G5, let's have a look at it.
Here is a simple method with some business logic. It’s short and understandable.
But programs usually contain other aspects
For example, business restrictions.
Another aspect is checking for system errors.
Don’t forget about error handlers.
Sometimes you need logger for debugging.
Aspect of documentation is very important too.
Aspect of the optimization, it can make your source code disgusting, but you really need it.
Let’s also add aspect of business errors and some metadata for unit tests.
And now, you can do at least two things with the aspects.
First, you can hide the aspects from the screen using this buttons.
Secondly, you can disable compilation of any aspects, for example debug and optimization.
You can define your own aspect, for example aspect of the security.
You can use annotations for one or several methods or special constructions with the template of the source code.
Specification language: it’s designed for distributed applications.
The first part of it is “entities”. They are like data contracts, but better.
You can define business structures with them, and then use it in the source code of several applications.
Thera are no data types of G5, so you can use it with any programming languages.
Specification language is not a part of the source code; it’s only metadata for the compiler, and I’m using annotations instead of inheritance.
You can define any public or private fields and methods in your classes.
You can change types for the main fields, but they must be compatible with the types of the entity.
You can set the main fields as public or private, as you wish.
You can even rename fields.
You can’t delete the main field, but you can ignore it.
And of course you can’t change business restrictions.
Well, Entities help you to control data structures in distributed applications without common base classes.
Your applications are not related anymore, and this is more reliable way to create enterprise solutions.
Specification language is an aspect of the design; you can hide it and disable compilation for it.
The second part of the specification language is API.
You can describe your API using WSDL or any other languages. Here is an example for USDS.
I defined two structures and a function and now I will create a server for this API.
In this case the compiler will use annotations to create additional methods for the class “MyServer”.
This is very fast and simple way to create a server application.
The next part is library specifications.
I will show you an example of how to create a plugin for the application using specification language.
I defined description of the library, two classes.
Now, I can create realization of this specification.
The compiler will use annotation to store function names in the library file.
Any methods without the annotations won’t be visible in the library.
I will import my plugin dynamically.
The compiler will again use the annotation to create additional methods — fabrics of the Business class and first class.
You can use the same way to import standard Windows or Linux dynamic libraries.
Chapter three — Declarative programming using widgets.
There are many widgets in G5, I will show you four of them.
The first one is a text widget.
You can use any symbols inside it.
You can define this text field as translatable and set any text encode.
The next one is a source code widget.
It’s very similar to the text widget, but it has syntax highlighting and macros.
You can use the macros to change the source code in the widget, and then you can compile the code in runtime and execute it.
The third example is a widget for user interfaces.
Just draw a window as you wish and then you can use it’s elements in the source code.
G5 contains many other widgets: for databases, for regular expressions etc. You can also create a new widget for G5.
The last example is a widget “Report”.
This widget can contain the source code.
It’s also a part of the file “main.code”, so the widget can use the local variables and functions of the file.
The widget can request data for itself and change report formatting.
You can save the report in PDF, HTML or any other format.
And here is the result.
Chapter four, Language oriented programming.
You can create your own domain-specific programming language using G5.
Thera are at least two possibilities for DSL in G5.
The firs one is you can define new language semantics. Let’s have a look at it.
Here is a class with an array inside. You can set the element’s value using this method.
But it looks not good. The batter way is using an access operator.
I will define this constriction using the keyword “Semantics”.
The first part is the code template, and the second part is realization.
I wrote only for lines and it works now.
What about more complex constructions?
For example, a cycle in this style.
And again, I’m defining the template and it’s realization. Seven lines and it works too.
Another useful thing is physical variables.
You can define it and use in your functions and methods.
You can also define several variables and relations between them.
The values will be converted correctly after that.
Conversions between physical variables and G5 types are possible too.
The compiler controls all wrong conversions.
Well, create new semantics and widgets, use physical variables and you will get a powerful domain-specific language.
That's all for today.
If you like this presentation, please share the video with your friends.
I’m ready to answer any questions, please contact me at this email address.
Thank you for your attention.
Поделиться с друзьями
-->

Комментарии (24)


  1. lair
    09.09.2016 14:44
    +13

    А ничего, что хабр — русскоязычное сообщество?


    1. saluev
      09.09.2016 15:04
      +6

      И ещё это сайт про статьи, а не видеохостиг


    1. Zashibis
      09.09.2016 15:05
      -36

      Спасибо, ваш комментарий очень полезен для проекта! Аффтар, пиши еще!


      1. NeoCode
        09.09.2016 15:17
        +21

        Вы поймите, у вас скорее всего замечательный проект (на самом деле очень немногие могут похвастаться чем-то подобным даже здесь). Но минусуют вас именно за форму подачи материала.
        Да, возможно рассказывать про интерактивную среду разработки в статической текстовой статье без видео было бы не совсем правильно — сложно в тексте описать все то что вы сделали. Но и чисто видео без всего — это тоже не формат данного ресурса.
        Сделайте нормальную статью. Расскажите про историю развития проекта, про основные идеи, фичи и причины их возникновения, расскажите какие проблемы решает ваша разработка, есть ли аналоги, в чем преимущества по сравнению с другими подходами. Сделайте иллюстрации, возможно анимированные гифки. И в конце добавьте видео (на русском языке) для тех кто хочет подробностей — тогда отношение будет совсем другое.
        Вы конечно можете возразить — не слишком ли мы много хотим, что нам еще и гифки подавай. На самом деле это не «мы хотим» — в данном случае именно вы хотите, чтобы ваша идея стала популярной, а это лишь совет о том, как сделать лучше :)


    1. Antervis
      12.09.2016 06:08

      однако это не отменяет того факта, что разработчик ПО обязан знать английский хотя бы на intermediate уровне.


      1. lair
        12.09.2016 09:47

        … и в частности — разницу между realization и implementation.


  1. olegl84
    09.09.2016 15:11
    -2

    Ну а че, крутая концеция и свежий взгляд.


    1. napa3um
      10.09.2016 08:03

      Упражнения в английском.


  1. antstar
    09.09.2016 17:13
    +1

    Я вижу IDE с офигительными возможностями, которые можно прикрутить практически к любому языку.
    В чем смысл «нового» языка кроме удобства написания кода (достоинство IDE, сильно сомневаюсь, чтобы в нотепаде так же все удобно было) вообще непонятно.
    Автор, может Вам сконцентрироваться именно на IDE -шке? Более чем достойная область для приложения усилий.


    1. Zashibis
      09.09.2016 18:30
      -2

      Одна лишь IDE не прокатит. Местами возникнут проблемы из-за ограничения языка.
      Еще большая проблема — компилятор должен быть тесно интегрирован с IDE, чтобы плагины были гибкие.
      А если уж мы пишем компилятор — то можно и язык наваять, который будет очень похож на C++/C#/Java/Python, но устранит их мелкие недостатки синтаксиса.


      1. saluev
        09.09.2016 18:57

        то можно и язык наваять

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


      1. antstar
        11.09.2016 07:36

        который будет очень похож на C++/C#/Java/Python

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


  1. pda0
    09.09.2016 17:14
    +1

    Сворачивание кода по блокам, декларативное рисование формочки с автосозданием объектов… Сдаётся, что она Delphi изобрела. :)


    1. Daniro_San
      10.09.2016 06:07
      +1

      Она? А вы уверены что автор топика женщина?


      1. pda0
        10.09.2016 13:16

        С приличной долей вероятности я уверен, что автор видео — женщина.


        1. Daniro_San
          11.09.2016 09:59

          Похоже что тут опечатка или...

          Посмотрел, спасибо за ссылку. Я не уверен, что надо добавлять в язык программирования математические символы. Смешивать процедурный язык с функциональным — может оказаться очень болезненно.


          1. pda0
            11.09.2016 13:52

            Хм… А и правда, на видео голос не женский. Наверное зря я смотрел это видео на работе вчереом в пятницу. Мозги в этот момент обычно уже где-то далеко… :)


  1. vird
    10.09.2016 08:06
    +1

    Подобная концепция уже была реализована. См. jetbrains mps.
    Ваша реализация есть. Это уже хорошо.

    Хорошим показателем пригодности подхода являются результаты. Есть хотя бы один живой проект написанный при помощи этой системы? (За примерами далеко ходить не надо Facebook использует React, Google использует Tensor flow, т.е. продукт не создавался в вакууме, а потом ему находили применение, а сначала показали применение, а потом сказали «а знаете, а давайте теперь все будем это поддерживать, потому что мы задолбались» Прим. бывают и другие мотивы)

    Первым проектом может быть замыкание на себя. Обычная практика если ты пишешь новый ЯП, переписать как можно быстрее его же транслятор/компилятор на нём же. См. coffeescript. См. http://hiasm.com/, сайт написан на своей же системе.
    Это уже сделано?

    Прим. Еще будет огромная проблема с созданием нормальной системы контроля версий под проекционные языки программирования (если вы храните всё в AST). Если вы не храните в AST будет другая проблема, загрузка большого проекта может занимать 15 минут т.к. все DSL и прочее требуют строгой очерёдности парсинга. Использование git'а для xml или json будет порождать необходимость делать merge за пределами няшной IDE, что добавляет трудности и очевидный вопрос «если мне merge'ить все-равно приходится в текстовом редакторе, то может я и код буду писать в текстовом редакторе?»


    1. Zashibis
      12.09.2016 09:50

      jetbrains mps я смотрел. Да, там реализовано «создание DSL», но даже они не были первыми в этом деле. У них также есть виджеты в исходном коде, но мое предложение все-таки удобнее: мой виджет «исходный код» этому очень способствует.
      Также я не увидел в jetbrains mps аспектов и языка спецификаций.
      Система контроля версий действительно должна быть создана отдельно. Хранится все не в AST, но и не в виде текстовых файлов.
      Вообще все упирается в бабло: не может 1-10 и даже 100 человек налобать за короткий срок и за бесплатно такой продукт. Действиетлньо нужна большая компания, которая встанет за проектом.


      1. lair
        12.09.2016 12:19

        не в виде текстовых файлов.

        И как тогда делать diff/merge?


        1. Zashibis
          12.09.2016 13:06

          Это же очевидно — специальными утилитами из комплекта установки G5.
          И можете даже не пытаться ныть про «я привык к стандартному diff».


          1. lair
            12.09.2016 13:08

            Ну то есть все существующие инфраструктурные решения нафиг.


            Но зачем?


  1. AndreyDmitriev
    11.09.2016 09:44

    Вы как-то не очень удачно «G5» выбрали. G-это вообще говоря графический язык, использующийся в LabVIEW.
    Цитируя википедию:

    ...LabVIEW is a system-design platform and development environment for a visual programming language <...> The graphical language is named «G»; not to be confused with G-code. Originally released for the Apple Macintosh in 1986,...


    1. Antervis
      12.09.2016 06:08

      вероятно «G» не от «Graphic» а от «Generation»