Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2015, 07:40   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию Теория использования разных ЯП в одной программе

Представим сферическую программу в вакууме, которую обрабатывает интерпретатор. Программа делится на модули (юниты, кому как больше нравится). Допустим основной модуль (то есть что запущено первым) написан на Паскале. В своей работе модуль на Паскале обращается к методу (функции) в модуле на С++. Плюсы такого подхода в том, что каждый программист пишет на том языке, который ему нравится, но имеет больше возможностей использовать чужой код, дабы не писать свои грабли. Кроме того, есть некоторые традиции - библиотеки для решения одного круга задач пишутся на одних языках, другие на других. Конечно в целом и общем все языки программирования так или иначе обладают широким кругом библиотек. Но программисту вдруг станет очевидно, что именно эту библиотеку использовать наиболее удобней в данном проекте. Есть конечно и Dllки и т.д., но не всегда все так гладко (то функции не все, то потом результат преобразовывать к какому-нибудь виду, то формат устарел). В общем допускается не просто возможность, а необходимость использование в программе юнитов на различных языках программирования. Интерпретатор со своей стороны гарантирует, что результаты совместного использования будут адекватно восприняты в другом юните, руководствуясь каким-нибудь соглашением/стандартом. То есть он корректно переведет результат функции int в Integer, осуществит преобразование строки с нулем на конце в паскалевскую и т.д. Возникает вопрос синтаксиса - как можно лаконично вызвать функцию из одного языка в другой? Ну и если имеются еще комментарии также хочу увидеть Ваши рассуждения по данной теме (не только по синтаксису).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 13.04.2015 в 07:43.
Utkin вне форума Ответить с цитированием
Старый 13.04.2015, 07:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как можно лаконично вызвать функцию из одного языка в другой?
Строкой. Я так вызываю FoxPro функции и VBS в своем интерпретаторе.
Ессно строка оформляется по стандарту той системы, что ее обрабатывает.
Грубый пример:
Код:
(fox := foxpro)
(writeln 'Обрабатываю '
 (call fox.proc `=MyFoo(2,"кукуся")`)
)
Где два параметра.
Ну или
Код:
 (i := 2)
 (s := 'Кукуся')
 (call fox.proc ('=MyFoo(' + i + ',"' + s + ' ")') )
Если нужно команду формировать.
Меня лично устраивает
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.04.2015, 08:01   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Это единичный случай (один язык вызывает другие). А здесь более широкий взгляд - любой язык вызывает любой другой. Писать для этого в каждый свой оператор/конструкцию по правилам данного языка или использовать что-то универсальное типа х=$$$call(строка) (и то не факт, что в каком-нибудь php это уже не используется )? Естественно для вызова родного юнита (например Pascal-Pascal) остается прежний синтаксис, короткая форма.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.04.2015, 08:01   #4
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

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

Цитата:
То есть он корректно переведет результат функции int в Integer, осуществит преобразование строки с нулем на конце в паскалевскую и т.д.
Соответсвенно базовый язык будет 1, а остальное будет просто рукоблудством усложняющим чтение, понимание и отладку кода.

Цитата:
В своей работе модуль на Паскале обращается к методу (функции) в модуле на С++.
ActivtX/OLE не? COM не?
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 13.04.2015, 08:09   #5
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Вроде, в таких случаях обычно пишут обёртку вокруг чужого модуля.
ds.Dante вне форума Ответить с цитированием
Старый 13.04.2015, 08:10   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Так может стоит грести широкой частью весла как все, а не мучить рукоятку.
Иногда люди достигают целей просто потому что им неизвестно, что данную цель достичь нельзя. Понимаете о чем я? О стереотипах, искусственных запретах и психологии. Эта препона возможно искусственна, а не естественна. Тем более одни часто следуют за другими - посмотрите на примитивные типы с++ и паскаля. Во многом они идентичны. Да сделаны по-разному, но выражают одни и те же сущности. Да и каноны одинаковы - условия, циклы и т.д. Есть конечно различные нюансы, но это детали реализации, а не принципиальные отличия. С другой стороны за с/с++ гигабайты кода и выкинуть их просто так наверно нецелесообразно.
Цитата:
Соответсвенно базовый язык будет 1, а остальное будет просто рукоблудством усложняющим чтение, понимание и отладку кода.
Базовый язык для программы будет один. Для другой программы он никак не будет регламентирован. Это я предполагаю конечно, никаких данных что именно так все и будет у меня нет.
Цитата:
ActivtX/OLE не? COM не?
Не универсально, сложно, требует кучу сторонних факторов (версии, наличие библиотек и т.д.). Я хочу ближе к телу - юниты на разных языках в одной программе. Также как dll - практически сложно добиться использования в линуксе. То есть придется иметь 2 библиотеки вместо одной. Фактически новые грабли вместо старых.
Цитата:
Вроде, в таких случаях обычно пишут обёртку вокруг чужого модуля.
То есть засовывать в dll? Я хочу избавить программиста от лишних телодвижений. Вы же в программах не разрабатываете список с нуля - пользуетесь готовым инструментом. Я тоже предлагаю готовый инструмент.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.04.2015, 08:17   #7
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Можно использовать Common Language Runtime. Собственно, он для этого и был создан.
ds.Dante вне форума Ответить с цитированием
Старый 13.04.2015, 08:18   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Можно использовать Common Language Runtime.
Ноги идеи оттуда тянутся . Только со своими преферансом и поэтессами.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 13.04.2015, 08:45   #9
mv28jam
Старожил
 
Аватар для mv28jam
 
Регистрация: 09.09.2008
Сообщений: 2,624
По умолчанию

Цитата:
Иногда люди достигают целей просто потому что им неизвестно, что данную цель достичь нельзя. Понимаете о чем я?
Дико извиняюсь, но в голову приходит только пример с сапогом на голове...

Цитата:
Базовый язык для программы будет один.
Зачем тогда использовать 2 разных синтаксиса в одном (условно) файле? Это одни проблемы. Не проще ли не мешать синтаксис, а писать программу в стиле текущего "файла". Библиотеки вызываем в стиле текущего языка, а компилятор уже по какому-то указателю преобразует вызов в базовый язык.
Стрелок-охотник
mv28jam вне форума Ответить с цитированием
Старый 13.04.2015, 08:59   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Дико извиняюсь, но в голову приходит только пример с сапогом на голове...
Такое тоже возможно . Но задача немного другая.
Цитата:
Зачем тогда использовать 2 разных синтаксиса в одном (условно) файле?
Нет, юниты они же в разных файлах. Ну вот Паскаль возьмите. Есть программа. Она состоит из разных юнитов. Каждый юнит это отдельный файл с расширением pas. Задача в том, чтобы там были не только pas, но и cpp к примеру тоже. Я не знаю как Вам обрисовать начальные данные.
Цитата:
Не проще ли не мешать синтаксис, а писать программу в стиле текущего "файла".
Задача как раз в том чтобы не мешать синтаксисы, а локализовать каждый язык в своем юните (файле).
Цитата:
Библиотеки вызываем в стиле текущего языка, а компилятор уже по какому-то указателю преобразует вызов в базовый язык.
Примерно об этом речь и идет! Просто Вы вызываете функции не глядя на чем они написаны. Если не понятно, я дам конкретный пример какой-нибудь надуманной задачки.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет в разных листах одной книги 10uhfa Microsoft Office Excel 0 23.12.2012 19:24
использование одной переменной в разных объектах SUDALV Visual C++ 0 20.04.2011 20:12
Delphi (Проверить правильность использования массивов в программе написанной на языке C++) Skyriver Помощь студентам 5 24.01.2011 20:10
Объединение данных из разных Файлов на разных листах одной книги Nikodim113 Microsoft Office Excel 20 12.01.2011 07:12
Два разных значения в одной ячейки! nisan Microsoft Office Excel 25 29.10.2010 00:12