السبب التاريخي وراء اختلاف الخطوط التي تنتهي عند منصات مختلفة

StackOverflow https://stackoverflow.com/questions/419291

سؤال

لماذا قرر DOS/Windows وMac استخدام و لإنهاء السطر بدلاً من ؟هل كان ذلك مجرد نتيجة لمحاولة أن تكون "مختلفًا" عن يونكس؟

والآن بعد أن أصبح نظام التشغيل Mac OS X هو Unix (-مثل)، هل قامت Apple بالتبديل إلى من ؟

هل كانت مفيدة؟

المحلول

ورثت DOS نهايات خط CR-LF (ما كنت تتصل \ ص \ ن، مجرد جعل الأحرف أسكي صريحة) من CP / M. CP / M ورثته من أنظمة التشغيل المختلفة التي أثرت ديسمبر CP / M مصمم غاري كيلدال.

وقد استخدم

CR-LF بحيث الآلات المبرقة سيعود رأس الطباعة إلى الهامش الأيسر (CR = الإرجاع)، ومن ثم الانتقال إلى السطر التالي (LF = سطر تغذية).

والتعامل مع الرجال يونكس أنه في تشغيل الجهاز، وعند الضرورة ترجمة LF إلى CR-LF على الإخراج إلى الأجهزة التي تحتاج إليها.

وكما كنت تفكر، ماك OS X يستخدم الآن LF.

نصائح أخرى

إضافة حقًا إلى @ مارك هاريسون ...

الأشخاص الذين يخبرونك أن Unix "يقوم فقط بإخراج النص الذي حدده المبرمج" بينما DOS معطل هم مخطئون تمامًا.هناك أيضًا ادعاءات بأنه من الغباء أن يقوم DOS بوضع علامة على EOF عندما يرى حرف EOF، مما يثير التساؤل حول الغرض من حرف EOF هذا بالضبط.

لا يوجد اصطلاح حقيقي واحد لنهايات أسطر الملفات النصية - فقط الاصطلاحات الخاصة بالنظام الأساسي.بعد كل شيء، حتى CR-LF وCR وLF ليست هي اصطلاحات نهاية السطر الوحيدة التي تم استخدامها على الإطلاق، ولم تكن ASCII أبدًا مجموعة الأحرف الوحيدة والوحيدة.المشكلة هي مكتبة C القياسية ووقت التشغيل، والتي لم تلخص هذه التفاصيل المعتمدة على النظام الأساسي.تمكنت لغات الجيل الثالث الأخرى (مثل باسكال وحتى Basic) من تحقيق ذلك، على الأقل إلى حد ما.ولهذا السبب، عندما تمت كتابة مترجمات لغة C لمنصات أخرى، كانت هناك حاجة إلى اختراق مكتبة وقت التشغيل لتحقيق التوافق مع كود المصدر والكتب الموجودة.

في الواقع، كان نظامي Unix وMultics هما اللذان احتاجا في الأصل إلى ترجمة سلسلة للإدخال/الإخراج لوحدة التحكم، حيث كان المستخدمون عادةً ما يجلسون على محطة ASCII التي تتطلب نهايات سطر CR LF.تم إجراء هذه الترجمة في برنامج تشغيل الجهاز، وكان الهدف هو تجريد تفاصيل الجهاز، على افتراض أنه من الأفضل اعتماد اتفاقية واحدة والالتزام بها بالنسبة للملفات النصية المخزنة.

يشبه اختراق الإدخال/الإخراج للنص C من حيث المبدأ ما يفعله CygWin الآن، حيث يقوم باختراق أوقات تشغيل Linux للعمل كما هو متوقع على Windows.هناك تاريخ حقيقي لاختراق الأشياء على وشك تحويلها إلى أنظمة Unix - ولكن هناك أيضًا Wine، الذي يحول Linux إلى Windows.ومن الغريب أنه يمكنك قراءة بعض انتقادات نهاية السطر لنظام التشغيل Windows في غير محلها الأسئلة الشائعة حول CygWin (تمت إضافة رابط أرشيف الإنترنت عام 2013 - الصفحة لم تعد موجودة).ربما يكون ذلك مجرد حس الفكاهة لديهم، لأنهم يفعلون ما ينتقدونه بشكل أساسي، ولكن على نطاق أوسع بكثير؛-)

تتجنب مكتبة C++ القياسية (أيًا كان النظام الأساسي الذي يتم تطبيقه عليه) هذه المشكلة باستخدام تدفقات iostream، والتي تنتهي بالسطر البعيد. بالنسبة للإخراج، فهذا يناسبني جيدًا.بالنسبة للإدخال، أحتاج إلى مزيد من التحكم، لذلك إما أن أفسر حرفًا بحرف أو أستخدم مولد الماسح الضوئي.

[يحرر لقد تبين أن الادعاء المشطوب أعلاه غير صحيح، ولم يكن كذلك على الإطلاق.ال std::endl يترجم حرفيا إلى أ \n وتدفق.ال \n هو بالضبط نفس الشيء \n تحصل عليه في C - يميل إلى أن يطلق عليه "سطر جديد"، ولكنه في الواقع حرف تغذية سطر ASCII، والذي تتم ترجمته بعد ذلك في وقت التشغيل إذا لزم الأمر.من المضحك كيف يمكن أن تصبح الافتراضات الخاطئة متأصلة لدرجة أنك لا تشكك فيها أبدًا - في الأساس، لم يكن لدى لغة C++ خيار للقيام بما فعلته لغة C (بخلاف إضافة المزيد من الطبقات في الأعلى) لأسباب التوافق، وكان ينبغي أن يكون ذلك واضحًا دائمًا.]

أكبر جزء من اللوم من وجهة نظري هو C، لكن C ليس المشروع الوحيد الذي فشل في توقع انتقاله إلى منصات أخرى.إلقاء اللوم على بيل جيتس هو مجرد جنون - كل ما فعله هو شراء وتلميع نسخة مختلفة من CP/M المشهورة آنذاك.في الواقع، إنه مجرد تاريخ - وهو نفس السبب الذي يجعلنا لا نعرف ما تشير إليه رموز الأحرف من 128 إلى 255 في معظم الملفات النصية.نظرًا لسهولة التعامل مع جميع اتفاقيات نهاية الأسطر الثلاثة، فمن الغريب أن بعض المطورين ما زالوا يصرون على أن "اتفاقية الأنظمة الأساسية الخاصة بي هي الطريقة الصحيحة الوحيدة، وسأفرضها عليك سواء شئت أم أبيت".

أيضًا - هل ستحل نقطة ترميز فاصل سطر Unicode U+2028 محل كل هذه الاصطلاحات في الملفات النصية المستقبلية؟؛-)

وهناك مقالة مطولة بدلا عن خط النهايات على ويكيبيديا. "التاريخ" القسم إجابات على الأقل جزء من سؤالك: http://en.wikipedia.org/ ويكي / سطر جديد # التاريخ

ومن المثير للاهتمام أن نلاحظ CRLF هو الى حد كبير مستوى الإنترنت. وهذا هو، الى حد كبير كل بروتوكول الإنترنت القياسي الذي يكون موجها خط يستخدم CRLF. SMTP، POP، IMAP، NNTP، وما إلى ذلك الجسم من البريد الإلكتروني يتكون من خطوط إنهاؤها من قبل CRLF.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top