LINUX.ORG.RU
решено ФорумTalks

[мечты] корзина валют^W языков

 


0

1

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

Смысл сей среды состоит вот в чём:

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

Пример:

<?bash

cat /var/log/something | <?perl

while(my $line=<STDIN>)
{
     $line=~s/([a-z]*)/$1-$1/;

     <?qb

     mid(line,8,10)=--

     ?qb>

     <?awk

     $10~$5 {

          <?c99
              __FIELD_1&=0x73480000;
              
          c?>
          
     } 

     ?awk>
}

?perl>

?bash>

Код приведен для примера, чтобы понятно было о чём речь.

Смысл сей затеи - быстрее писать и использовать то, что лучше подходит в данной ситуации.

Дискасс.

Затея интересная, есть даже относительно успешная реализация [C + Smalltalk = objective-c], но о смешивании случайных языков речь не идёт.

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

PolarFox ★★★★★
()

вашу методику можно будет использовать как отличный обфускатор

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

> но о смешивании случайных языков речь не идёт.

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

Допустим C,C++,Perl,Basic,Pascal,Bash,GLSL,VHDL,PHP

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

Да, в этом как раз таки большинство грабель, но основные типы можно хоть как-то совместить.

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

> Что вам сделали программисты, что вы настолько желаете нам отомстить?

это мой злобный план по захвату мира

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

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

Tark ★★
()

Perl6 позволяет делать вставки на NQP и теоретически на других языках.
С/С++ на ассемблере

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

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

> NQP

ушёл смотреть

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

Да это минус

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

Похоже информация устарела.
Раньше можно было писать что типа
<nqp>
$a = 1;
{{PIR Code}}
</nqp>

Теперь это отменили так как в принципе NQP это подмножество Pel6 но так как Perl6 тогда не очень то работал, то вставки NQP бфли надёжнее.

Осталось только Q:PIR которое позволяет обращаться к PIR напрямую.

Но инфраструктура Parrot и Perl6 позволяют расширять язык относительно легко.

grim ★★☆☆
()

А потом вакансия будет в Jobs: «Ищем программиста-полиглота для поддержки софта на C-Asm-Perl-Java-Bash».

А если серьезно, такая мысль, наверное, многим в голову приходит.

А если совсем серьезно, то первый шаг к этому уже пытались сделать. Это Microsoft .NET.

proud_anon ★★★★★
()

так есть же хацкель

{-# OPTIONS_GHC -fno-warn-type-defaults #-}
{-# LANGUAGE ExtendedDefaultRules, OverloadedStrings #-}
module Hello where
import Language.BASIC
 
main :: IO ()
main = runBASIC $ do
 
    10 PRINT "Hello BASIC World!"

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

думается мне автор имел ввиду что-то типо Vala. потом всё интерпретируется в единый системный язык и уже получившееся компилируется. имелась ввиду только скорость разработки же

OldWiseCat ★★
()

Когда-то давным давно уже разрешили смешивать PHP и HTML. До сих пор некоторых товарищей отучают от этого пинками и подзатыльниками.

Zenom ★★★
()

В одной функции смешивать так - это ужас. Смешивание же на уровне «модулей» - привет, .NET.

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

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

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

> А в рамках одного исходника это реально ночной кошмар.

ничего страшного в этом нет. Если использовать с умом.

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

> ничего страшного в этом нет. Если использовать с умом.
Единственный способ использовать это с умом - не использовать вообще, в 99% случаев. Исключениями (которые надо использовать только если иначе никак!) являются асм в С, LINQ-подобные вкрапления SQL и пр. Но не тот полупереваренный винегрет, который Вы предлагаете.

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

Вообще, такое ощущение, что со всем чудесами нового ОО мира народ забыл старые добрые истины банального модульного программирования.

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

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

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

> банального модульного программирования.

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

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

http://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C%D0%BD%D0%BE...

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

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

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

Почему же, сейча при обработке логов приходится прибегать к вот таким кострукциям

cat /var/log/somelog | awk -f abc.awk | perl come.pl | ...etc

модульность есть, но так сказать, чего-то единого всё таки не хватает.

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

> модульность есть, но так сказать, чего-то единого всё таки не хватает.
В данном конкретном примере - видимо, Вам не хватает удовольствия от unix way. Небольшая эстетическая недоразвитость:) В остальном все нормально. Самое место для бояна:

---

Однажды Мастер Фу сказал заезжему программисту: «В одной строке кода shell-сценария больше духа UNIX, чем в десяти тысячах строк на языке С!»

Программист, гордый своими познаниями в С, ответил: «Может ли быть такое? Ведь С - язык, в котором реализовано само ядро UNIX!»

На это Мастер Фу ответил: «Это так. Тем не менее, в одной строке shell-сценария больше духа UNIX, чем в десяти тысячах строк С!»

Программист выглядел удручённым. «Но ведь через язык С мы познаём просвещённость патриарха Ритчи! Мы уподобляемся человеку с операционной системой и компьютером, который получает непревзойдённую производительность!»

Мастер Фу сказал: «То, что ты говоришь, правда. Однако в одной строке shell-сценария больше духа UNIX, чем в десяти тысячах строк С».

Программист усмехнулся и поднялся, чтобы удалиться. Но Мастер Фу кивнул своему ученику Ньюби, который писал строку shell-кода на стоящей рядом белой доске, и сказал: «Господин программист, посмотрите на этот конвейер! Не заняла бы его реализация на С десять тысяч строк?»

Просматривая то, что написал Ньюби, программист что-то бормотал в бороду. В конце концов он согласился, что это так.

«И сколько часов потребовалось бы вам для реализации и отладки этой программы на языке С?»

«Много», - признал заезжий программист. «Но только безумец стал бы тратить столько времени, когда его ждёт множество более достойных задач».

«Так кто лучше понимает дух UNIX?» - спросил Мастер Фу. «Тот, кто пишет десять тысяч строк, или тот, кто, сознавая тщетность этих усилий, извлекает пользу, не программируя?»

Услышав это, программист достиг просветления.

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

велика сила слов патриарха Эрика С. Реймонда!

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