C# — C# with Linux


Содержание

Разработка приложений на С# в Linux среде

C# — язык для разработки .NET приложений от Microsoft. Если название последней фирмы Вас не испугало и всё-таки нужно писать эти приложения — можно делать это в любимой ОС. В статье рассмотрен необходимый софт, а также создаётся первая программа.

Почти все знают, что .NET — платформа, разработанная компанией Microsoft, а эта корпорация ничего не делает задаром… Итак, язык C#. Хммм, странно, почему же он так напоминает Java? Ладно, проехали… Будем надеяться, что M$ заплатят за свои грехи. Но иногда даже заядлым линуксоидам приходиться программировать на этом языке. Не лезть же для этого в популярную проприетарную ОС? В этом случае нам на помощь приходит проект Mono. Вот, что про него пишут на официальном сайте:

Mono provides the necessary software to develop and run .NET client and server applications on Linux, Solaris, Mac OS X, Windows, and Unix.

То есть это тот набор утилит, что нам нужен. Собранные пакеты есть почти для всех популярных дистрибутивов Linux, либо сразу входят в набор дополнительного (но не установленного) софта. Итак, скачать Mono можно со странички http://www.mono-project.com/Downloads. Если готового пакета для нужного дистрибутива нет — то можно собрать Mono из исходного кода. Правда, компилируется он довольно долго.

После установки Mono мы уже можем успешно запускать .NET-приложения. Даже те, которые были написаны в Windows и имеют расширение .ехе. Но радоваться тут нечему — приложения “летают” со скоростью эмулятора. Хотя, под Windows скорость их работы примерно такая же :)

Разработчики Mono обещали нам также возможность разработки приложений. Но где же она? Mono — чисто консольное приложение и предназначено для запуска .NET программ. А возможность разработки заключается в том, что в комплект входит ещё и компилятор C#. Никакой удобной IDE для разработки в пакете нет. Это не понравится девелоперам, которые уже успели попользовать проприетарную Visual Studio. Но в Linux даже из безвыходных ситуаций всегда найдётся выход! :)

Удобная IDE для разработки С# приложений есть! И она называется MonoDevelop. Эта среда не входит в пакет Mono, так что качать и ставить её придётся отдельно. Скачать можно с официального сайта: http://www.monodevelop.com/Download. Надеюсь, с установкой у читателя проблем не возникнет.

Теперь создадим свой первый проект на С# под Linux. Для этого нужно запустить monodevelop. По медленной скорости загрузки этого приложения можно понять, что такое интерпретируемый язык… Эта среда так долго запускается только в первый раз. Во время этой загрузки она создаёт необходимые конфигурационные файлы, подготавливает систему к работе. В последующие разы IDE будет грузиться немного быстрее.

Итак, создадим новый проект. Это можно сделать либо кликнув по ссылке “Start a New Project” в окне приветствия, либо в меню “Файл” -> “Новый проект”. По умолчанию выбран “Консольный проект”. Так как это наше первое приложение — его и выбираем. В качестве названия я ввел “hello”, название решения выставилось автоматически.

После этого появится диалог “Project Features”. Пока там можно ничего не выбирать (ну, или “Unix integration” наконец :) ). Кликаем “ОК” — и код минимального приложения создан:

Допишем чуть-чуть кода, чтобы наше приложение еще и читало какие-нибудь данные из консоли и выводило ткуда что-то. Код заменим на:

После этого сохраняем файл (тандартный хоткей Ctrl+S — рабочий) и компилируем программу. Это можно сделать либо при помощи меню “Проект” -> “Простроение hello” / “Построение решения”, либо при помощи соответствующей кнопки на панели инструментов, либо ещё удобнее — по клавише F7. После этого в журнале построения должно появиться сообщение об успешной сборке.

Как видно, MonoDelvelop вполне функциональная и удобная среда. В ней уже можно с комфортом разрабатывать приложения. Порадовала относительно хорошая русская локализация — даже сообщения компилятора выводятся на русском языке. Большое количество настроек порадует любого девелопера. Также среда может помочь создать архив с новоразработанным приложением. Причём, сделать как версию с исходными кодами, так и с бинарными файлами. Отучают нас от консоли, балуют! :)

Ещё одной приятной фишкой среды было автодополнение функций. При введении символа “.”(точка) после объекта какого-нибудь класса во всплывающем окошке отображаются все методы и свойства этого класса, будь то встроенный или только что написанный класс. Причём, можно использовать клавиши стрелок для навигации по этому списку и по каждой функции будет отображено краткое описание (если таковое имеется). Также можно продолжать вводить имя нужной функции с клавиатуры — тогда поиск в окне-подсказке будет совершён автоматически:

В целом эта IDE оставляет приятные ощущения. И это не смотря на очень раннюю версию (0.15). Уже виднеются кроссплатформенные конкуренты Visual Studio от MS! :) Но некоторые жизненно важные возможности пока не реализованы. Например, отладка. Если нужно написать небольшое приложение — то можно его написать и без отладки. Но писать серьёзные коммерческие приложения в этой среде пока будет трудновато. Остаётся лишь надеяться, что разработчики не заставят нас долго ждать и уже в ближайших версиях пошаговая отладка появится.

Теперь запустим нашу программу. Если сделать это при помощи кнопки “Запустить” (F5), то программа обругает нас, мол “Unhandled Exception: System.ArgumentNullException: Argument cannot be null…” Это происходит потому, что в поле “Возраст” мы должны были ввести число, а программа автоматически подставила значение null.

Чтоб ощутить, что мы написали реально рабочее приложение запустим его вручную. Для этого нужно перейти в каталог проекта. Потом в нем в каталог ./bin/Debug/. И в этом каталоге уже будет лежать наше готовое кроссплатформенное приложение. Можем запустить его при помощи mono и посмотреть результат:

Как видите, приложение работает :) Теперь вернёмся к исходному коду. В нём показаны почти все основные принципы ООП:

  • Инкапсуляция (скрытие полей объекта от других классов) — напрямую обращаться к свойствам объекта Me нельзя, компилятор выдаст ошибку. Для обращений к этим полям нужно использовать специальные доступные функции (API — Application Prorgramm Interface). Конкретно в данном примере это функции AddToUniversity и Write.
  • Полиморфизм (возможность использования одинаковых имён). А именно, в функцию AddToUniversity передаются переменные, соответствующие классовым; вывод данных — функция Write.
  • Наследование (в примере использовано не было). В остальном исходный код должен быть понятен, так как приложеньице совсем маленькое. Однако даже маленькоее приложение может быть революционным шагом в истории! Ведь теперь для разработки приложений даже на C# вовсе не обязательно использовать Windows…

При написании данного материала были использованы:

  • ОС : Gentoo Linux 2007.0
  • Браузер : Mozilla Firefox 2.0.0.6
  • Файловый менеджер : Midnight Commander 4.6.1 с набором патчей
  • Эмулятор терминала : Konsole 1.6.6 (просвечивается картинка на рабочем столе)
  • Текстовый редактор : GVim 7.1 (он же использовался для подсвечивания синтаксиса C# в материале)
  • Графический редактор : Gimp 2.4.0
  • Оконный менеджер : KDE 3.5.7
  • Mono 1.2.4
  • MonoDevelop 0.15

Other Linux

2007-09-04 RUSSIAN
russian tools console linux c#

Начало работы с C# и Visual Studio Code Get started with C# and Visual Studio Code

.NET Core предcтавляет собой быструю модульную платформу для создания приложений, работающих на ОС Windows, Linux и macOS. .NET Core gives you a fast and modular platform for creating applications that run on Windows, Linux, and macOS. Visual Studio Code с расширением C# позволяет эффективно работать с кодом, а также обеспечивает полную поддержку IntelliSense (интеллектуальное завершение кода) и отладки для языка C#. Use Visual Studio Code with the C# extension to get a powerful editing experience with full support for C# IntelliSense (smart code completion) and debugging.

Предварительные требования Prerequisites

  1. Установите Visual Studio Code. Install Visual Studio Code.
  2. Установите пакета SDK для .NET Core. Install the .NET Core SDK.
  3. Установите расширение C# для Visual Studio Code. Install the C# extension for Visual Studio Code. См. дополнительные сведения об установке расширений Visual Studio Code из Marketplace. For more information about how to install extensions on Visual Studio Code, see VS Code Extension Marketplace.

Hello World Hello World

Давайте начнем с создания простой программы Hello World для .NET Core. Let’s get started with a simple «Hello World» program on .NET Core:

Откройте проект. Open a project:

Откройте Visual Studio Code. Open Visual Studio Code.

Щелкните значок обозревателя в расположенном слева меню, затем щелкнитеОткрыть папку. Click on the Explorer icon on the left menu and then click Open Folder.

Выберите Файл > Открыть папку в главном меню, чтобы открыть папку, в которой вы хотите разместить проект C#, и щелкните Выбрать папку. Select File > Open Folder from the main menu to open the folder you want your C# project to be in and click Select Folder. В нашем примере мы создаем для проекта папку с именем HelloWorld. For our example, we’re creating a folder for our project named HelloWorld.

Инициализируйте проект C#. Initialize a C# project:

Откройте в Visual Studio Code интегрированный терминал, выбрав Просмотр > Интегрированный терминал в главном меню. Open the Integrated Terminal from Visual Studio Code by selecting View > Integrated Terminal from the main menu.

В окне терминала введите dotnet new console . In the terminal window, type dotnet new console .

Эта команда создает в выбранной папке файл Program.cs с уже готовой простой программой Hello World, а также файл проекта C# с именем HelloWorld.csproj. This command creates a Program.cs file in your folder with a simple «Hello World» program already written, along with a C# project file named HelloWorld.csproj.

Выполните разрешение для средств сборки: Resolve the build assets:


Для .NET Core 1.x введите dotnet restore . For .NET Core 1.x, type dotnet restore . Команда dotnet restore предоставляет доступ к пакетам .NET Core, которые необходимы для сборки этого проекта. Running dotnet restore gives you access to the required .NET Core packages that are needed to build your project.

Начиная с пакета SDK для .NET Core 2.0 нет необходимости выполнять команду dotnet restore , так как она выполняется неявно всеми командами, которые требуют восстановления, например dotnet new , dotnet build и dotnet run . Starting with .NET Core 2.0 SDK, you don’t have to run dotnet restore because it’s run implicitly by all commands that require a restore to occur, such as dotnet new , dotnet build and dotnet run . Эту команду по-прежнему можно использовать в некоторых сценариях, где необходимо явное восстановление, например в сборках с использованием непрерывной интеграции в Azure DevOps Services или системах сборки, где требуется явно контролировать время восстановления. It’s still a valid command in certain scenarios where doing an explicit restore makes sense, such as continuous integration builds in Azure DevOps Services or in build systems that need to explicitly control the time at which the restore occurs.

Запустите программу Hello World. Run the «Hello World» program:

Введите dotnet run . Type dotnet run .

Вы можете просмотреть небольшие видеоматериалы с информацией о процессе настройки для Windows, macOS, или Linux. You can also watch a short video tutorial for further setup help on Windows, macOS, or Linux.

Отладка Debug

Откройте файл Program.cs, щелкнув его. Open Program.cs by clicking on it. Когда вы в первый раз открываете файл C# в Visual Studio Code, в редакторе загружается OmniSharp. The first time you open a C# file in Visual Studio Code, OmniSharp loads in the editor.

Visual Studio Code предлагает добавить недостающие ресурсы для сборки и отладки приложения. Visual Studio Code should prompt you to add the missing assets to build and debug your app. Выберите ответ Да. Select Yes.

Чтобы открыть окно отладки, щелкните значок «Отладка» в меню слева. To open the Debug view, click on the Debugging icon on the left side menu.

Найдите зеленую стрелку в верхней части панели. Locate the green arrow at the top of the pane. Убедитесь, что в раскрывающемся списке рядом с ней выбран вариант Запуск .NET Core (консоль) . Make sure the drop-down next to it has .NET Core Launch (console) selected.

Добавьте в проект точку останова, щелкнув поле редактора (пустое пространство слева от номеров строк) в строке 9, или переместите курсор текста в строку 9 в редакторе и нажмите клавишу F9 . Add a breakpoint to your project by clicking on the editor margin, which is the space on the left of the line numbers in the editor, next to line 9, or move the text cursor onto line 9 in the editor and press F9 .

Чтобы начать отладку, нажмите клавишу F5 или щелкните зеленую стрелку. To start debugging, press F5 or select the green arrow. Отладчик останавливает выполнение программы, когда достигнет точки останова, которую вы только что установили. The debugger stops execution of your program when it reaches the breakpoint you set in the previous step.

  • Во время отладки вы можете просматривать локальные переменные в верхней левой области или в консоли отладки. While debugging, you can view your local variables in the top left pane or use the debug console.

Выберите синюю стрелку в верхней части, чтобы продолжить отладку, или выберите красный квадрат в верхней части, чтобы остановить процесс. Select the blue arrow at the top to continue debugging, or select the red square at the top to stop.

Дополнительные сведения и советы по отладке .NET Core в Visual Studio Code с помощью OmniSharp см. в разделе Инструкции по настройке отладчика .NET Core. For more information and troubleshooting tips on .NET Core debugging with OmniSharp in Visual Studio Code, see Instructions for setting up the .NET Core debugger.

Добавление класса Add a class

Чтобы добавить новый класс, щелкните правой кнопкой мыши в обозревателе VSCode и выберите Новый файл. To add a new class, right click in the VSCode Explorer and select New File. Так вы добавите новый файл в папку, открытую в VSCode. This adds a new file to the folder you have open in VSCode.

Назовите файл MyClass.cs. Name your file MyClass.cs. Необходимо сохранить его с расширением .cs , чтобы он распознавался как файл С#. You must save it with a .cs extension at the end for it to be recognized as a csharp file.

Добавьте приведенный ниже код для создания класса. Add the code below to create your first class. Включите правильное пространство имен, на которое будет создана ссылка из файла Program.cs: Make sure to include the correct namespace so you can reference it from your Program.cs file:

Вызовите новый класс из метода main в Program.cs, добавив приведенный ниже код: Call your new class from your main method in Program.cs by adding the code below:

Сохраните изменения и снова запустите программу. Save your changes and run your program again. Должно отобразиться новое сообщение с добавленной строкой. The new message should appear with the appended string.

Цукерберг рекомендует:  Создание RESTful API на Lumen

C# and .NET on Linux

C# on Linux exists for a long time, but many users are unaware of this. The languages that are used most today on Linux are still C, C++ and various scripting languages Python, Perl and Ruby. Miguel de Icaza, the founder of the Gnome Desktop, was the one who aimed to develop an open, crossplatform C# compiler and Common Language Runtime for Linux, Unix and macOS in 2001. The results suceeded in 2004 in the Mono Project 1 , which is an open implementation of ECMA-334 Standard 2 which defines the C# language itself and the ECMA-335 Standard 3 which defines a Common Language Infrastructure for different languages, such as C#.

The situation on Linux

You may have used or heard of applications like Banshee music player, F-Spot, a software for organizing photos or Tomboy, a Wiki-like tool for desktop notes. All these applications were developed with Mono and had some remarkable success, but the critics were harsh, Mono at this time somewhat slow and the fear to use something that had to do with Microsoft, the company that has called Linux and the Free Software Movement as “cancer” 4 , was huge.

14 years later, the IT world has changed. Microsoft is not only a member of the Linux Foundation 5 and a sponsor of the Open Source Initiative 6 , but also open-sourced various of its technologies and tools. The Mono Project still exists and since that time has produced some well known projects like the Unity Game Engine 7 , MonoDevelop 8 , an >9 . Nevertheless all of the Mono-based Linux applications like Banshee, F-Spot and Tomboy have died or aren’t actively maintained anymore. Unfortunately I’m not aware of a single Linux Desktop application that was made with C# beside MonoDevelop (edit: now I am, the password manager KeePass2 was build with Mono). It seems that the reputation of C# development in the Open Source community is still very bad.

The licensing question

One of the major critics is the fear, that Microsoft could start a lawsuit against the Mono project. Although the .NET Standard is an open ECMA-Standard, Microsoft holds patents for its own .NET implementation, which is the Microsoft .NET Framework. Mono itself is mainly licensed under the MIT license, with parts being licensed under the BSD and the Apache license 10 . Microsoft has given a Patent Promise 11 — not license — that the company will not assert any patents against the project or software written with Mono, as long as the runtime used still implements the full ECMA-335 Standard. And until today Microsoft d >12 in 2020, the company of Miguel de Icaza, which is the main developer of the Mono project. Microsoft even affirmed that they are interested to support and to continue the Open Source .NET implementation 13 .

In the same year Microsoft released its own open and crossplatform .NET implementation, called .NET Core 14 . .NET Core runs on Linux, macOS and Windows. .NET Core itself is also licensed under the MIT-License 15 with an similar additional “Patent Promise for .NET Libraries and Runtime Components” 16 . Again Microsoft assures, not to “assert any .NET patents” against developers for “making, using, selling, offering for sale, importing, or distributing Covered Code” as long as the code is part of any compliant .NET runtime implementation (that follows the ECMA-335 standard) or is designed to run on such an implementation. In other words, as long as your code which is using the .NET libraries or code that you modified runs under .NET, .NET Core or Mono, everything is fine. When you try to reimplement patented code on any other runtime (like Java, Ruby etc.) or when you try to strip down a .NET runtime to a subset of the ECMA standard, then you could get in trouble.

Of course this promise is discussed very controversal in the Open Source community. You don’t have the full freedom to do what you want with the software, as you would perhaps expect from a license such as the MIT license. But from my point of view, this is an similar situation with Oracle, which holds patents on parts of the Java language and its JRE/JDK. Even Google owns patents regarding the Go programming language. At least each user has to decide for his self if he/her can live with these restrictions. But as Microsoft is highly interested in attrating developers and — unlike 20 years ago — not a platform but the ecosystem is the most important value of an IT company, it is very unlikely that Microsoft will drop its Open Source initiatives or will chase developers by starting lawsuits.

Do you already use or plan to use C# / .NET Core on Linux?

Create a .NET Core 2 application on Linux with Visual Studio Code

The plan is to work some with Linux and I have chosen Ubuntu 16.04 LTS because this, AFAIK, is the flavor which Azure App Service Linux containers runs, see more about that here.

I built my Ubuntu work station, by downloading the ISO from the Ubuntu site here and burning it to a DVD. Yes, a DVD, I happened to have a DVD under my desk covered in dust and I have a workstation with a burner. Anyway, I got a nice Lenovo T510 off EBay and it works good so far. Ubuntu was installed very fast without any problems or difficulties.

Next, I downloaded and installed Visual Studio Code from here, as seen in Figure 1.

Figure 1, How to install Visual Studio Code on Ubuntu Linux

Downloaded and installed as per Figure 2.

Figure 2, How to install Visual Studio Code on Ubuntu Linux

As seen in Figure 3, it is required/advised to register the Microsoft Product Key as trusted, by running these commands. Select View –> Integrated Terminal to open a BASH command window within Visual Studio Code.

Notice that it needs CURL, so if you do not already have CURL, like I experienced, then you need to execute this command.

Figure 3, How to install Visual Studio Code on Ubuntu Linux

Then you need to get any updates by executing these commands: (this is all documented here BTW)


To install .NET Core 2.0 execute this command, and see Figure 4.

Figure 4, How to install Visual Studio Code on Ubuntu Linux with .NET Core 2.0

Then check the version of the DOTNET core binaries by entering this command, see Figure 5.

Figure 5, How to install Visual Studio Code on Ubuntu Linux with .NET Core 2.0

Execute this command and see Figure 6 to create a new .NET Core 2.0 console application:

Figure 6, How to install Visual Studio Code on Ubuntu Linux with .NET Core 2.0

Finally, enter dontnet run and the code is executed, see Figure 7.

Figure 7, How to install Visual Studio Code on Ubuntu Linux with .NET Core 2.0

The process also runs in a DOTNET process, Figure 8, so my next step is to create a more complicated .NET Core application on Linux, then capture a dump and debug it. That should be cool.

Figure 8, DOTNET process on Ubuntu Linux, debugging it

The adventure/F5 refresh has begun.

Subscribe Blog via Email

Subscribe to this blog and receive notifications of new posts by email.

lzomedia / Copile C# Linux

==
Visual Studio
http://stackoverflow.com/questions/8264323/how-to-compile-a-visual-studio-c-sharp-project-with-mono
apt-get install mono-complete
and run from the command line :
xbuild mysolution.sln
xbuild myproject.csproj
==

This comment has been minimized.

Copy link Quote reply

shopglobal commented Aug 26, 2020

This comment has been minimized.

Copy link Quote reply

shopglobal commented Aug 26, 2020

  • © 2020 GitHub , Inc.
  • Terms
  • Privacy
  • Security
  • Status
  • Help

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

10 фич в C#, о которых вы определённо должны узнать и начать их использовать

Если вы только начали изучение C# или же решили расширить свои знания, мы нашли для вас 10 фич, знание которых позволит вам избежать ошибок, писать более понятный код и сохранить кучу времени.

1. async / await

Использование паттернов async / await позволяет разблокировать UI / текущий поток во время выполнения блочных операторов. Паттерны async / await позволяют коду продолжить выполнение, даже если что-то блокирует его выполнение (например, веб-запрос).

2. Инициализаторы объектов / массивов / коллекций

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

3. Лямбды, предикаты, делегаты и замыкания

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

4. ?? (Оператор объединения с NULL)

x ?? y — возвращает x , если значение отличается от null ; в противном случае возвращает y .

Может быть несколько операторов .


?? также может быть использован для перевода типов null в не null :

5. $”” (Интерполяция строк) — C# 6

Фича в C# 6 позволяет эффективно и элегантно собирать строки:

6. ?.(определяет null) — C# 6

x?.y — доступ к членам, определяемый условием null . Возвращает значение null , если левый операнд имеет значение null .

Больше никаких NullReferenceExceptions!

7. Выражение nameof — C# 6

Может показаться, что выражение nameof не особо полезно, но это не так. При использовании автоматических инструментов рефакторинга (например, ReSharper) иногда может потребоваться обратиться к аргументу метода по его имени:

Вот, как это должно быть:

8. Инициализаторы свойств (property) — C# 6

Инициализаторы свойств позволяют задавать начальные значения для свойств:

Польза их использования заключается в том, что вы не можете объявить setter, тем самым делая свойства неизменяемыми. Инициализаторы свойств хорошо работают в связке с синтаксисом первичного конструктора в C# 6.

9. Операторы as и is

Is — совместимость типов. Возвращает значение true, если вычисленный левый операнд может быть приведен к типу, указанному в правом операнде (статический тип).

As — преобразование типов. Возвращает левый операнд, приведенный к типу, заданному правым операндом (статический тип), но as возвращает null , где (T)x вызывает исключение.

10. Ключевое слово yield

Ключевое слово yield позволяет заполнить интерфейс IEnumerable объектами (items). Следующий пример вернет все степени двойки от 2 до 2 в степени 8 (то есть 2, 4, 8, 16, 32, 128, 256):

В правильных руках yield — очень мощная вещь. Оно позволяет с легкостью генерировать последовательность объектов, то есть системе не придется перечислять всю коллекцию целиком — это может быть сделано по требованию.

C# и Linux.

Как вы думаете, каковы перспективы языка C# на платформе Linux, Mono в сравнении с теми же Java и C++. Я начинающий программист, но образование в области экономики, потому больше интересует ООП, в перспективе — что-нибудь системное. Какое мнение вообще относительно этого языка, вне проблем с лицензией.

Re: C# и Linux.

Re: C# и Linux.

C# — мелкомягкая байда, которая в принципе ничего не решает

Re: C# и Linux.

Не надо изучать оопные языки. Пока мозги не испортил окончательно — иди на http://www.haskell.org/ и на http://www.schemers.org/

А оопная параша — для быдла.

Re: C# и Linux.

Язык перспективный, но его широкое распространение под линукс маловероятно.

Re: Re: C# и Linux.

Но позиционируется как основной язык для платформы .Net Framework. Для этого мелкомягкие заявляют, что C# заменит C++ и значительно лучше сопровождают этот язык, чем C++ в своей Visual Studio. Слышал я, что один известный автор издания O’Reilly по C# восхищался C# и сказал, что лучше пойдет к стоматологу, чем будет писать на managed С++. А в сети выложили очередную версию mono.

Re: Re: C# и Linux.

Что в ней такого плохого, в «ООП-ной параше»? Факториал на C# не рассчитаешь, но считается, что ООП программы в своей сфере надежнее. Ведь Python и Ruby тоже языки ООП, но в Linux признаются.

Re: Re: Re: C# и Linux.

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

Re: C# и Linux.

ИМХО переспективы никакие. И вот почему — слишком много уже написано в линуксе на C/C++ да еще и Perl’е. Чтобы ввести новый язык, он должен предоставлять очевидные преимущества в работе. Например питон, сочитая мощь полного OOP, имея огромую библиотеку стандартного API и являясь кроссплатформенным стал популярен очень быстро (вы ведь не забыли, что питон еще достаточно молод ;)

А вот скажите мне какие плюсы дает C#? Че то не видно никаких, и сколько я не читал обзоры мелкомягких — так и не проникся им.

Re: Re: C# и Linux.

Спасибо за разъяснения :-) Плюсы я вижу в самой платформе .Net Framework. ИМХО для мелкомягких вещь революционная, в плане общих библиотек классов для нескольких языков и управления памятью. К тому же мне C# показался проще C++, который мне вообще в варианте gcc и Visual C++ не дался. От Borland С++ Builder я получил значительно больше удовольствия. Но он очевидно менее гибок. Кстати, эта самая, не совсем любимая мной контора пророчат смерть C++ как «устаревшему бардачному языку» и платформе Java/Corba. Язык мне понравился. Но я хотел бы знать мнения и других людей.

Re: Re: Re: Re: C# и Linux.

А какая модель наиболее перспективна, полезна и оплачиваема? Если только не драйвера писать. В прошлом я занимался математическим анализом результатов статистических условий. Софт нашел только под виндами, программы Statistica и Mathcad с внутренними языками. На мой взгляд, в плане математики ничего лучше не придумали.

Re: Re: Re: Re: Re: C# и Linux.

Не условий, а исследований :-)


Re: Re: C# и Linux.

А можно ли на Python написать Quake 2? По-моему, у этого языка довольно узкий груг задач, одной из основных является веб. C++ важен там, где нужны сложные вычисления. Наверное, теперь от языков требуются и другие вещи, например, продуктивность разработки. От C# я хотел бы иметь возможность писать под Linux, и под винды, но в Linux. Но не знаю еще, что собой представляет язык, чтобы сказать что-то определенно.

Re: Re: Re: C# и Linux.

Питон не столько для веб..это скорее «клей», т.е. хорош для задач не слишком больших, но зато за счёт высокоуровневости и богатой библиотеке всё предельно компактно и понятно, ну скорость конечно да..

А С# под линуксом имхо никому особо не нужен, ничего особо выдающегося в нём тут нет.. проблем больше (в перспективе). Что реальная кросс-платформеность (на уровне библиотек) будет у Mono, тоже очень сомнительно. Для этого есть java. Ну и «скриптовые» языки запросто работают под linux/win.

Re: Re: Re: Re: Re: C# и Linux.

Перспективных моделей — вагон. ООП — лишь одна, и козлы все те, кто делает из неё панацею. У функциональщиков есть свои методологии разработки, куда как более правильные, чем ООД, есть и всякие там агентные да аспектные подходы.

Вместо Mathcad — Octave и Maxima. Всё это гораздо лучше коммерческих аналогов. А, тут ещё Axiom теперь свободный.

Re: Re: Re: Re: Re: Re: C# и Linux.

Отдельное спасибо за названные программы :-) Насчет новых языков и платформы Microsoft полностью согласен. Но будет ли востребовано функциональное программирование? Ведь програмирование должно обеспечить сносную жизнь самому программисту, участие в проектах и развертывание программ на площадке клиента, где могут быть различные платформы. Нашел список языков функциональной модели — Lisp и т. п. C++ позволяет использовать эту модель в полной мере? Где можно найти программы, написанные с использованием данной модели, чтобы представить примерный список выполянемых задач ?

Re: Re: Re: Re: Re: Re: C# и Linux.

Ведь Java — тоже язык ООП.

Re: Re: Re: C# и Linux.

>>Но не знаю еще, что собой представляет язык
C# это блювота и этим все сказано. От C/C++ там только буква названии.

Re: Re: Re: Re: Re: Re: Re: C# и Linux.

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

C# — это мс-овская замена java. Пока под платформы кроме МС и API-то на чуть-чуть спортировано (да и сомневаюсь я что оно на всех платформах единообразным будет, скорее всего будет на МС завязано).

Если CBuilder показался легче gcc — неправильно парень мыслишь, сомневаюсь что из ООП в CBuilder-e ты кроме object->method что-нибудь использовал. Реально тебе сейчас нужен _как можно более строгий язык_, изучи хотя бы паскаль.

Если уж так нравится ООП — если хочешь то можешь использовать эту модель и в лиспе, (ну охренели уже, куда только это ООП не пихают), там тоже появилась объектная модель (ищи common lisp object system)

Re: Re: Re: Re: Re: Re: Re: Re: C# и Linux.

> э, парень, пока от тебя за версту маркетинговым бредом несет. Согласен. Но сюда я зашел для выяснения истины. > Про любой язык в книжке а-ля программирование на русском матерном за 21 день А вот тут были книги издательства O’Reilly, Sybex, M$ Press, не на русском, а на ругательном и немецком. Файлообменные сети и IRC рулят. > да и сомневаюсь я что оно на всех платформах единообразным будет, скорее всего будет на МС завязано И здесь я склонен согласиться, так как серьезно изучал маркетинг — если уж мелкомягкие все это затеяли, им нет особого смысла делать полноценные порты на другие ОС, ведь все это работает и на привязку программистов к M$. > Если CBuilder показался легче gcc — неправильно парень мыслишь, сомневаюсь что из ООП в CBuilder-e ты кроме object->method что-нибудь использовал. Частично это так. Я не привязан конкретно к ООП, я использую все, что мне доступно. Но и первое образование у меня не программиста. Паскаль изучать не хочу и не буду, два года его изучал в профильном классе и успешно писал приложения. gcc в процессе программирования просто не подошел под мои задачи, да и не было нормальной литературы. Если чего посоветуете — буду благодарен :-)

Re: Re: Re: Re: Re: Re: Re: Re: C# и Linux.

«Чужие доспехи либо широки, либо тесны, либо громоздки» (H.Макиавелли) Не поймите уж очень превратно. Просто я новичок в программировании, но уже специалист в области экономики. В связи с появлением платформы .Net и всеми прочими изменениями в мире программирования, мне толком не понятно, какой язык выбрать для задач, связанных с моей областью и на перспективу с другими. Pascal — не мое, есть более перспективные вещи, должны быть.

Re: Re: Re: Re: Re: Re: Re: C# и Linux.

Искать документ под названием «Why functional programming matters», а так же «Being popular» Пола Грэхема (http://www.paulgraham.com/). C++ — позволяет в кастрированной форме, смотреть Intelib и Boost-lambda.

Re: Re: Re: Re: Re: Re: Re: Re: C# и Linux.

Это кто ещё охренел? CLOS была, когда C++ и в проекте не было, и Smalltalk-а никто не видел.

Re: Re: Re: Re: Re: Re: Re: Re: Re: C# и Linux.

Нет ничего «перспективного». Нельзя изучать языки — это глупо и подло. Надо изучать программирование вообще — без привязки к языкам.

Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: C# и Linux.

ИМХО лучше это делать на практике. Да и годы не позволяют — диплом с отличием в лучшем экономическом ВУЗе страны сделает студента еще одним безработным. Так как я не 18-летний студент компьютерного ВУЗа, я не могу изучать Pascal для того, чтобы врубиться в основы программирования. Продукт компьютерных знаний должен подлежать продаже с целью обеспечения собственной самостоятельной жизни. В системное программирование я сразу лезть не собираюсь, не моя это сфера, я все-таки получил фундаментальное образование в области экономики и если и напишу программу, то, как минимум, сделаю это с относительно хорошим знанием бизнес-процесса и зачем это надо. Лучшим средством обучения считаю изучение языка параллельно со сдиранием и компиляцией готовых программ, в порядке эксперимента, через старое доброе подражание. Спасибо за все советы и заранее спасибо за возможные в будущем :-)

Re: C# и Linux.

Re: Re: C# и Linux.

А какова основная сфера применения функционального программирования? Вроде бы оно применяется, в основном, в сфере, где требуются сложные вычисления. Можно ли назвать эту модель универсальной и программировать графику, либо что-нибудь для сети? Можно ли написать программу с GUI, работающую с базами данных? Вроде бы во многих американских университетах преподают тот же Sheme, но программисты на русских форумах не в восторге от этого языка.

Re: Re: Re: C# и Linux.

По поводу программирования вообще. Приходилось быть знакомым со студентами-бухгалтерами. После окончания ВУЗа трудно сказать, что они владеют бухучетом. Все приходит на практике, понимание всех фундаментальных понятий, которые были для них в универе пустым звуком. Пока не почувствуешь цифр в бухучете, не поймешь смысла дебетового сальдо. Пока не начнешь писать программы — имхо не поймешь, что такое объект, с самым золотым Страуструпом.

Re: какова основная сфера применения

Ну это же очевидно. Создание программ:-).

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

>Можно ли назвать эту модель универсальной и программировать графику, либо что-нибудь для сети

Вполне. При достаточном наборе примитивов «функции» ничем не хуже обьектов. А часто лучше.

>в . университетах преподают . Sheme, но программисты на русских форумах не в восторге от этого языка

Я тоже — Хаскель лучше, IMHO:-). Но я подозреваю, что ему(как впрочем и схеме со товарищи) просто _некому_ учить русских студентов. А переучиваться трудно.


Резюме(IMO): Если программирование — не твоя основная специальность учить нужно высокоуровневые декларативные языки(функциональные или нет — зависит от решаемых задач). В противном случае — нужно знать много разных языков. А начинать с империтивных языков — в любом случае вредно.

Re: Re: Re: C# и Linux.

Графику? Смотри на Pan или Pacito или Fran. Морды? Смотри на WASH и Fudgets. Вообще в функциональщине абсолютно всё делается гораздо удобнее и приятнее, чем в императивщине. А на русских форумах — не программисты, а быдло, не слушай их.

Re: Re: какова основная сфера применения

Посмотрел Хаскель, выкачал большинство из названных сред разработки. Программы можно представлять в виде exe-файла? Какая среда будет получше? Есть ли доки на русском? Насчет сложности согласен — синтаксис вроде приятный.

Re: Re: Re: какова основная сфера применения

Для быстрой разработки и отладки — Hugs. Для компиляции быстрого бинарника — ghc.

На русском — документации вроде бы и нет, есть курсы лекций и некоторые переводы.

Re: Re: Re: Re: какова основная сфера применения

ghc скачал и поставил, c Hugs проблемы, не хочет пока качаться. По поводу языка Sheme — высказывания на xpoint.ru. Вот ссылка, если интересно: http://xpoint.ru/forums/programming/theory_algorythms/thread/22051.xhtml. Спасибо за советы.

Re: Re: Re: Re: Re: какова основная сфера применения

Hugs — таки обязателен, GHCi его не заменяет.

По поводу того форума — дурачьё там собралось. Почти не видно грамотных людей, сплошные соплежуи. Никто даже не упомянул про такую ГЛАВНУЮ особенность Схемы (и её дедушки-Лиспа), как макры, и наличие полноценного языка в момент развёртки макросов (так что любителям темплейтов в C++ заткнуться и не жить). Так же никто ни разу про Форт не заикнулся. Давить это безмозглое безграмотное мудачьё, короче.

Re: Re: Re: Re: Re: Re: какова основная сфера применения

Ты скажи, Уважаемый, после твоих ценных советов в стиле «как хороша была бы идеальная жизнь» этот чел. спрашивающий работу себе найдёт после ковыряния с хаскелями и пр.

С императивщины, как завещал один изобретатель биореактора может и вредно для мозгов начинать, зато платят неплохо. А когда платят хорошо, то можно в своё удовольствие в свободное время уже и хаскели всякие изучать. А по-поводу императивщины/неимперативщины советую прикинуть — сколько ПО на чём пишут, а уже потом давать охрененные советы..

>Давить это безмозглое безграмотное мудачьё

гы гы гы, сразу видно, долго думал, прежде чем писать. И что примечательно, товарищ даже тебя послушал, вроде. Наверно, проникся советами «гуру».

Re: после твоих ценных советов .

>этот чел работу себе найдёт после ковыряния с хаскелями и пр.

Это зависит от его желаний. Ели хочется зарабатывать кодерством — _сегодня_ лучше учить Java/PHP/C*/. — популярные но относительно слабые языки. Ежели хочется ставить/разрабатывать/решать задачи — лучше это делать с более мощными средствами. Хаскель во многих случаях подойдет.

>С императивщины . платят неплохо . можно в своё удовольствие в свободное время уже и хаскели всякие изучать.

Оппонент забыл учесть, что кодирование в империтивных языках — достаточно тесный рынок. Так что платить там должны не очень хорошо. Да и времени на «своё удовольствие» останется не так много.

>советую прикинуть — сколько ПО на чём пишут,

Ну, и посмотри на (мягко говоря)качество этого (грубо говоря)ПО :-) Аргумент про миллионы мух не работает.

Re: Re: Re: Re: Re: Re: Re: какова основная сфера применения

Тот, кто реально много зарабатывает (или хотя бы хочет много зарабатывать) — сам решает, на чём ему писать. И когда он пишет на правильных, а не мудатских языках, он работает намного эффективнее, и, сталобыть, зарабатывает больше. Кому может быть интересна карьера кодера, который делает, что ему прикажут? Тем более, если человек — и так специалист в своей области, ему не надо работать подмастерьем, ему надо решать *свои*, *профессиональные* задачи.

Re: Re: после твоих ценных советов .

>>этот чел работу себе найдёт после ковыряния с хаскелями и пр.

>Это зависит от его желаний. Ели хочется зарабатывать кодерством — _сегодня_ лучше учить Java/PHP/C*/.

Зависит не только от желаний, а ещё и от того, что рынок предлагает. А предлагает он, в основном, императивщиной зарабатывать. Не буду отрицать, имеются вакансии, к примеру, для ML, но их крa-aйне мало..

>популярные но относительно слабые языки.

Абсолютно необоснованное утверждение. Где мера силы/слабости языка?

>Ежели хочется ставить/разрабатывать/решать задачи — лучше это делать с более мощными средствами. Хаскель во многих случаях подойдет.

Чушь. Что в твоём понимании является ЗАДАЧЕЙ? Причём такой, что решется она именно с пом. функционального программирования и никак иначе?

Как показывает практика, ставят задачи и решают их несколько разные люди, выполняющие разные функции. А решатели ЗАДАЧ сейчас ненужны становятся, потому как после ухода из конторы подобного решателя, второго такого непонятно где искать надо будет. И все здравомыслящие люди понимают это и поэтому раработаны/разрабатываются методики написания сОфта в рамках которых все выполняют свои функции и никакие решатели с большой буквы там нах не сдались.

>Оппонент забыл учесть, что кодирование в империтивных языках — достаточно тесный рынок. Так что платить там должны не очень хорошо. Да и времени на «своё удовольствие» останется не так много.

Да ладно тебе, Уважаемый. На хлеб с маслом и икрой хватает, а также на всё, что потребоваться может для комфортного проживания..

>Ну, и посмотри на (мягко говоря)качество этого (грубо говоря)ПО :-) Аргумент про миллионы мух не работает.

Стало быть, те кто пишут на функциональных языках шедевры выдают? Ха ха ха ха ха.

Re: Re: Re: Re: Re: Re: Re: Re: какова основная сфера применения

>Тот, кто реально много зарабатывает (или хотя бы хочет много зарабатывать) — сам решает, на чём ему писать. И когда он пишет на правильных, а не мудатских языках, он работает намного эффективнее, и, сталобыть, зарабатывает больше. Кому может быть интересна карьера кодера, который делает, что ему прикажут? Тем более, если человек — и так специалист в своей области, ему не надо работать подмастерьем, ему надо решать *свои*, *профессиональные* задачи.


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

А бред про мастеров и подмастерьев придумали товарищи из ещё тех совковых НИИ и прочих подобных контор, которые своей копейкой никогда ни за что не отвечали.

Есть такая вещь как разделение труда. Профессиональная задача программиста это правильно и эффективно программы писать, а не решение задач вселенского масштаба.

Re: Re: Re: после твоих ценных советов .

>Абсолютно необоснованное утверждение. Где мера силы/слабости языка?

Обоснованое, на самом деле. Мощность, как известно, пропорциональна работе и обратно пропорциональна времени ее выполнения. Пессимисты утверждают, что отказ от империтивности уменьшает время создания проги всего лишь в 4 раза(оптимисты говорят про 10). Некоторое кол-во проведеных опытов подтверждают это(может быть с точностью до положительного коэффициента Чушь. Что . является ЗАДАЧЕЙ . что решется . с пом. функционального программирования и никак иначе?

Я не говорил про «никак иначе». Все программистские задачи могут быть решены многими способыми. Просто некоторые способы проще/быстрее/эффективнее других.

>поэтому раработаны методики написания сОфта .

Как кто-то писал «Это есть средство писать программы, а не написать их».

>На хлеб с маслом и икрой хватает.

Конечно. Но методы ориентируются на то, что исполнители часто заменяются. Посему нет смысла создавать им идеальные условия.

>Стало быть, те кто пишут на функциональных языках шедевры выдают

Ты сказал. То, что при _развитых_ империтивных методиках программы получаются «кривыми» свидетельсвует об недостатках этих методик. А про ф-ные шедевры — стоило бы сравнить качество программ среднего размера, написаные за одинаковое время 2мя группами программистов эквивалентной квалификации с использованием разных языков по одной постановке. Что-то похожее делается в рамках IFCP — но там очень жесткое время и ненормирована квалификация.

Re: Re: Re: Re: после твоих ценных советов .

>Обоснованое, на самом деле. Мощность, как известно, пропорциональна работе и обратно пропорциональна времени ее выполнения. Пессимисты утверждают, что отказ от империтивности уменьшает время создания проги всего лишь в 4 раза(оптимисты говорят про 10). Некоторое кол-во проведеных опытов подтверждают это(может быть с точностью до положительного коэффициента >На хлеб с маслом и икрой хватает.

>Конечно. Но методы ориентируются на то, что исполнители часто заменяются. Посему нет смысла создавать им идеальные условия.

Конечно, но не всё так мрачно в этом королевстве. Акулы капитализма не занимаются повальным питиём крови у несчастных программистов. Бывает, что создают весьма хорошие условия для работы.

>>Стало быть, те кто пишут на функциональных языках шедевры выдают

>Ты сказал. То, что при _развитых_ империтивных методиках программы получаются «кривыми» свидетельсвует об недостатках этих методик. А про ф-ные шедевры — стоило бы сравнить качество программ среднего размера, написаные за одинаковое время 2мя группами программистов эквивалентной квалификации с использованием разных языков по одной постановке. Что-то похожее делается в рамках IFCP — но там очень жесткое время и ненормирована квалификация.

Не верю! Звучит как панацея от всех проблем. Если это так, почему за 20-30 летние существование функционального подхода от императиного почти полностью не отказались повсеместно?

Где прочитать можно о сравнении качества? Или это только твоё мнение?

Re: Re: Re: Re: Re: после твоих ценных советов .

>с трудом верится. А где почитать можно

Цифра 10 — по моему от Ericsson — они придумали «erlang»(он, впрочем, не очень функциональный, afaik), переучили программеров и говорили о таком приросте производительности. Еще где-то в инете есть статья про проводившийся US-овскими военными эксперименте по определению «лучшего языка для прототипирования». Там оценивавшие результат отказывались верить, что им представлена работающая программа на Haskell и говорили что-то типа «это слишком круто, чтобы быть приемлемо». Еще кто-то за пару месяцев в свободное от работы время соорудил полнофункциональный HTTP сервер.

Разумеется, такие «опыты» очень субьективны и зависимы от задачи. Они могут только показать, что разложение задачи на компоненты типа «функция» _может_ быть очень эффективным решением. Разумеется не всегда. К тому же это все было давно — империтивщики тоже на месте не стояли.

>Не верю! Звучит как панацея от всех проблем

И правильно. На последнем ICFP соревновании первые 2 места были за C++ :-) Человеческий фактор все еще гораздо больше этих 4-10 раз. Но большинство программ пишется все-таки не «гениями» — посему даже 2х-кратное преимущество должно быть привлекательным.

>почему за 20-30 летние существование функционального подхода от императиного почти полностью не отказались повсеместно

1. Слабость компютеров совмещенная с недостаточно проработаными методами оптимизации делала невозможным достаточную скорость выполнения ф-ных программ. Сегодня тот же Хаскель подбирается вплотную с Java с C++, Оcaml иногда обгоняет C, а программы и вовсе пишутся на интерпретирующих языках — этот фактор исчез.

2. Пойди скажи среднему Java/C*/. программисту о том, что писать нужно на языке не содержащем изменения значения переменных, методов указания порядка выполнения операторов, циклов — и посмотри, как он на тебя посмотрит:-). А деньги обычно вкладываются в массовые вещи. Инерция очень велика.

>о сравнении качества? Или это только твоё мнение?

Это даже не мнение — не на чем его основать. Хотелось бы провести сравнение Java vs Python vs C++ vs Ocaml vs Haskell . Причем сегодня — а не 10 лет назад. Увы, готового такого я не видел.

PS: почему за 20-30 летние существование

3. Я однажды видел, как в PL/SQL было написано руками(посредством циклов) декартово произведение 4х таблиц — при том, что sql сам это делает гораздо проще и эффективнее. Трудно заставить программиста думать «по другому». А тем более — «совсем по другому»:-)

Re: Re: Re: Re: Re: Re: после твоих ценных советов .

>Цифра 10 — по моему от Ericsson — они придумали «erlang»(он, впрочем, не очень функциональный, afaik), переучили программеров и говорили о таком приросте производительности. Еще где-то в инете есть статья про проводившийся US-овскими военными эксперименте по определению «лучшего языка для прототипирования». Там оценивавшие результат отказывались верить, что им представлена работающая программа на Haskell и говорили что-то типа «это слишком круто, чтобы быть приемлемо». Еще кто-то за пару месяцев в свободное от работы время соорудил полнофункциональный HTTP сервер.

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

Подобной информации явно недостаточно для утверждений в духе «А лучше Б» и программисты на «А» пишут быстрее/эффективнее программистов на «Б». А следовательно, мне непонятно вообще на чём основывались советы изучать функциональные языки. Рынок — мал, то что на них программы эффективнее — далеко не факт (если факт, дайте мне статистику задокументированную). Для расшитрения кругозора если только..

>Разумеется, такие «опыты» очень субьективны и зависимы от задачи. Они могут только показать, что разложение задачи на компоненты типа «функция» _может_ быть очень эффективным решением. Разумеется не всегда. К тому же это все было давно — империтивщики тоже на месте не стояли.

Во во во. Только многие апологеты функциональщины или не знают об этом или не понимают этого.

>На последнем ICFP соревновании

А что это такое?

>Пойди скажи среднему Java/C*/. программисту о том, что писать нужно на языке не содержащем изменения значения переменных, методов указания порядка выполнения операторов, циклов — и посмотри, как он на тебя посмотрит:-)


;-) ну, не все мы такие тёмные люди.

Re: Re: Re: Re: Re: Re: Re: после твоих ценных советов .

>Это не является результатом ислледований какого-то специального института

А ты знаешь институт, занимающийся этими проблемами? IMO при принятии решения лучше основываться на хоть какой-то информации. Есть у тебя результаты _исследований_, показывающие преимущества Явы(или что ты предпочитаешь) над (например)Хаскеллем? А какого же ты его используешь:-)?

>дайте мне статистику задокументированную

Не сочти оскорбление, но (-:иди ты на гугл!:-). Там ты найдешь результаты исследований, показывающие, что скорость написания программы в строках/время — (практически) не зависит от языка. Теперь осталось сравнить размеры эквивалентных программ на разных языках. Осталось найти эти программы. Или написать.

«Functional programmers argue that there are great material benefits — that a functional programmer is an order of magnitude more productive than his conventional counterpart, because functional programs are an order of magnitude shorter. Yet why should this be? The only faintly plausible reason one can suggest on the basis of these «advantages» is that conventional programs consist of 90% assignment statements, and in functional programs these can be omitted!»

>А что это такое ICFP

International Conference on Functional Programming. Они проводят такое-себе программистское соревнование: кто лучше решит задачу за 24 и за 72 часа.

Re: Re: Re: Re: Re: Re: Re: Re: после твоих ценных советов .

>А ты знаешь институт, занимающийся этими проблемами? IMO при принятии решения лучше основываться на хоть какой-то информации. Есть у тебя результаты _исследований_, показывающие преимущества Явы(или что ты предпочитаешь) над (например)Хаскеллем? А какого же ты его используешь:-)?

В данном споре про то, что учить стоит, я оцениваю положение дел с позиций количества имеющихся вакансий, которые можно без труда для разных стран найти. Если я хочу сказать, учите Java т.к. количество вакансий для неё на столько-то процентов больше чем на ML, то я нахожу нужную страницу в инете в доказательство если кто спорить начинает. Ты высказал мысль, что фукциональщина по эффективности обгоняет императивщину, в доказательство приведя непонятные исследования, и ты же говоришь а докажите мне обратное.. Не кажется несколько нелогичным данный подход? Мне кажется более логичным свои утверждения подкреплять _самим_ найденой статистикой, а не ответом в стиле — «не веришь, докажи мне обратное». Если ты мне не веришь, что количество вакансий для программистов на императивных языках в разы больше чем для программистов на функциональных языках, я готов потратить время и пособирать для тебя статистику по Европе, к примеру, кто требуется. А, вот, сможешь ли ты какую статистику найти в доказательство своим словам? То, что «кажется, американские военные исследовали» и т.п. доказательством достаточным не является, я тебе об этом пытался намекнуть.

А посылать искать инфу для доказательства _своих же_ утверждений — это кто угодно сможет, только несерьёзно это..

Re: Re: Re: Re: Re: Re: Re: Re: Re: после твоих ценных советов .

>ответом в стиле — «не веришь, докажи мне обратное»

Это не мои слова. Я, основываясь на доступной в инете информации, утверждаю, что фукциональщина эффективнее. К сожалению, не могу сейчас указать url-и — но я их не выдумал:-). И я не прошу тебя доказывать обратное — просто указываю, что я не видел таких результатов, и ты, вероятно, тоже — это просто неисследуемая область.

Я знаю про количество вакансий.

>То, что «кажется, американские военные исследовали» и т.п. доказательством достаточным не является

Каковы твои требования к «достаточному доказательству»? Нужна подтвержденная нотариусом подпись начальника какого-либо института? Я не могу этого предоставить. Есть только опубликованые в инете статьи, воспоминания, обзоры. Подтверждаемые только тем, что искажение информации не сулит никаких бонусов исказившему.

>А посылать искать инфу для доказательства _своих же_ утверждений — это кто угодно сможет

Ну, извини. Лежал haskell.org — потому найти не получалось. Вот есть бородатое(10лет уже) воспоминание об военных: http://www.haskell.org/papers/NSWC/jfp.ps.

Про erlang: A reasonably complex problem involving distribution and fault tolerance will be roughly five times shorter in Erlang than in C.

Давай завтра сравним, cкажем, парсер HTML или XML валидатор — проблем найти реализации не будет. Только не понятно, как сравнивать обьемы — там кучи коментариев и функциональность может расходиться.

Serial Programming using Mono and C sharp (C#) on Linux

Mono is a free and opensource equivalent to the Microsoft’s .Net Framework platform developed by Xamarin which can be used to run programs using the .Net framework on Linux and other Unix like systems.Mono Framework can be used to write cross platform programs that would run on both Windows and Linux like OS’s with minimal or no change to the source code.

In this tutorial we will learn how to install a mono runtime and compiler on a Linux System (I am using Ubuntu here),Compile a simple hello world program and communicate with the external world ie a microcontroller board through serial port using a USB to Serial Converter (USB2SERIAL).

The Mono Project consists of an ECMA complaint Common Language Runtime called Mono Runtime for running the executables and a C# compiler for compiling your .CS files into executables called Mono Csharp Compiler or mcs.

Sourcecodes

All the CSharp (C#) source files used in this tutorial can be downloaded from our GitHub Page.

Hardware Used

USB2SERIAL — Any easy to use multi protocol converter that can convert from USB to RS485/RS232/Serial.The Board comes with selectable voltage levels for interfacing with 5V and 3.3V logic families.


namespace MyMonoProgram
<
class MyProgram
<
public static void Main()
<
Console. WriteLine (» \nHello Mono from Ubuntu\n «);
>
>
>

Now save the file as » HelloMono.cs » on your home directory (or an other directory) and compile it by typing

if there are no errors the HelloMono.cs file will be compiled into a HelloMono.exe file, which you can view by using the ls command (as shown in the below figure).

You can then run the resulting exe file using the mono runtime by typing

on the terminal.

In the above example we have used command line tools to compile and run the C# file ,If you like a proper IDE mono project also develops MonoDevelop which comes with features like automatic code completion, source control, a graphical user interface (GUI) and Web designer.It also supports several languages like Boo, C, C++, C#,F#,Java,Python,and Visual Basic.NET .

MonoDevelop on Windows 7

Serial Port Programming using Mono

Now lets go to the main course,programming your serial port using Mono.If you have any experience building embedded systems you may have encountered situations where you want to communicate with an external microcontroller board to log data to your PC or send AT Commands to a GSM modem.

The easiest way to achieve that is to send your data through a Serial Port,Even though hardware serial ports are being replaced with USB ports, you can find cheap USB to Serial converters based on FTDI FT232 like USB2SERIAL for doing the conversion.

In Linux serial ports are named as ttyS1,ttyS2 for hardware ports and ttyUSB0 (FTDI based) or ttyACM0 (TUSB3410 based) for USB to Serial Converters,the port numbers may vary on your system.You can check this tutorial for finding out your serial port number.

Opening a Serial Port in Mono

Now lets write a small C# program to open up a connection with your Serial Port (Hardware Port or USB to Serial Converter).Open up a text editor,type out the code shown below and save it as «MonoSerial.cs» on your harddisk.

using System;
using System.IO.Ports ;

namespace MonoSerial
<
class Program
<
public static void Main()
<
SerialPort Serial_tty = new SerialPort();

Serial_tty.PortName = » /dev/ttyUSB0 «; //Assign the port name,
//here ttyUSB0 is the name of the USB to Serial Converter used.

try
<
Serial_tty.Open() ; //Open the Port
Console.WriteLine(«Serial Port <0>Opened»,Serial_tty.PortName);
>
catch
<
Console.WriteLine(«ERROR in Opening Serial Port»);
>
>
>
>

Please note that ttyUSB0 is the name of the USB to Serial converter chip detected by my system,Find out the name of you serial port and substitute that instead of ttyUSB0 in the above code before compiling . After saving the file ,compile it using mcs.On successful compilation it would create an executable named as » MonoSerial.exe » .

In Linux access to the serial port is only available to the root user ,so you will have to run the exe file with root privileges using «sudo» command as shown below.

$ sudo mono MonoSerial.exe

Now give the password to your system so that the code can run ,if all goes well it will print

» Serial Port /dev/ttyUSB0 Opened » on the terminal as shown in the below figure.

Writing a Character to Serial Port using Mono

After we have opened a connection to the Serialport,let’s write some characters to the serial port.Open up a text editor and type the following code to it ,save the file as «MonoSerialWrite.cs«.

using System;
using System.IO.Ports ;

namespace MonoSerialWrite
<
class Program
<
public static void Main()
<
string ttyname;
SerialPort Serial_tty = new SerialPort();

Console.Write(«\n\n Enter Your SerialPort[tty] name (eg ttyUSB0)-> «);
ttyname = Console.ReadLine();
ttyname = @»/dev/» + ttyname;

Serial_tty.PortName = ttyname; // assign the port name
Serial_tty.BaudRate = 9600 ; // Baudrate = 9600bps
Serial_tty.Parity = Parity.None; // Parity bits = none
Serial_tty.DataBits = 8 ; // No of Data bits = 8
Serial_tty.StopBits = StopBits.One; // No of Stop bits = 1

try
<
Serial_tty.Open(); // Open the port
Serial_tty.Write(«A») ; // Write an ascii «A»
Serial_tty.Close(); // Close port
Console.WriteLine(«\nA written to port <0>«, Serial_tty.PortName);
>
catch
<
Console.WriteLine(» Error in Opening <0>«,Serial_tty.PortName);
>
>
>
>

Connect a microcontroller board to your serial port using null modem connection in order to receive the transmitted character.

In Null modem connection TX pin of PC serialport is connected to the RX pin of Microcontroller and vice versa as shown in the below figure.

In case you don’t have a hardware serial port use a USB to Serial Converter like USB2SERIAL.USB2SERIAL can also be used as an USB to RS485 converter or as an FT232 development Board.The Board can be purchased online from ebay.

Compile the code using mcs compiler and run it using mono runtime .Please remember to run your executable as root using sudo command.Screenshot shown below.

When the data is transmited the TX/RX LED on the USB2SERIAL board will blink indicating that a byte has been transmitted.Now on the microcontroller side you can write code to take some action like lighting up an LED or turning on a motor.

Receiving a Byte through Serial Port using Mono

Here we will receive the data send from a microcontroller board(Transmitter) to the Linux PC through the serial port.The Microcontroller board (Here I am using MSP430 Launchpad from TI) will send a string «Hello from MSP430» serialy to the PC.You can use any microcontroller like 8051,PIC,ARM,STM32 etc instead of MSP430 on the transmitter side.

The code for receiving the data send from the microcontroller is shown below.Here we are using Console.ReadLine() function to read the data send from the MSP430.Please note that the timeout’s for the serial port are not set so the program will wait indefinitely till the data is received.

using System;
using System.IO.Ports ;

namespace MonoSerialRead
<
class Program
<
public static void Main()
<
string ttyname = «»;
string ReceivedData = «»;

SerialPort Serial_tty = new SerialPort();

Console.Write(«\n Enter Your SerialPort[tty] name (eg ttyUSB0)-> «);
ttyname = Console.ReadLine();
ttyname = @» /dev/ » + ttyname;

Serial_tty.PortName = ttyname;
Serial_tty.BaudRate = 9600; // Baudrate = 9600bps
Serial_tty.Parity = Parity.None; // Parity bits = none
Serial_tty.DataBits = 8; // No of Data bits = 8
Serial_tty.StopBits = StopBits.One; // No of Stop bits = 1

try
<
Serial_tty.Open() ;
Console.WriteLine(«\n Waiting for Data. «);
ReceivedData = Serial_tty.ReadLine(); // Read the data send //from microcontroller
Serial_tty.Close(); // Close port
Console.WriteLine(» \n <0>received\n «, ReceivedData);
>
catch
<
Console.WriteLine(«Error in Opening <0>\n»,Serial_tty.PortName);
>
>
>
>

Compile the program and run it.Enter the name of your serial port and the program will wait for data to be transmitted by the microcontroller as shown in the below figure.


Reset your microcontroller to send the string «Hello from MSP430«.

The program will then print out the received string on the console window.

One thing to note that, is Console.ReadLine() will return only after encountering the end of line character » \n «.Please make sure that the microcontroller sends the » \n » character otherwise the Console.ReadLine() will never return and program will hang.

Controlling RTS and DTR pins

Controlling the RTS and DTR pins can be accomplished by using RtsEnable and DtrEnable properties of the SerialPort object.

using System;
using System.IO.Ports;

namespace MonoSerialRTSDTRControl
<
class Program
<
public static void Main()
<
string ttyname = » /dev/ttyUSB0 «; // port name
SerialPort Serial_tty = new SerialPort();
Serial_tty.PortName = ttyname;
Serial_tty.Open(); // Open the port
Serial_tty.RtsEnable = true; // RTS pin = 1 ,

RTS = 0
Console.Read(); // Press any key
Serial_tty.RtsEnable = false; // RTS pin = 0 ,

RTS = 1
Console.Read();
Serial_tty.DtrEnable = true; // DTR pin = 1,

DTR = 0
Console.Read();
Serial_tty.DtrEnable = false; // DTR pin = 0,

DTR = 1
Console.Read();

One use of RTS and DTR pins is used to control the RS485 chips during a USB to RS485 conversion.When you have to control some thing over several 100’s of meters ,RS232 or USB will not be suitable.In such cases we have to use RS485 protocol, one problem with RS485 is that most PC’s / Laptops will not have an RS485 port.You can solve that problem by using USB to RS485 converters like USB2SERIAL .In USB2SERIAL RTS pin is used to put the RS485 chip in receive mode and DTR pin is used to put the RS485 chip in transmit mode.

Please note that in FT232 based USB to Serial converters (like USB2SERIAL ) the RTS and DTR pins are inverted internally so setting the pins high will make then low and vice versa.

Connect a couple of LED’s to Visualize the logic levels of RTS and DTR pins of USB2SERIAL.

C# — C# with Linux

I developed a crop photograph windows application form but must store the photos on a Linux server.

This is she feasible via c # ??

All replies

I developed a crop photograph windows application form but must store the photos on a Linux server.

This is she feasible via c # ??

You should talk to your IT support to find out if the Linux server is already set up as a share. Typically, SAMBA is used.

If you are doing this yourself, then this article Using Samba to Share your Linux Folders With Another PC may be helpful to you.

  • Proposed as answer by DotNet Wang Moderator Friday, November 11, 2020 9:51 AM

You also could install and configure a FTP server in your Linux server. Here are the steps.

Then you could upload and download files from the FTE server using FtpWebRequest class. Here is a example of uploading file to FTP server using FtpWebRequest.

10 фич в C#, о которых вы определённо должны узнать и начать их использовать

Если вы только начали изучение C# или же решили расширить свои знания, мы нашли для вас 10 фич, знание которых позволит вам избежать ошибок, писать более понятный код и сохранить кучу времени.

1. async / await

Использование паттернов async / await позволяет разблокировать UI / текущий поток во время выполнения блочных операторов. Паттерны async / await позволяют коду продолжить выполнение, даже если что-то блокирует его выполнение (например, веб-запрос).

2. Инициализаторы объектов / массивов / коллекций

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

3. Лямбды, предикаты, делегаты и замыкания

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

4. ?? (Оператор объединения с NULL)

x ?? y — возвращает x , если значение отличается от null ; в противном случае возвращает y .

Может быть несколько операторов .

?? также может быть использован для перевода типов null в не null :

5. $”” (Интерполяция строк) — C# 6

Фича в C# 6 позволяет эффективно и элегантно собирать строки:

6. ?.(определяет null) — C# 6

x?.y — доступ к членам, определяемый условием null . Возвращает значение null , если левый операнд имеет значение null .

Больше никаких NullReferenceExceptions!

7. Выражение nameof — C# 6

Может показаться, что выражение nameof не особо полезно, но это не так. При использовании автоматических инструментов рефакторинга (например, ReSharper) иногда может потребоваться обратиться к аргументу метода по его имени:

Вот, как это должно быть:

8. Инициализаторы свойств (property) — C# 6

Инициализаторы свойств позволяют задавать начальные значения для свойств:

Польза их использования заключается в том, что вы не можете объявить setter, тем самым делая свойства неизменяемыми. Инициализаторы свойств хорошо работают в связке с синтаксисом первичного конструктора в C# 6.

9. Операторы as и is

Is — совместимость типов. Возвращает значение true, если вычисленный левый операнд может быть приведен к типу, указанному в правом операнде (статический тип).

As — преобразование типов. Возвращает левый операнд, приведенный к типу, заданному правым операндом (статический тип), но as возвращает null , где (T)x вызывает исключение.

10. Ключевое слово yield

Ключевое слово yield позволяет заполнить интерфейс IEnumerable объектами (items). Следующий пример вернет все степени двойки от 2 до 2 в степени 8 (то есть 2, 4, 8, 16, 32, 128, 256):

В правильных руках yield — очень мощная вещь. Оно позволяет с легкостью генерировать последовательность объектов, то есть системе не придется перечислять всю коллекцию целиком — это может быть сделано по требованию.

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих